1. 问题现象与初步排查
最近在使用STM32U575VGT6开发板时遇到了一个奇怪的复位问题:通过ST-Link烧录程序后,开发板无法自动复位,手动按下复位按键也无法正常启动程序(正常情况下应该点亮板载LED)。作为嵌入式开发者,这类硬件问题往往比纯软件问题更令人头疼,因为需要同时考虑电路设计和软件配置的交互影响。
首先确认了程序本身没有问题:
- 程序功能非常简单,只是控制一个LED的点亮
- 在Keil的调试模式下全速运行时,LED能够正常点亮
- 程序烧录过程没有报错,且Flash校验通过
这个现象表明,问题很可能出在复位电路上。但需要进一步分析是软件复位还是硬件复位的问题。在嵌入式系统中,复位通常分为两种方式:
- 软件复位:通过调试接口(如SWD)发送复位指令
- 硬件复位:通过拉低NRST引脚电平实现
提示:区分软件复位和硬件复位是排查此类问题的关键第一步。软件复位依赖调试接口协议,硬件复位则依赖电路设计。
2. 复位方式验证实验
为了定位问题,我在Keil中进行了以下测试:
2.1 软件复位测试
在Keil的Debug设置中(魔法棒->Debug->Settings),选择SYSRESETREQ(软件复位)模式:
- 进入调试模式后点击复位按钮
- 观察到程序计数器(PC)正确跳转到复位向量
- LED能够正常点亮
这个测试证明软件复位功能正常,说明通过SWD接口的调试通信没有问题。
2.2 硬件复位测试
将复位模式切换为HW RESET(硬件复位)后:
- 在调试模式下点击复位按钮
- 程序计数器没有变化
- 手动按下开发板复位键也无响应
同时注意到,使用硬件复位模式时:
- ST-Link会尝试拉低其RST引脚
- 开发板的NRST引脚应被拉低
- 但实际没有任何复位动作发生
这个现象表明硬件复位路径存在问题,可能是复位电路设计或ST-Link连接方式的问题。
3. 复位电路原理分析
查看开发板原理图,复位电路采用典型设计:
- 10kΩ上拉电阻(R13)连接到NRST
- 100nF电容(C8)实现电源上电复位延时
- 复位按键(S1)直接拉低NRST
ST-Link连接器部分:
- ST-Link的RST引脚直接连接到开发板NRST
- 没有串联任何保护电阻
理论上:
1
