1. 程式人生 > >STM32F407 乙太網 外部提供時鐘源的驅動修改錯誤總結

STM32F407 乙太網 外部提供時鐘源的驅動修改錯誤總結

(1) 暈,不能放置圖片

示例程式碼中:

void ETH_GPIO_Config(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;


    /* Enable GPIOs clocks */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB |
                         RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE |
                         RCC_AHB1Periph_GPIOG , ENABLE);


    /* Enable SYSCFG clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
    GPIO_Init(GPIOA, &GPIO_InitStructure); 




  /* MII/RMII Media interface selection --------------------------------------*/
#ifdef MII_MODE
 #ifdef PHY_CLOCK_MCO
  /* Configure MCO (PA8) */

  當不用MCU提供時鐘時,直接刪除該紅色部分程式碼導致網路不通

  應該保留以下程式碼

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;


    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

    後面的程式碼需要用到前面的相關配置. 沒注意到後面,直接刪掉了,導致出錯.

(2).乙太網配置網速貌似不太好使,強制為100M的方法:

void ETH_BSP_Config(void)
{
  /* Configure the GPIO ports for ethernet pins */
  ETH_GPIO_Config();


  /* Config NVIC for Ethernet */
  ETH_NVIC_Config();


  /* Configure the Ethernet MAC/DMA */
  ETH_MACDMA_Config();


  if (EthInitStatus != 0)
  {
    printf("%s init failed! Err Num:%d.\n",__FUNCTION__,EthInitStatus);
    //delay_ms(100);
  }


  /* Configure the PHY to generate an interrupt on change of link status */
  //Eth_Link_PHYITConfig(DP83848_PHY_ADDRESS); //這裡


   //ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;//這裡
   ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
   ETH_InitStructure.ETH_Speed = ETH_Speed_100M;
   ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;



    OK.搞定