从BOOT0短接到CLI敲出 save :一个飞控工程师的烧录手记
第一次给F405飞控板烧录Betaflight固件时,我盯着电脑上“设备管理器”里那个灰掉的“未知设备”,手心出汗。
不是因为不会点Configurator界面上那个闪亮的“Flash Firmware”按钮——而是当它失败时,你根本不知道该去查芯片手册第几章、USB描述符哪一位、还是自己焊反了BOOT0的0欧电阻。
后来我才明白: 烧录不是操作,是对话。
是你和STM32的启动状态在谈条件,和USB协议栈在核对身份,和Flash存储器在约定写入契约,最后还要和Betaflight的CLI解释清楚——“这次改的只是 dterm_filter_type ,别动我的PID!”
这篇文章不教你“五步搞定烧录”,而是陪你重走一遍那条从硬件焊盘到内存地址、从USB包头到CRC校验的完整通路。它来自真实调参台上的万用表读数、 dfu-util -v 输出的十六进制日志、以及无数次 systemReset() 后串口突然吐出的一行 # Betaflight ready 。
当你短接BOOT0时,STM32其实在做三件事
很多教程只说:“BOOT0接高电平,上电就是DFU模式”。但这句话背后藏着三个关键判断,缺一不可:
- 复位源识别 :STM32的NRST引脚被拉低(手动按复位键)或上电复位(Power-on Reset)触发后,内部状态机立即采样BOOT0/BOOT1电平;
- 向量表跳转决策 :若
BOOT0=1,CPU放弃读取Flash首地址0x08000000处的MSP初始值,转而跳向系统存储器起始地址0x1FFF0000; - ROM Bootloader接管权移交 :该地址空间由ST预烧录的只读代码占据——它不关心你的PID参数,只认DFU协议里的
DFU_DNLOAD命令和0x08000000这个目标地址。
✅ 实操验证法:用万用表测BOOT0焊盘对GND电压,必须稳定≥2.0V(F4系列VIL=0.8V,VIH=2.0V)。常见坑点是排针虚焊、杜邦线接触不良,或3.3V电源带载能力不足导致电压跌落。
这时你在PC端执行:
dfu-util -l
看到的不是“STM32 Device”,而是:
Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,03*128Kg", serial="393237303032"
——这行输出意味着:STM32已成功进入ROM Bootloader,并通过USB描述符告诉主机:“我能擦写Flash,分4块区域,最大支持1MB”。
dfu-util 那一行命令背后,是USB协议栈在悄悄握手
你以为 dfu-util -d 0483:d


5745


被折叠的 条评论
为什么被折叠?



