news 2026/6/16 9:43:50

上电后程序不跑?别只怪晶振,看看 BOOT0 引脚与 Option Bytes

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
上电后程序不跑?别只怪晶振,看看 BOOT0 引脚与 Option Bytes

摘要:芯片上电,电源正常,晶振起振,但程序就是不跑?不是 Flash 坏了,而是BOOT0 引脚电平错误​ 或Option Bytes(选项字节)​ 被意外修改。本文解析 MCU 从“上电”到“取第一条指令”的硬件级筛选机制。


一、问题描述(现象)

**新焊接的 PCB,上电后无任何反应;

用示波器看晶振,有波形;

用调试器连,能连上,但程序跑不起来,或者跑几步就飞。**

很多工程师的排查方向是:

  1. 晶振没起振?

  2. Flash 擦除不干净?

  3. 换一颗芯片试试?


二、原理分析

1. 物理模型

Cortex-M 上电后的硬件自检流程:

Power On -> POR (Power On Reset) -> 检查 BOOT0 引脚电平 -> 选择启动介质 (Flash / System Memory / SRAM) -> 读取 MSP 和 Reset Handler -> 执行代码

2. 核心参数

  • BOOT0 / BOOT1:启动模式选择引脚。

  • Option Bytes (OB):存储在 Flash 中的特殊配置字(写保护、读保护、NRST 模式等)。

  • System Memory:系统存储区(通常存放 Bootloader)。

3. 反直觉真相

“BOOT0 悬空”等于“随机启动”。

  • 如果 BOOT0 引脚没有下拉电阻:

    • 上电瞬间,引脚电平可能是高,也可能是低。

    • 结果是:有时进 Flash,有时进 System Memory,有时直接死机。

  • Option Bytes 写错

    • 开启了RDP(读保护)Level 2,芯片永久锁死。

    • 开启了NRST_MODE,复位引脚变成了 GPIO,导致无法复位。


三、工程级解决方案

方案 1:BOOT0 必须“钉死”(硬件铁律)

永远不要悬空 BOOT0。

需求

BOOT0 接法

正常从 Flash 启动

10kΩ 下拉到 GND

需要 ISP 升级

按键上拉到 VDD(平时下拉)

从 SRAM 启动

强制上拉到 VDD

方案 2:Option Bytes 的“出厂默认值”

在量产烧录脚本中,必须包含 Option Bytes 的配置。

STM32 示例(STM32CubeProgrammer 命令):

# 解锁 Option Bytes -c port=SWD mode=UR -ob UNLOCK # 设置读保护为 Level 0(无保护) -c port=SWD mode=UR -ob RDP=0xAA # 设置 NRST 为复位引脚 -c port=SWD mode=UR -ob nRST_STOP=1 nRST_STDBY=1 # 锁定 Option Bytes -c port=SWD mode=UR -ob LOCK

方案 3:无法连接调试器?

如果芯片因为 Option Bytes 锁死无法连接:

  1. BOOT0 拉高(进 System Memory)。

  2. 使用ISP 工具(如 FlyMcu、STM32CubeProgrammer)连接。

  3. 执行Full Chip Erase

  4. 恢复 Option Bytes 默认值。


四、选型避坑建议

  1. NRST 引脚

    • 尽量不要用作 GPIO,除非你非常清楚后果。

  2. 读保护(RDP)

    • Level 1:可以升级,不能读出。

    • Level 2:不可逆,一旦写入,芯片变砖。

  3. 写保护(WRP)

    • 保护 Flash 某块区域不被擦写,误操作会导致升级失败。


五、总结 Checklist

  • [ ] BOOT0 引脚是否有 10kΩ 下拉电阻?

  • [ ] 量产烧录脚本是否包含了 Option Bytes 的初始化?

  • [ ] 是否误开启了 RDP Level 2?

  • [ ] NRST 引脚是否被配置成了 GPIO?


六、写在最后(关注我,少走弯路)

我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。

BOOT 配置是“一票否决制”,配置错了,再好的代码也跑不起来。

关注我的专栏《嵌入式底层避坑指南》,下一篇我们将深入解析《看门狗复位和软件复位有什么区别?别只怪喂狗,看看复位标志位》

👉下一篇预告:《看门狗复位和软件复位有什么区别?别只怪喂狗,看看复位标志位


原创文章,转载请注明出处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 9:40:59

出口业务订单管理系统—— 搞定外贸接单

出口业务订单管理系统—— 搞定外贸接单 前言这篇带你从零看懂一个紧扣外贸实际场景的出口订单管理系统,面向对象 JSON持久化 状态机一、基本版 6 大功能一览序号功能出口业务关联技术要点1出口客户管理国外买家档案增、查、列表2出口产品管理HS 编码(…

作者头像 李华
网站建设 2026/6/16 9:40:13

自动翻料设备中的接近开关:让物料姿态切换更稳定

自动翻料设备常用于片状件、盒状件、小型工件的姿态调整。物料从一个方向翻转到另一个方向,看似只是机械动作,但如果翻转角度不到位,后续装配、检测或包装都会受到影响。接近开关在翻料设备中通常用于确认翻转臂、挡料板和接料平台的位置状态…

作者头像 李华
网站建设 2026/6/16 9:40:12

cfs调度类深入解刨——RDT科普篇

上一篇《cfs调度类深入解刨——cfs任务状态统计细节篇》讲述了kernel中cfs任务阻塞、睡眠等统计逻辑及作用。 本篇文章详细分析RDT的实现背景及设计方案。 RDT 设计方案 资源控制(resctrl)的用户界面 相关结构 系列文章列表 RDT 在Linux内核 4.10版本中…

作者头像 李华
网站建设 2026/6/16 9:38:58

AI持久化记忆中间件:构建具备跨会话认知能力的智能体

1. 项目概述:为什么AI应用突然需要“记住自己做过什么”最近在给一个智能客服系统做二次开发时,客户提了个让我愣住的需求:“能不能让机器人记得上周三帮张经理查过服务器日志,这次他一开口问‘上次那个日志’,就直接调…

作者头像 李华
网站建设 2026/6/16 9:38:55

MYD1蛋白详解

MYD1蛋白MYD1(Myeloid Differentiation primary response protein 1)是髓样分化初级应答基因编码的关键调控蛋白,属于MYD88家族成员。该蛋白由296个氨基酸组成,分子量约为33.8kDa,其基因定位于人类染色体3p21.3区域。从…

作者头像 李华
网站建设 2026/6/16 9:37:51

信用卡欺诈检测实战:不平衡数据处理与XGBoost可解释性

1. 项目概述:为什么信用卡欺诈检测是机器学习落地的“黄金练兵场” 如果你刚学完 Pandas 和 Scikit-learn,正发愁找不到一个既真实、又可控、还能立刻看到业务价值的实战项目——那信用卡欺诈检测就是你此刻最该打开的笔记本。它不是 Kaggle 上那种纯为…

作者头像 李华