#stm32硬件复位无法运行
原因: 包含了C库 stdio.h 并且没有勾选 Use MicroLIB ,导致标准C库被调用,程序卡死在半主机模式
解决办法:勾选使用MicroLIB。
问题到这里就解决了,我虽然没有使用 printf() ,但是包含了C库 stdio.h 并且没有勾选 Use MicroLIB ,导致标准C库被调用,程序卡死在半主机模式(也就是 BKPT 软件断点等待主机调试端响应)下。解决方法也很简单,在项目配置中勾选 Use MicroLIB 然后重新编译(Rebuild)即可。
————————————————
被抛弃的部分是堆栈的初始化处理程序,可以看出定义了 __MICROLIB 宏和没有定义时堆栈的初始化是交由不同的函数处理的。但是编译的时候没改变这里的条件汇编,结果没有初始化的程序了,因此报错“符号未定义”。解决方式同样很简单,点击重新编译即可。
2024.4.5 补充:
现象二:
使用keil开发STM32,下载完程序后,不能运行。 在main()的入口处加打印,啥也没打出来,说明程序都没跑到main()。 在线调试debug时发现了个有意思的现象,每次都是点击三次全速运行才能跑起来,而且运行起来后可以进入main()。
原因 一番折腾之后发现原有的工程中有一处用到了printf()函数,而串口打印我使用的是HAL库的函数,并没有使用printf()的方式。
解决办法:勾选使用MicroLIB。
参考链接: https://blog.csdn.net/u012308586/article/details/124300019