最近画了一块STM32G031G8U6的开发板,本着塞爆的原则加上了USB-TTL,那就再加上自动下载电路吧,故事由此开始
Bootloader进入方式
STM32系列MCU中,进入Bootloader即从系统存储器(System Memory)启动,在多数其他系列中,启动方式的选择由外部BOOT0与BOOT1引脚独立控制,而在G0系列中略有不同。
STM32G0系列芯片通过选项字节(Option Byte)中的 BOOT_LOCK
、nBOOT1
、nBOOT_SEL
、nBOOT0
这几位加上外部的BOOT0
管脚的电平来确定启动方式。当nBOOT_SEL
为0
时,BOOT0
的值来源于外部的BOOT0
管脚的电平,低电平为0
,高电平为1
;当nBOOT_SEL
为1
时,BOOT0
的值来源于nBOOT0
的值。
芯片启动时会检查闪存地址0x080000000
(即用户程序起始地址)处的数据,如果该数据为0xFFFFFFFF
则表示用户程序为空,此时不管上面的那些设置程序会从 System memory 启动。
芯片在出厂后只要没有经过程序下载等操作启动时总是会从 System memory 启动。
因此在设计常规的下载电路之余也需要配置MCU的选项字节
自动下载电路的设计
参考了正点原子开发板上的电路,进行串口下载时,通过改变RTS和DTR拉高BOOT0
并进行复位
使用串口连接到MCU
网络资料均表示在Bootloader状态下,USART1硬件串口接收和发送数据,根据Datasheet中的描述,引脚PB6
PB7
的首选复用功能为USART1
,于是我把板上CP2102连接到了这两个引脚,这便成为了本项目最大的坑
在更换工具、检查引脚连接后,问题仍然没有解决,使用逻辑分析仪抓取串口信息,发现只有主机发送的0x7F,MCU并未回复
查阅Bootloader应用手册,在Bootloader中实际上并没有必须使用USART1的限制,两个硬件串口都可以用于连接,此外还支持IIC连接。而Bootloader中实际上将PA10&PA9复用为USART1,PA3&PA2复用为USART2,而这四个引脚的默认复用功能其实并不是USART,将串口连接到PA3&PA2,问题解决
发表回复