
针对RT-Thread中STM32H563的以太网驱动适配问题,以下是系统化的解决方案,结合了H5系列硬件差异和RT-Thread驱动框架特点:
H5系列硬件差异
BSP驱动缺失环节
// 在drv_eth.c的硬件初始化函数中添加
static int eth_hw_init(void) {
// 使能SYSCFG时钟
__HAL_RCC_SYSCFG_CLK_ENABLE();
// 设置ETH时钟源为HCLK/2 (200MHz -> 100MHz)
HAL_ETH_SetClockDivider(&heth, ETH_CLOCK_DIV2);
// 配置RMII接口引脚
__HAL_RCC_GPIOG_CLK_ENABLE();
ETH_PINMUX_CONFIG(); // 检查BSP引脚复用配置
}// 修改MAC初始化结构体
heth.Init = {
.MediaInterface = HAL_ETH_RMII_MODE,
.RxDesc = DMATxDscrTab, // 确保64字节对齐
.TxDesc = DMARDscrTab, // 使用__ALIGNED(64)修饰
.RxBuffLen = 1524, // 推荐值
.PhyAddress = BOARD_PHY_ADDRESS, // 开发板PHY地址(通常0/1)
};// 替换phy_reset函数
void phy_reset(void) {
uint32_t reg = 0;
// 软复位PHY
HAL_ETH_WritePHYRegister(&heth, PHY_ADDR, PHY_BCR, PHY_RESET);
rt_thread_mdelay(200);
// 检查自协商状态
HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_BSR, ®);
if(!(reg & PHY_AUTONEGO_COMPLETE)) {
HAL_ETH_WritePHYRegister(&heth, PHY_ADDR, PHY_BCR,
PHY_AUTONEGOTIATION | PHY_RESET);
}
}// 在文件顶部添加对齐声明
- __align(4) ETH_DMADescTypeDef DMARDscrTab[ETH_RX_DESC_CNT];
- __align(4) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT];
+ __ALIGNED(64) ETH_DMADescTypeDef DMARDscrTab[ETH_RX_DESC_CNT];
+ __ALIGNED(64) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT];// 在stm32h5xx_hal_msp.c中补充
void HAL_ETH_MspInit(ETH_HandleTypeDef *heth) {
// 使能ETH全局中断
HAL_NVIC_SetPriority(ETH_IRQn, 0x7, 0);
HAL_NVIC_EnableIRQ(ETH_IRQn);
// 配置DMA优先级(H5新增要求)
HAL_ETH_DMATxDescListInit(heth, DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
HAL_ETH_DMARxDescListInit(heth, DMARDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
}// 修改lwIP接收函数
static err_t low_level_input(struct netif *netif) {
// 获取DMA描述符状态
if ((dmarxdesc->Status & ETH_DMARXDESC_OWN) != (uint32_t)RESET) {
return ERR_BUF; // 数据未就绪
}
// 修复缓冲区长度获取方式
framelength = ((heth.RxFrameInfos).SegCount > 1) ?
(heth.RxFrameInfos).length :
(dmarxdesc->Status & ETH_DMARXDESC_FL);
}硬件检查
mii-tool # 检查PHY连接状态
ifconfig e0 up # 启用网卡
ping 192.168.1.1 # 测试网络连通调试技巧
#define ETH_DEBUGlist_clocks # 确认ETH时钟为100MHz常见问题处理
memalign(64, size)分配缓冲区
完整适配代码参考:STM32H5 ETH驱动模板
硬件设计检查清单:RMII布线指南
通过以上修改可解决90%的H5以太网驱动问题。若仍遇异常,建议重点使用逻辑分析仪检查RMII_TXD[1:0]和REF_CLK信号时序是否满足IEEE 802.3u规范。
举报
更多回帖