MCU上电偶发不启动,别漏查BOOT脚
板子有时候最气人的问题,不是“彻底坏”,而是十块里面八块正常,两块上电不跑。
不跑的那块按一下Reset,又正常了。断电重来,可能又卡住。
电源3.3V看着没问题,晶振也在,NRST波形也不算离谱。
这种问题如果MCU带BOOT、MODE、STRAP一类启动配置脚,我会很快去看一眼:这些脚在上电采样那一刻,到底有没有一个确定电平?
很多MCU会在Power-on Reset或Reset释放阶段读取某些启动配置脚。
不同电平决定从哪里启动:Main Flash、ROM Bootloader、System Memory,甚至外部Boot介质。
一旦采样完成,某些芯片会把这个Pin重新作为普通GPIO使用,所以程序跑起来以后再去量,它可能完全正常。
关键在Reset附近那几微秒、几毫秒。那一瞬间采错一次,CPU起点就已经不一样了。
图1:BOOT配置可以通过开关或跳线改变状态,但默认电平仍需要明确设计。
没有Pull-up/Pull-down的输入脚是高阻节点。
PCB表面泄漏、相邻走线耦合、手摸、探头、上电边沿,甚至不同批次芯片的输入泄漏,都可能让它落在不同电平。
公开的STM32实板案例中,就出现过Power-on后挂起、按NRST却能正常启动,最后定位到BOOT没有正确下拉;加入外部下拉后,Power Cycle恢复稳定。
这种问题之所以难查,是因为板子一旦启动成功,后面所有功能都可能完全正常。
图2:不同STM32器件的BOOT0连接方式会随系列和内部配置不同,不能脱离具体料号照抄。
这一点很重要。
不同STM32系列的BOOT结构并不完全一样。有的BOOT0是独立Pin,有的和GPIO复用;有的内部有Pull-down,有的没有;有的还可以通过Option Bytes选择是否采样外部BOOT Pin。
ST自己的不同参考设计里,也能看到外接Pull-down、内部Pull-down或通过Option配置的不同方案。
具体怎么接,直接看当前料号的Datasheet、Reference Manual和Hardware Design Guide。不同系列不能照抄。
经验可以帮你知道“这里值得检查”,不能代替芯片手册。
Power-on失败、按Reset却能起来,这个现象本身就值得重点查启动时序。
第一次Power-on时,板上很多电源轨、外设、RC节点都在一起爬升,BOOT脚附近可能正处于最不稳定的阶段。
过几百毫秒以后再手动Reset,3.3V已经稳定,外围节点也稳定,BOOT脚受到的干扰条件完全不同,于是第二次采样碰巧正确。
所以“Power-on不启动,按Reset就好”通常值得同时检查:Power Ramp、POR/BOR、NRST、BOOT/STRAP、Clock Startup。
不能因为Reset有效,就马上断定是软件初始化太快。
图3:实际参考电路中常通过电阻为启动相关引脚提供确定的默认状态。
不需要动态选择的启动配置脚,给它一个明确的默认状态。
如果需要进Bootloader,常见做法是默认Pull-down/Pull-up,再通过按键、跳帽、测试点或下载工具临时覆盖。
电阻值要参考器件输入规格和官方参考设计,10kΩ很常见,但不是所有器件的统一答案。
另外,把BOOT、RESET、SWD/JTAG这些启动调试信号在原理图Review时单独过一遍,不要把它们当“几根不重要的小线”。
批量产品最怕这种脚处在“通常是0”的状态。硬件设计需要的是上电每一次都确定,而不是实验室里十次有九次正确。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207

扫码关注









































