学习STM32 的时候遇到的小问题:
现象1
程序内容调用printf重定向函数向串口发送内容;在STM32F103C8T6最小系统板烧录程序后上电不工作,但调试模式下可正常工作;

解决的办法是:勾选Use MicroLIB
未选MicroLIB时,printf底层依赖半主机模式,会执行BKPT指令等待调试器响应。脱机时无调试器,CPU挂起导致程序卡死。勾选后MicroLIB移除该依赖,printf直接调用你重写的硬件发送函数,不再等待主机,即可独立运行。
现象2
用CubeMX生成初始代码,程序内容只包括呼吸灯工作
在STM32F103C8T6最小系统板烧录程序后上电不工作,但是按下复位按键后可重新开始工作;
解决思路
由于BOOT0悬空而导致的。BOOT0悬空时,其状态是不确定的,会导致程序无法从UserFlash中正常启动,就可能出现时好时不好的现象了
如果在上电瞬间,浮空的 BOOT1 恰好被干扰到了一个不期望的高电平,芯片就可能误入"系统存储器"或"SRAM"启动模式,从而无法执行用户程序,表现为"死机"
原因3
电源供电不稳定问题。
解决:
通过万用表测量各个模块电压,发现电压均正常值
原因4
复位信号不稳定
解决:
通过示波器 观察、隔离复位信号、加滤波电容、换复位芯片等方法进行定位。
附录-- STM32执行代码初始化卡住现象
现象
STM32执行代码初始化卡住,或者上电卡住,或者复位卡住,导致代码不执行。
解决:
1、检查自己的代码是否有中断,有中断的话,其初始化放在其他硬件初始化之后
即:中断的初始化放在进入while()循环之前,放在其他硬件初始化之后
卡住原因:中断初始化之后,产生了中断,而其他一些硬件初始化都还没有完成