STM32F745 USART1 Bootloader失败原因分析与解决

发布者:pi26最新更新时间:2024-09-13 来源: elecfans关键字:USART1  Bootloader 手机看文章 扫描二维码
随时随地手机看文章

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 可以正常连接。

93cb91b2-9267-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

参考 AN3155 了解 UART Bootloader 的工作流程如图 2,果断使用串口终端,比较USART1 Bootloader 和 USART3 Bootloader 响应上位机的命令有何区别。

93f3495a-9267-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

使用串口终端工具,分别连接 USART1,USART3,发送对应的 UART Bootloader 命令,得到下图 3 的命令交互。

图3.USART1 Bootloader Command Interaction

940207ba-9267-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

通过图 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 工作正常。

3. 问题解决

根据上面的分析,USART1 TX 没有上拉导致了 USART1 Bootloader 无法正常工作,但通常情况下,我们使用 USART 的时候,TX,RX 是无需外加上拉的,为什么STM32F745/6 的 USART1 需要上拉,而 USART3 无需上拉呢?带着这个问题,仔细阅读了相关文档,最终再 AN2606 V5.1(之前版本没有注明)版本中,发现了这个区别,正是这个区别导致了这个问题。

941617f0-9267-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

4.总结

通过分析和解决这个问题,可见及时更新并仔细阅读相关文档是很重要的事情。针对这个问题,如果仔细阅读了最新的 AN2606,就能很快定位产生问题的原因。当然,通过逐步分析这个问题,也进一步加深了对 Bootloader 的理解。


关键字:USART1  Bootloader 引用地址:STM32F745 USART1 Bootloader失败原因分析与解决

上一篇:都是32位MCU,ESP32、GD32、STM32有什么区别
下一篇:STM32使用片内外设DFSDM的应用问题

推荐阅读最新更新时间:2026-03-25 11:16

STM32项目:USART1配置与中断接收
一、简述 本文介绍的是一个.c文件中的内容,主要功能为STM32F101C8T6中USART1的初始化、配置、中断接收以及发送函数。 #include stm32f10x.h #include stm32f10x_gpio.h #include stm32f10x_usart.h u8 USART1_RX_Buff = {0x00, 0x00, 0x00, 0x00}; u8 USART1_RX_Count = 0; 二、USART1初始化与配置 void USART1_Init(u32 bound){ GPIO_InitTypeDef GPIO_InitStructure; USART_I
[单片机]
STM32CubeMx配置USART1增加打印功能
1.创建基于STM32F03C8T6工程 1.1配置时钟 选择外部高速时钟源HSE 1.2配置系统时钟树使其达到最大时钟72MHz(最大系统时钟) 2.配置串口1 3.生成代码 具体工程配置可参考上几篇博客。 4.串口重定向 勾选微库 添加重定向代码 /* USER CODE BEGIN 0 */ #include stdio.h /* USER CODE END 0 */ /* USER CODE BEGIN 1 */ /********************************************************* *重定义 fputc 函数 *************
[单片机]
STM32CubeMx配置<font color='red'>USART1</font>增加打印功能
通过学习USART1深入STM32F107VCT6的串口通信
简介:STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的,由于STM32采用分数波特率,所以STM32的串口波特率设置范围很宽,而且误差很小。 在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用D
[单片机]
STM32 死在 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
移植官方STM32虚拟串口程序,串口通信死在 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); 仿真发现USART1时钟味使能。。。 使能时钟后仿真,USART1寄存器有反应,发送数据是仍死在 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); 上网寻找答案无果。怀疑引脚未配置造成。 配置 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
[单片机]
STM32 USART1对PWM的影响,串口影响PWM
注意,USART1和TIM1是复用的,如果用TIM1产生PWM(PA9 / PA10),则USART1不应该用该管脚,可以用PB6/PB7。
[单片机]
STM32F4CubeMX学习笔记之USART1
开发板:普中PZ6808L-F4 开发环境:keil5+CnbeMx 硬件资源:2个LED 1个串口 功能说明:LED2闪烁表示系统在运行 LED1通过串口控制 CnbeMx配置为 int fputc(int ch,FILE *f)//重新定义串口输出使用printf功能 { uint8_t temp ={ch}; HAL_UART_Transmit(&huart1,temp,1,2); return(ch); } // 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx int fgetc(FILE * f) { uint8_t ch = 0; HAL_UAR
[单片机]
STM32F4CubeMX学习笔记之<font color='red'>USART1</font>
基于STM32F429-Discovery USART1 PA9 PA10 调试成功
原则上,像USART1等这些基本的外设,根据官方的库,应该直接成功了,可是,我试了一下,就是不成功。虽然有STM32F10X的基础,但是感觉打印的就是乱码,并且发送时,竟然中断接收函数里,中断进不了!! 后来查看原理图,原来STLink V2有引脚与PA9 PA10连接。应该是USB转串口吧,因此,再把USB-TTL 接到PA9 PA10上,就会发生 两个TXD- TXD相互干扰的现象,因此不通!!我这里直接去掉连接的短接电阻,程序正常了。 注意开始时需要修改一下库里的晶振设置:8M外部晶振与PLL_M=8。官方库好像是基于25MHz晶振的,但是实际的焊接的为:8MHz晶振。 修改后:测试成功了。收发正常了。
[单片机]
基于STM32F429-Discovery <font color='red'>USART1</font> PA9 PA10 调试成功
USART USART1收发功能工程
功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: _ !知识: 1、复用功能I/O和调试配置(AFIO) 为了优化外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)(参见0节)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。 2、嵌套向量中断控制器(NVIC) l 43 个可屏蔽中断通道(不包含16 个Cortex-M3 的中断线); l 16 个可编程的优先等级; l 低延迟的异常和中断处理; l 电源管理控制; l 系统控制寄存器的实现; l 嵌套向量中断控制器(NVIC)和处理器核的接口紧密
[单片机]
USART <font color='red'>USART1</font>收发功能工程
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved