21ic问答首页 - 有没有APM32F107RC以太网问题
有没有APM32F107RC以太网问题
开发板用的的是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);
}
{
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
建议先用示波器抓取PD8/PD9/PD10时三个脚的信号,再换PA7/PC4/PC5时抓取一下信号,对比开始时哪个引脚信号有异常,再针对性排查噢
评论
2025-04-14
您需要登录后才可以回复 登录 | 注册