[STM32F4] 如何在CubeIDE中使LwIP与CMSIS_V2一起工作

[复制链接]
 楼主| lvluoo 发表于 2025-7-18 10:12 | 显示全部楼层 |阅读模式
本帖最后由 lvluoo 于 2025-7-28 21:49 编辑


有一个Nucleo-F439ZI开发板,正在搞一个简单的应用程序,用于通过UDP端口回显消息。
当我使用LwIP原始API生成项目时,通过回调函数和板子能够实现这个功能。
然而,一旦我在CubeMX配置界面中启用CMSIS_V2 RTOS并创建几个线程(例如定期闪烁两个不同的LED),程序就会在"默认线程"中调用MX_LWIP_Init()后立即冻结。我甚至没有机会初始化Netconn结构来监听传入的数据包或其他操作。
如果我将这个初始化调用注释掉,所有线程都能按预期运行。但只要调用了这个LwIP初始化函数,整个程序就会冻结。
我在想是否遗漏了某些步骤,或者在RTOS中使用LwIP方式不对。由于这是自动生成的代码却无法工作,我完全摸不着头脑。
另外,在调试模式下,我没有收到任何HardFault或异常错误,代码看起来在正常运行,但所有线程都完全冻结了。
当在默认线程中调用MX_LWIP_Init()时,所有任务都会被冻结。
公羊子丹 发表于 2025-7-24 07:18 | 显示全部楼层
LwIP 配 RTOS 时要用 Netconn 或 Socket API,别用原始 API,原始 API 不支持多线程。
周半梅 发表于 2025-7-24 07:19 | 显示全部楼层
默认线程里调用 MX_LWIP_Init() 后应该只初始化网络栈,后续操作要放到单独线程里跑。
帛灿灿 发表于 2025-7-24 07:20 | 显示全部楼层
你检查一下 LWIP_DHCP 或 LWIP_DNS 有没有开,有些需要额外任务支持。
童雨竹 发表于 2025-7-24 07:22 | 显示全部楼层
LwIP 初始化后得保证 sys_now 和 sys_jiffies 之类的时间戳函数跟 RTOS 对接上了。
万图 发表于 2025-7-24 07:25 | 显示全部楼层
有可能是网卡驱动(ETH)没跟 RTOS 配好,收发中断或者任务没启动。
Wordsworth 发表于 2025-7-24 07:29 | 显示全部楼层
Cube 默认生成的 lwipopts.h 里,NO_SYS 要设成 0,RTOS 模式不能用裸机配置。
Bblythe 发表于 2025-7-24 07:31 | 显示全部楼层
建议用 Netconn 重新写下 UDP 收发,别混用原始 API 和 RTOS,坑多。
Pulitzer 发表于 2025-7-24 07:32 | 显示全部楼层
你的网卡中断和 RTOS 优先级也要检查一下,有可能被别的任务锁死了。
Uriah 发表于 2025-7-24 07:33 | 显示全部楼层
调试的时候把 LWIP_DEBUG 打开,看下是不是卡在 ethernetif_input() 里了。
Clyde011 发表于 2025-7-24 07:34 | 显示全部楼层
如果不想麻烦,先跑官方的 LwIP_RTOS 例程,能跑起来再按需改最稳。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部