STM32无法启动现象
STM32无法启动现象

STM32无法启动现象

现象:使用 mcuisp.exe 烧录后,程序可以正常启动;但按下复位键后,程序卡死,重新上电也不行。

处理:经检查硬件电路没问题。使用 STLink 进行调试,发现卡死在 RCC 初始化。

分析:用户在 RCC 初始化过程中使用了 printf 打印函数,但 UART 初始化位置位于 RCC 后边;也就是未初始化 UART 就调用 printf,导致程序卡死在等待串口发送完成。

为什么用 mcuisp.exe 烧录后第一次可以正常启动?

mcuisp.exe 通过串口更新 Flash 内的程序,因此,烧录程序过程中, UART 处于开启状态。后续跳转到用户代码时,应该是使用了命令直接跳转至复位异常所在地址,而不是通过 RST 信号复位芯片。此时 UART 仍处于开启状态,printf 函数未被卡住。

按下复位键再次启动,UART 被复位,处于关闭状态,直接调用 printf 函数会被卡死在等待 UART 发送完成。

这个现象看似是硬件问题,实际是软件问题,很坑。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注