STM32在Keil调试时能成功运行但下载就运行不了的问题

记得之前在STM32上做串口终端的时候图方便,想用C库里的 printf() ,于是重载了 putc() ,也在 keil 的项目配置中勾选了 Use MicroLIB 选项。但是程序下载到STM32上之后,串口却一点反应也没有,我先是检查了时钟、GPIO配置和串口使能,发现都没问题。而且调试的时候程序正常运行,串口也正常输出。后来发现程序在调试的时候总是会在停在 BKPT 0xAB 指令处,但它又不属于用户代码,因此意识到是标准库的问题(准确来说是我自己的问题)。最后发现要使用 printf() 重载的是 fputc() 而不是 putc() 。

近来我又遇到类似问题,同样是下载后没反应,同样是调试的时候可以顺利运行,但是这回我在程序中没有使用 printf() 函数,因此起初调试的时候没有想到是标准库的问题。而后我在数次调试中看到了熟悉的身影,依旧是指令 BKPT 0xAB 。

可这次我没有使用 printf() ,怎么还会有软件断点呢?而且这次的 BKPT 是在程序刚刚开始运行的时候就出现的,比 startup 运行得还要早,这就更不可能是 printf() 的问题了。不过幸运的是,我们可以在调试洁界面的调用栈中看到当前所处的函数:_sys_command_string()

 根据 keil 网

STM32Keil调试成功运行,但下载到实际硬件上后无法正常运行问题,可能由以下原因引起: 1. 芯片选型不匹配:请确保你的Keil项目配置中所选的芯片型号与实际使用的芯片型号一致。如果选错了芯片型号,程序可能无法正确地适配硬件。 2. 引脚配置错误:检查你的程序中对GPIO引脚的配置,确保引脚的功能和模式正确设置。如果引脚配置错误,可能导致外设无法正常工作或者与其他外设冲突。 3. 钟配置问题STM32芯片的钟配置非常重要。确保你正确配置了钟源、钟分频等参数,以使芯片能够正常工作。 4. 外设初始化问题:在Keil调试,某些外设可能被自动初始化或者默认配置,但在实际硬件上,这些外设可能需要手动初始化。确保你在代码中正确初始化了所需的外设,以使其能够正常工作。 5. 电源和电气连接问题:检查芯片与外部电源、电气连接是否正确。确保电源稳定且电压符合芯片的工作要求。 为了解决这个问题,你可以尝试以下方法: 1. 检查并确认芯片型号、引脚配置、钟配置和外设初始化是否正确。 2. 确保下载的程序与硬件完全匹配,包括硬件版本和芯片型号。 3. 检查并确保电源和电气连接正确,电源稳定。 4. 尝试重新下载程序到芯片上,确保下载过程没有错误提示。 5. 使用调试工具(如JTAG、SWD等)连接到实际硬件上,进行调试和查看芯片状态,以进一步定位问题所在。 如果问题仍然存在,你可能需要更详细的调试信息或者提供代码片段以便进一步帮助你解决问题
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值