
1. 概述 STM32 的 Bootloader 可以支持多种协议的,比如 USART,I2C,DFU 等等,USARTBootloader 是客户使用 STM32 的时候常常会用到的协议。客户在使用 STM32F745 进行产品开发的时候,出现了使用 STM32CubeProgramer 无法通过 USART1 Bootloader 进行程序升级的问题。为了解决客户的问题,我在 NUCLEO-F746ZG 开发板上,复现了同样的现象,本文针对这个现象,分析了该问题的原因和解决方法,作为一个记录。 2. 问题分析 STM32F745/6 USART1 Bootloader 使用的 TX 和 RX 分别是 PA9 和 PA10。而NUCLEO-F746ZG 开发板,默认情况下,板子上的 PA9 和 PA10 被用作 USB Vbus 和USB ID, 需要断开板子上的 SB127 和 SB125 才能让 PA9 和 PA10 被 USART1 使用。 使用 STM32CubeProgrammer 下载工具,通过 USB-Serial 转接板连上 NUCLEOF746ZG,如图 1 所示,选择 USART 协议,选择对应的 USART1 端口,其它参数选用默认配置,然后连接 NUCLEO 开发板,结果出现连接失败。 对照着 UM1974,检查连线没有问题,确认了 BOOT 脚为高电平,MCU 也进入Bootloader 模式,同时参考 AN2606,确认 STM32F475/6 支持 USART1 Bootloader。测试 USART3 Bootloader,STM32CubeProgrammer 可以正常连接。 ![]() 参考 AN3155 了解 UART Bootloader 的工作流程如图 2,果断使用串口终端,比较USART1 Bootloader 和 USART3 Bootloader 响应上位机的命令有何区别。 ![]() 使用串口终端工具,分别连接 USART1,USART3,发送对应的 UART Bootloader 命令,得到下图 3 的命令交互。 ![]() 通过图 3 的命令交互可以看出,当 USART1 Bootloader 收到 7F 命令的时候,返回的值是 FF 79,正常的情况下,应该返回 79。命令 7F 的作用是选择对应的 USART Bootloader,返回 79 表示 MCU 正确的进入了 USART Bootloader 工作模式,在 USART1 Bootloader 中,STM32CubeProgrammer 发送 7F 命令收到的返回值是 FF 79,所以STM32CubeProgrammer 认为此时 MCU 没有正确的进入 USART Bootloader 模式,因此连不上目标板。 很显然,这个多余的 FF 不应该是 Bootloader 发出来的,通过示波器,观察 USART1TX 的 PA9 发现,复位芯片之后,PA9 为低电平,而根据参考手册,当 USART1 使能之后,此时 USART TX 应该为高电平才正常,所以怀疑这个异常现象是 USART1 产生了错误的数据导致的。 针对这种现象,在 PA9 外部上拉,再进行测试,USART1 Bootloader 工作正常。 完整版请查看:附件 ![]() |
STM32F769I-DISCO开发板GUI学习内容(二)_课前硬件基础
基于STM32F767通过cube配置:QSPI接口读写64M PSRAM+flash参考资料...
【实战经验】基于STM32F7的网络时间同步例程
STM32硬件结构学习
STM32中BOOT的作用
【STM32F769I-DISC1】开发板刷入Micropython并完成点灯、读取内部温度测试
【STM32F769I-DISC1】测评01:创建STM32cube IDE 工程,点个灯
【STM32F769】创建deepseek本地服务,并实现http请求
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
coremark移植到STM32F769I-DISCO开发板的两种方法