keil-stm32调试能够运行,但是单独无法运行

当STM32程序在调试模式下可以运行,但取消调试后无法启动,可能是因为未勾选UseMicroLIB选项导致标准C库启用,使程序陷入半主机模式等待调试。解决方案是在项目配置中勾选UseMicroLIB并重新编译,以避免因标准库导致的卡死问题。此外,未正确处理堆栈初始化也可能造成错误,重新编译能解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stm32调试能够运行,但是不调试时无法运行,按复位按钮也不行。

勾选使用MicroLIB。

问题到这里就解决了,我虽然没有使用 printf() ,但是包含了C库 stdio.h 并且没有勾选 Use MicroLIB ,导致标准C库被调用,程序卡死在半主机模式(也就是 BKPT 软件断点等待主机调试端响应)下。解决方法也很简单,在项目配置中勾选 Use MicroLIB 然后重新编译(Rebuild)即可。
————————————————
 

被抛弃的部分是堆栈的初始化处理程序,可以看出定义了  __MICROLIB 宏和没有定义时堆栈的初始化是交由不同的函数处理的。但是编译的时候没改变这里的条件汇编,结果没有初始化的程序了,因此报错“符号未定义”。解决方式同样很简单,点击重新编译即可。(想当初为了解决把startup.s 给改了,真是醉了)
 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值