原因1
学习STM32的时候遇到的小问题:
用CubeMX生成初始代码,程序内容只包括呼吸灯工作和一个中断调用printf重定向函数向串口发送内容;
在STM32F103C8T6最小系统板烧录程序后上电不工作,但调试模式下可正常工作
;
解决的办法是:勾选Use MicroLIB
参考链接:https://www.youkuaiyun.com/tags/MtjaYg1sNTgxNzMtYmxvZwO0O0OO0O0O.html
MicroLIB
如果你发现在Keil RealView MDK 中使用printf 函数,不能向串口输出信息,或者今后发现可以软件仿真,不能硬件仿真,MicroLib 提供了一个有限的stdio子系统,它仅支持未缓冲的stdin、stdout 和stderr。这样,即可使用printf()来显示应用程序中的诊断消息。
要使用高级I/O 函数,就必须提供自己实现的以下基本函数,以便与自己的I/O 设备(如串口)配合使用。为所有输出函数:fprintf()、printf()、fwrite()、fputs()、puts()、putc()和putchar()等需要实现fputc()函数。为所有输入函数:fscanf()、scanf()fread()、read()、fgets()、gets()、getc() 和 getchar()等需要实现fgetc()函数。由于MicroLib 进行了高度优化,以使代码变得很小。因此,MicroLib 不完全符合ISO C99 库标准,仅提供有限的支持,不具备某些ISO C 特性。
参考链接:https://www.cnblogs.com/sumsung007/articles/6566767.html
原因2
由于BOOT0悬空而导致的。BOOT0悬空时,其状态是不确定的,会导致程序无法从UserFlash中正常启动,就可能出现时好时不好的现象了
原因3
电源供电不稳定问题。
解决:
通过万用表测量各个模块电压,发现电压均正常值
原因4
复位信号不稳定
解决:
通过示波器观察、隔离复位信号、加滤波电容、换复位芯片等方法进行定位。
附录-- STM32执行代码初始化卡住现象
现象
STM32执行代码初始化卡住,或者上电卡住,或者复位卡住,导致代码不执行。
解决:
1、检查自己的代码是否有中断,有中断的话,其初始化放在其他硬件初始化之后
即:中断的初始化放在进入while()循环之前,放在其他硬件初始化之后
卡住原因:中断初始化之后,产生了中断,而其他一些硬件初始化都还没有完成