ST意法半导体
直播中

李桂兰

7年用户 1447经验值
私信 关注
[问答]

STM32CubeIde1.10.1激活以太网链路重新连接失败要如何解决?

设置
STM32CubeIde 1.10.1
STM32CubeMX 6.6.1.202207061420
关于
激活以太网、LwIP 和 RTOS 功能的 STM32F4/F7/H7 项目(也可能扩展到其他项目)。
特别是在 LwIP>General settings 中设置了WITH_RTOS标志时。
症状
以太网链路重新连接失败,如果在启动时断开连接,则初始连接失败。
使用上述配置创建的 ethernetif.c 文件是使用 ethernet_link_thread 中的HAL_ETH_Start (&heth)非中断函数调用错误生成的:
  • // Part of void ethernet_link_thread(void* argument) in ethernetif.c around line 797
  •     if(linkchanged)
  •     {
  •       /* Get MAC Config MAC */
  •       HAL_ETH_GetMACConfig(&heth, &MACConf);
  •       MACConf.DuplexMode = duplex;
  •       MACConf.Speed = speed;
  •       HAL_ETH_SetMACConfig(&heth, &MACConf);
  •       HAL_ETH_Start(&heth);
  •       netif_set_up(netif);
  •       netif_set_link_up(netif);
  •     }
对于WITH_RTOS配置,调用必须改为HAL_ETH_Start_IT(&heth) 。
漏洞详情
db/templates 中的 ethernetif.c 文件模板(ethernetif_f4.ftl、ethernetif_f7.ftl 和 ethernetif_h7.ftl)缺少WITH_RTOS标志的这一行的 if 评估。
ethernetif_f4.ftl 的解决方案(其他 .ftl 文件中的不同行号)
代替
  •       HAL_ETH_Start(&heth);
在第 891 行中
  • [#if with_rtos == 1]
  •       HAL_ETH_Start_IT(&heth);
  • [#else]
  •       HAL_ETH_Start(&heth);
  • [/#if][#-- endif with_rtos --]
就像在第 848 行中为HAL_ETH_Stop_IT(&heth)调用所做的那样。








回帖(1)

王桂花

2023-2-2 10:43:52
请尝试使用最新版本的 STM32CubeMx.6.7.0。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分