[STM32L4] Nucleo项目在系统内存中挂起

[复制链接]
523|19
 楼主| 梧桐uuu 发表于 2025-7-19 09:51 | 显示全部楼层 |阅读模式
使用STM32CubeIDE在NUCLEO-l4r5zi开发板上使用ST-LINK进行调试。
创建一个新项目,选择NUCLEO-l4r5zi开发板。
使用默认设置创建项目——能够正常调试并单步执行main()函数。
在main函数的最后while(1)循环前添加printf("Entering while loop\n")。
在USB初始化过程中,程序会在USB_SetCurrentMode()里的HAL_Delay(50u)调用时陷入系统存储器区域循环。系统被锁死。
注释掉HAL_Delay调用后,printf输出"Entering ",随后仍会陷入系统存储器区域。
尝试将Min_Stack和Min_Heap增加到128K,但问题依旧。
使用int __io_putchar(int ch)重定向STDOUT不会导致此问题,仅添加printf时会出现。
请教这种问题如何解决?

公羊子丹 发表于 2025-7-24 07:18 | 显示全部楼层
你这个看起来像是 printf 的 syscalls 没配置好,卡到 _write 里了吧?
周半梅 发表于 2025-7-24 07:19 | 显示全部楼层
有没有开 USE_SEMIHOSTING?Nucleo 用 ST-LINK 半主机模式会进 HardFault。
帛灿灿 发表于 2025-7-24 07:20 | 显示全部楼层
把 printf 换成 puts 或者 HAL_UART_Transmit 看能不能绕过去试试。
童雨竹 发表于 2025-7-24 07:22 | 显示全部楼层
USB 初始化时最好别混用 printf,有可能冲突 IO,特别是占用中断的地方。
万图 发表于 2025-7-24 07:25 | 显示全部楼层
如果要用 printf,重定向到 UART 是最稳的,半主机模式在实际板子容易挂死。
Wordsworth 发表于 2025-7-24 07:29 | 显示全部楼层
HAL_Delay 里面要用 SysTick,中断被屏蔽或者优先级不对也会卡住。
Bblythe 发表于 2025-7-24 07:31 | 显示全部楼层
你在调试的时候停在 while,printf 没输出,看看是不是卡在 _sbrk 了?
Pulitzer 发表于 2025-7-24 07:32 | 显示全部楼层
有没有试过用 retarget.c 或者 ITM 重定向?比半主机要稳一点。
Uriah 发表于 2025-7-24 07:33 | 显示全部楼层
Min_Heap 和 Min_Stack 改这么大其实没太大用,重点看 newlib 怎么配置的。
Clyde011 发表于 2025-7-24 07:34 | 显示全部楼层
如果只是想打印调试信息,试试 SWO trace,Nucleo-l4r5zi 是支持的。
duo点 发表于 2025-7-24 15:50 | 显示全部楼层
可能是HAL_Delay()依赖的SysTick中断与USB中断冲突,或USB中断优先级未正确设置。
elephant00 发表于 2025-7-24 16:03 | 显示全部楼层
升级HAL库,重新生成代码。
flycamelaaa 发表于 2025-7-24 16:51 | 显示全部楼层
USB库的中断服务程序可能被错误配置了。
powerantone 发表于 2025-7-24 17:51 | 显示全部楼层
堆栈溢出?
classroom 发表于 2025-7-24 19:57 | 显示全部楼层
检查USB中断配置,禁用无关中断。
jcky001 发表于 2025-7-24 21:58 | 显示全部楼层
最小化printf依赖,简化重定向实现。
cr315 发表于 2025-7-24 21:59 | 显示全部楼层
替换printf为直接UART发送试试。
stormwind123 发表于 2025-7-24 22:52 | 显示全部楼层
printf依赖_write()系统调用,若重定向实现不当,可能导致硬件异常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

58

帖子

0

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