0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

工程师笔记|STM32F745 USART1 Bootloader 失败原因分析与解决

STM32单片机 来源:未知 2023-01-08 16:50 次阅读

关键词:STM32F745,Bootloader,USART

目录预览

1. 概述

2. 问题分析

3. 问题解决

4. 总结

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

de497d56-8f30-11ed-bfe3-dac502259ad0.png

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

de751da8-8f30-11ed-bfe3-dac502259ad0.png

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

图3.USART1 Bootloader Command Interaction

de94f970-8f30-11ed-bfe3-dac502259ad0.png

通过图 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(之前版本没有注明)版本中,发现了这个区别,正是这个区别导致了这个问题。

dec791a0-8f30-11ed-bfe3-dac502259ad0.png

4.总结

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

dee5410a-8f30-11ed-bfe3-dac502259ad0.png

长按扫码关注公众号

更多资讯,尽在STM32

点击“阅读原文”,可下载原文档


原文标题:工程师笔记|STM32F745 USART1 Bootloader 失败原因分析与解决

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44514

    浏览量

    632975
  • STM32
    +关注

    关注

    2266

    文章

    10871

    浏览量

    354793

原文标题:工程师笔记|STM32F745 USART1 Bootloader 失败原因分析与解决

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    用二创,1:1复刻工程师的职场现状

    工程师
    扬兴科技
    发布于 :2024年07月19日 18:30:07

    在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?

    在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?该如何修改? 工程
    发表于 07-16 06:08

    开发环境coocox,stm32f429串口输出总是乱码的原因

    一个小小的串口居然让我捣鼓了两天还没出来,时钟正确,usart寄存器值也是对的。然后试了试源码居然一样乱码。不知道是怎么了。板子是官方的论坛送的stm32f429zit6。下面贴上代码和源码
    发表于 05-17 07:38

    stm32高级定时器主输出使能后,usart1就不能发送只能接收,为什么?

    ,我看了下源码,跟usart1没有半毛钱关系啊,我还试了一下直接操作寄存器,也还是一样的效果。对此感觉很奇怪,这是不是又是stm32f103的一个bug?我把代码也上传分享一下,亲测可用的除了以上一点小bug,是57步进电机配合tb6600驱动的。
    发表于 05-07 06:51

    大厂电子工程师常见面试题#电子工程师 #硬件工程师 #电路知识 #面试题

    电子工程师电路
    安泰小课堂
    发布于 :2024年04月30日 17:33:15

    STM32L151C8T6同样的代码,USART1正常,USART2不工作是为什么?

    请教: MCU是STM32L151C8T6。 同样的代码,USART1正常,USART2不工作。 请问,这是为什么 ?
    发表于 04-23 06:03

    STM32F103RCT6的USART1不能接收多字节数据是什么原因导致的?

    用串口助手手动发送和1秒一次的定时发送时,STM32F103RCT6能完整地接收到15个字节的数据。 用串口助循环发送时,与延时有关。500毫秒延时,STM32F103RCT6能接收到12个字
    发表于 04-17 06:35

    STM32F051 USART1接收数据乱码的原因

    求助:STM32F051 USART1发送没有中断,接收使能中断,发送数据正常,接收数据乱码,确认进入了接收中断,但数据出现乱码,请问有哪些原因
    发表于 04-16 06:14

    STM32F030串口用IDLE中断接收不定长度数据包,中断异常的原因

    _Mode = USART_Mode_Rx | USART_Mode_Tx; //使用接收发送功能 USART_Init(USART1,USART
    发表于 04-12 06:08

    STM32L431x用usart1打印会乱码的原因

    STM32L431x用usart1打印会乱码的原因
    发表于 04-08 06:12

    STM32Cube做的USART1得PB67发送给电脑数据时会乱码的原因

    STM32Cube做的USART1得PB67发送给电脑数据会时乱码,使用得转化工具是CH340,有人遇到吗
    发表于 04-07 06:46

    请问STM32G473VET6的LPUART1能和USART1能同时使用吗?

    STM32G473VET6的LPUART1能和USART1能同时使用吗?
    发表于 03-22 07:00

    STM32G051K8T6-USART1无法工作的原因?如何解决?

    问题描述:使用STM32CubeMX做简单的测试工程,只打开USART1USART2功能,RCC设置为LSE。 使用USART1
    发表于 03-22 06:59

    STM32WBA52CG升级到STM32Cube FW_WBA V1.2.0后,调用BleStack_Init后USART1输出异常怎么解决?

    使用STM32WBA52CG开发蓝牙,板子是NUCLEO-WBA52CG,USART1作为log输出通道。之前使用STM32Cube FW_WBA V1.1.1没什么问题。最近升级了
    发表于 03-08 06:04