[STM32F1] STM32F103CB 无法进入 Bootloader

[复制链接]
38|3
田舍郎 发表于 2026-11-9 08:25 | 显示全部楼层 |阅读模式
我在使用 ST-Link 和 Segger 编程器都能稳定烧写。我还有一个用 UART 烧写 MCU 的自制程序。这个程序与其他 ST 芯片配合使用了很多年,在上述这颗芯片上也部分可用,具体情况如下:

1. MCU 已经烧写过,固件执行软件复位命令,外部 PC 在此之前拉高 BOOT0。@115200 每次都能完美工作。
2. MCU 已经烧写过,外部 PC 拉高 BOOT0 并提示用户按下 PCB 上的 RESET 按键。@115200 每次都能完美工作。
3. MCU 已被擦除,外部 PC 拉高 BOOT0 并提示用户按下 PCB 上的 RESET 按键。我试了约 100 次、使用不同波特率,Bootloader 只有一次响应……

我花了很长时间排查,最终发现这颗芯片对 NRST 的上升时间非常敏感。我原本的 PCB 设计是 0.1uF 电容加 10K 上拉。按文档中给出的示例去掉了 10K 上拉,仍然无法工作。最后我用 1uF 电容加 10K 上拉,才让 Bootloader 启动起来。依我看,是 NRST 上升得太快。

问题最终解决了,请教NRST 上升时间这个规格,在哪儿有文档记载?

spicy 发表于 2026-11-9 11:50 | 显示全部楼层
STM32F103 的数据手册里根本没有“NRST 上升时间”这一项规格。你翻遍电气特性表也找不到,因为 ST 从来没把这个参数作为指标写进去。
elephant00 发表于 2026-11-9 11:52 | 显示全部楼层
数据手册推荐的 NRST 保护电路只有一颗 0.1µF 电容到地,内部已经有约 40kΩ 的永久上拉。你额外加的 10kΩ 外部上拉会与内部上拉并联,减小等效电阻,缩短 RC 时间常数,反而让上升沿更快。
OliviaSH 发表于 2026-11-9 12:11 | 显示全部楼层
NRST上升时间在STM32F103CB的参考手册中记载,建议查手册或询问ST客服。
classroom 发表于 2026-11-9 12:35 | 显示全部楼层
数据手册里与 NRST 动态特性相关的只有两个参数:输入滤波脉宽 VF(NRST) 典型 100ns,以及不被滤除的脉宽 VNF(NRST) 最小 300ns。这两个参数描述的是内部滤波器行为,不是外部上升时间要求。
cr315 发表于 2026-11-9 14:51 | 显示全部楼层
你观察到的“上升太快导致 Bootloader 不响应”现象,本质上不是芯片规格问题,而是复位释放时刻与 BOOT0 锁存窗口的时序配合问题。BOOT 引脚的值在复位后第四个 SYSCLK 上升沿被锁存,NRST 上升沿的斜率会影响内部复位释放的时机。
duo点 发表于 2026-11-9 15:27 | 显示全部楼层
把电容从 0.1µF 换成 1µF 起作用,说明原来的 RC 时间常数不足以让 NRST 在 BOOT0 稳定之后才释放。增大电容延长了复位保持时间,给 BOOT0 电平建立留出了更多余量。
flycamelaaa 发表于 2026-11-9 17:09 | 显示全部楼层
你提到“去掉 10K 上拉仍然无法工作,最后用 1µF 加 10K 才好”,这说明单靠 1µF 配内部 40kΩ 的时间常数可能仍然不够,或者你板上的内部上拉实际偏弱。ST 社区有人报告过 F103 的 NRST 内部上拉实测缺失的情况。
jcky001 发表于 2026-11-9 17:48 | 显示全部楼层
用 1µF 加 10kΩ 的组合,时间常数是 10ms,比 0.1µF 加 10kΩ 的 1ms 长了十倍。Bootloader 不响应的问题消失了,说明你遇到的是一个复位释放过快、BOOT0 尚未被稳定采样的问题,而不是芯片坏了。
onlycook 发表于 2026-11-9 19:27 | 显示全部楼层
数据手册里确实找不到这个规格,因为 ST 的立场是:只要 NRST 能被拉到 VIL(NRST) 以下(最大 0.8V),复位就会被芯片识别。上升沿的斜率不在保证范围内,由用户自己根据 BOOT 模式切换需求来设计。
powerantone 发表于 2026-11-9 20:00 | 显示全部楼层
如果你的自制编程器可以通过软件控制 NRST 而不是让用户按按键,可以考虑在拉低 NRST 之后、释放之前,先确保 BOOT0 已经稳定为高电平至少几个微秒,再释放 NRST。这样就不需要靠大电容来“碰运气”匹配时序。
probedog 发表于 2026-11-9 20:45 | 显示全部楼层
换用 1µF 电容是有效的,但要注意副作用:每次复位保持时间变长,如果编程器依赖 NRST 快速翻转来触发多次复位尝试,响应会变慢。另外大电容在断电时放电慢,反复上电测试时要注意留足放电时间。
solty 发表于 2026-11-9 20:54 | 显示全部楼层
ST 官方文档 AN2606 只规定了 BOOT0 需要在复位期间保持高电平、BOOT1 保持低电平,没有对 NRST 的斜率提出任何数值要求。你的问题属于“BOOT0 建立时间与 NRST 释放时间不匹配”,而不是违反了某条明文规格。
stormwind123 发表于 2026-11-9 21:39 | 显示全部楼层
如果要在文档里找依据,只能看数据手册的 NRST 引脚特性表和推荐保护电路图。那张图只画了 0.1µF 电容,没有外部上拉,也没有上升时间标注。你的 1µF 方案是超出文档推荐范围的工程调整,能工作说明它补偿了你板上的特定时序偏差,但不代表这是通用做法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

162

主题

2752

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部