跳到主要内容

调试与常见问题

补充内容,配合主课阅读。

程序没反应,先别急着重写。按“供电、下载、运行、外设”查一遍,通常比到处改参数快。

先找到程序停在哪里​

在main入口、外设初始化后、主循环各放一个断点。进不了main,先查启动和下载;能进main却走不到循环,就看卡在哪个初始化或等待里。

现象先检查
找不到芯片3.3 V、共地、SWDIO和SWCLK
下载后没反应BOOT0、复位、main断点
重新生成后失效USER CODE区域、驱动是否加入工程
进中断后出不来挂起标志、阻塞调用、是否反复触发

CubeMX负责配置,固件包提供HAL等代码,Keil负责编译和调试。生成成功、编译成功、下载成功,是三个不同的结果。

沿着一个函数往下看​

从main找到外设初始化,再跟进一次HAL调用。比如写GPIO,最后会落到GPIO寄存器。读源码时先追一条通路,不必一口气看完整个库。

寄存器地址是芯片规定的,数组地址是链接和运行时安排的。看不清某个变量在哪,就查map文件和调试器里的地址。

先测简单信号​

LED先固定写高、写低,用万用表测引脚。ADC先接已知直流电压。串口先发固定文本。复杂功能拆到这一步,就容易知道是硬件还是程序的问题。

有示波器时,量PWM周期、串口位宽和IIC应答。注意共地,也别让探头把相邻引脚短在一起。

每次只改一个地方​

保留一份能运行的工程,记录改动和现象。改完后再测同一个输入,别同时换接线、时钟和代码。看门狗引起的重启也要先查复位原因,不能只靠不停喂狗掩盖问题。