tm32f207 + DP83848 + Lwip初始化问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011599639/article/details/73263926

1 遇到的问题

  • ETH_Init(&ETH_InitStructure,DP83848_PHY_ADDRESS);初始化不成功问题
  • 在while (ETH_GetSoftwareResetStatus() == SET);卡死
  • 动态IP获取不成功问题

2 阐述可能原因

出现上述问题主要是PHY芯片DP83848初始化不成功引起的,主要从以下几个方面入手检查:

  • 检查是否引脚有虚焊
  • 检查DP83848_PHY_ADDRESS地址是否正确,查看手册,一般是0x01,这个需要根据具体电路
  • 最后查看系统时钟,DP83848芯片要求需要外部输入50MHZ的时钟。(我也是在这坑的,我主要讲一下这个解决方案)

3 解决方案(针对问题三)

主要是先了解单片机系统的时钟树,针对stm32f207,他的系统时钟最高可达120M,为了输出PHY芯片DP83848芯片所需的时钟,我们必须将单片机设置为100M时钟输出,具体怎么设置,可以将如下代码复制到系统的system_stm32f2xx.c中,主要是替换以前系统时钟设置时的宏定义。

`#ifndef RMII_MODE
  /* System clock frequency configured for 120 MHz ****************************/
  /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
  #define PLL_M      25
  #define PLL_N      240

  /* SYSCLK = PLL_VCO / PLL_P */
  #define PLL_P      2

  /* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
  #define PLL_Q      5
#else
  /* System clock frequency configured for 100 MHz ****************************/
  /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
  #define PLL_M      4
  #define PLL_N      64

  /* SYSCLK = PLL_VCO / PLL_P */
  #define PLL_P      4

  /* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
  #define PLL_Q      5

  /* IMPORTANT NOTE
     ==============
       This configuration is valid only when MCO pin is used as RMII clock source.
       To output a 50 MHz clock signal on the MCO pin, the following conditions
       must be respected:
         – 25 MHz external crystal connected to OSCIN/OSCOUT pins
         – RCC_PLLCFGR PLL factors configured as follows:
           PLLMx = 4, PLLNx = 64, PLLP = 4.
           This leads to a system clock of 100 MHz.
         – Then set the MCO prescaler to 2 in the RCC_CFGR register to configure
           the system clock to 50 MHz.
     */
#endif /* RMII_MODE */`

为了是系统启动时就是时钟生效设置为100MHZ,必须提前定义RMII_MODE,我采用如下的方法,也可以在SetSysClock()函数之前定义,但是在main.c中定义不会生效。
这里写图片描述
由于系统时钟较快,假如出现不能获取或者偶尔不能获取系统时钟时,可以在DP83848引脚和时钟初始化后加一个19ms的系统延时即可。

猜你喜欢

转载自blog.csdn.net/u011599639/article/details/73263926