问答

汇集网友智慧,解决技术难题

21ic问答首页 - 有没有APM32F107RC以太网问题

APM32F107 以太网 rc pi IO ig

有没有APM32F107RC以太网问题

xiaoqilo2025-04-13
开发板用的的是PD8、PD9、PD10复用引脚,我板子上用的是PA7、PC4、PC5不管怎么调就是不好使,确认PHY正常运行通过MDIO可以读取到PHY状态,以下是初始化代码:void Ethernet_GPIOConfig(void)
{
    GPIO_Config_T configStruct;
    /*
    *   ETH_RESET#                          PB15
    *   ETH_INT                             PB14
    *   ETH_MDIO                            PA2
    *   ETH_MDC                             PC1
    *   ETH_MCO                             PA8
    */

    /* Enable GPIOs clocks */
    RCM_EnableAPB2PeriphClock(ETH_MDC_GPIO_CLK    | ETH_MDIO_GPIO_CLK  |
                              ETH_RESET_GPIO_CLK  | ETH_INT_GPIO_CLK   |
                              ETH_MCO_GPIO_CLK);

    /* Enable SYSCFG clock */
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_AFIO);

    /* Configure ETH_RESET# */
    GPIO_ConfigStructInit(&configStruct);
    configStruct.pin = ETH_INT_PIN;
    configStruct.speed = GPIO_SPEED_50MHz;
    configStruct.mode = GPIO_MODE_OUT_PP;
    GPIO_Config(ETH_RESET_PORT, &configStruct);

    /* Configure ETH_MII_INT */
    configStruct.pin = ETH_INT_PIN;
    GPIO_Config(ETH_INT_PORT, &configStruct);
    ETH_INT_PIN_HIGH();

    /* Configure ETH_MDC */
    configStruct.pin = ETH_MDC_PIN;
    configStruct.mode = GPIO_MODE_AF_PP;
    GPIO_Config(ETH_MDC_PORT, &configStruct);

    /* Configure ETH_MDIO */
    configStruct.pin = ETH_MDIO_PIN;
    GPIO_Config(ETH_MDIO_PORT, &configStruct);

    /* RESET ETH PHY */
    ETH_RESET_PIN_LOW();
    Ethernet_ResetDelay(DP83848_RESET_DELAY);
    ETH_RESET_PIN_HIGH();
    Ethernet_ResetDelay(DP83848_RESET_DELAY);

    /* Configure PB10 ,PB11 ,PB12 ,PB13 as alternate function push-pull */
    configStruct.pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
    GPIO_Config(GPIOB, &configStruct);

    /*
    *  ETH_RMII_REF_CLK    PA1
    *  ETH_RMII_CRS_DV     PD8->PA7
    *  ETH_RMII_RXD0       PD9->PC4
    *  ETH_RMII_RXD1       PD10->PC5
    *  ETH_RMII_TX_EN      PB11
    *  ETH_RMII_TXD0       PB12
    *  ETH_RMII_TXD1       PB13
    */

    /* Enable GPIOs clocks */
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA    | RCM_APB2_PERIPH_GPIOB  |
                              RCM_APB2_PERIPH_GPIOC  | RCM_APB2_PERIPH_GPIOD);

    /* ETHERNET pins remapp in APM32107-MINI board: RX_DV and RxD[3:0] */
    //GPIO_ConfigPinRemap(GPIO_REMAP_ETH_MAC);

    /* Configure PA1 and PA3 as input */
    GPIO_ConfigStructInit(&configStruct);
    configStruct.pin = GPIO_PIN_1;
    configStruct.mode = GPIO_MODE_IN_FLOATING;
    GPIO_Config(GPIOA, &configStruct);

    /* Configure PA7, PC4, PC5 as input */
    GPIO_ConfigStructInit(&configStruct);
    configStruct.pin = GPIO_PIN_7;
    configStruct.mode = GPIO_MODE_IN_FLOATING;
    GPIO_Config(GPIOA, &configStruct);

    GPIO_ConfigStructInit(&configStruct);
    configStruct.pin = GPIO_PIN_4;
    configStruct.mode = GPIO_MODE_IN_FLOATING;
    GPIO_Config(GPIOC, &configStruct);

    GPIO_ConfigStructInit(&configStruct);
    configStruct.pin = GPIO_PIN_5;
    configStruct.mode = GPIO_MODE_IN_FLOATING;
    GPIO_Config(GPIOC, &configStruct);

    /* ETH and CAN shared PB8, RMII Mode PB8 Must be output low */
    GPIO_ConfigStructInit(&configStruct);
    configStruct.pin = GPIO_PIN_8;
    configStruct.mode = GPIO_MODE_OUT_PP;
    configStruct.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOB, &configStruct);
    GPIO_ResetBit(GPIOB, GPIO_PIN_8);


    GPIO_ConfigPinRemap(GPIO_REMAP_MACEISEL_RMII);
}



回答 +关注 0
220人浏览 1人回答问题 分享 举报
1 个回答
  • 初始化代码没看出什么异常

    建议先用示波器抓取PD8/PD9/PD10时三个脚的信号,再换PA7/PC4/PC5时抓取一下信号,对比开始时哪个引脚信号有异常,再针对性排查噢

您需要登录后才可以回复 登录 | 注册