七户小站
这里是创客七户社
七户小站

STM32G031串口下载、Bootloader踩坑记

STM32G031串口下载、Bootloader踩坑记

最近画了一块STM32G031G8U6的开发板,本着塞爆的原则加上了USB-TTL,那就再加上自动下载电路吧,故事由此开始

Bootloader进入方式

STM32系列MCU中,进入Bootloader即从系统存储器(System Memory)启动,在多数其他系列中,启动方式的选择由外部BOOT0与BOOT1引脚独立控制,而在G0系列中略有不同。

RM0444中对于启动模式的介绍

STM32G0系列芯片通过选项字节(Option Byte)中的 BOOT_LOCKnBOOT1nBOOT_SELnBOOT0这几位加上外部的BOOT0 管脚的电平来确定启动方式。当nBOOT_SEL0时,BOOT0的值来源于外部的BOOT0管脚的电平,低电平为0,高电平为1;当nBOOT_SEL1时,BOOT0的值来源于nBOOT0的值。

芯片启动时会检查闪存地址0x080000000(即用户程序起始地址)处的数据,如果该数据为0xFFFFFFFF则表示用户程序为空,此时不管上面的那些设置程序会从 System memory 启动。

芯片在出厂后只要没有经过程序下载等操作启动时总是会从 System memory 启动。

因此在设计常规的下载电路之余也需要配置MCU的选项字节

自动下载电路的设计

参考了正点原子开发板上的电路,进行串口下载时,通过改变RTS和DTR拉高BOOT0并进行复位

使用串口连接到MCU

网络资料均表示在Bootloader状态下,USART1硬件串口接收和发送数据,根据Datasheet中的描述,引脚PB6 PB7的首选复用功能为USART1,于是我把板上CP2102连接到了这两个引脚,这便成为了本项目最大的坑

DS12992中引脚与复用功能的对应表格
STM32CubeProgrammer中的报错信息

在更换工具、检查引脚连接后,问题仍然没有解决,使用逻辑分析仪抓取串口信息,发现只有主机发送的0x7F,MCU并未回复

查阅Bootloader应用手册,在Bootloader中实际上并没有必须使用USART1的限制,两个硬件串口都可以用于连接,此外还支持IIC连接。而Bootloader中实际上将PA10&PA9复用为USART1,PA3&PA2复用为USART2,而这四个引脚的默认复用功能其实并不是USART,将串口连接到PA3&PA2,问题解决

AN2606中对于G0系列Bootloader的介绍(部分)
Avatar photo

Acha

文章作者

2024届社长

发表回复

textsms
account_circle
email

七户小站

STM32G031串口下载、Bootloader踩坑记
最近画了一块STM32G031G8U6的开发板,本着塞爆的原则加上了USB-TTL,那就再加上自动下载电路吧,故事由此开始
扫描二维码继续阅读
2022-05-03