[STM32G0] STM32G030系列MCU串口烧录踩坑

[复制链接]
1071|33
Zuocidian 发表于 2025-9-5 15:52 | 显示全部楼层 |阅读模式
    最近在使用STM32G030F6P6做一个小型的电机驱动板

9517368ba96c17889d.png



右边2x2的2.54mm排母 连接BLE转串口模块 & 作为串口烧录口
        由于空间受限,同时为了后期烧录方便,决定不额外预留SWCLK和SWDIO接口来烧录,而使用串口进行烧录,如此一来仅需一对串口引脚,平时正常工作时可以连接BLE转串口模块,需要更新固件时直接使用有线串口进行固件更新,而且这样调试还是烧录,全程就只需要一个串口模块,而不用额外购买ST-LINK(本意也是想着后续开源,降低复刻门槛)。
        这边使用STM32CodeMX进行开发(G系列的芯片也只能使用HAL库),可以看到,一开启USART1,便配置了PB7和PB6(PB7,PB8共用一个硬件IO,PB3,PB4,PB5,PB6共用一个硬件IO)作为USART1的引脚。

6391268ba96b956875.png


        当时还对此不了解,以为只要是个串口就能烧录了,后果可想而知,无论怎么拉高BOOT0引脚电平,无论是使用FlyMcu还是STM32CubeProgrammer进行串口烧录,都没成功过,根本就识别不到芯片。搞得我一直以为芯片被搞坏了,还是这个G030F6P6本身就不支持串口烧录,折腾了好一阵子。
        后面实在没辙,就在板子后面偷偷留下了SWCLK和SWDIO接口来烧录。

4110768ba96b0d48bc.png


甚至还是利用上了检测开关的孔位
        但毕竟只是权宜之计,本身板子空间就小,还得给SW烧录口让位,搞得布线就很便秘。之后在网上也是查阅了相关问题,但他们的焦点都在于nBOOT_SEL这块的问题,和我遇到的实际情况不契合。

        之后用上了GPT帮我解决问题,但由于它的消息来源也只局限于网上,也没直接得到解决。但它却提供了我之前一直没注意到的一个很重要的信息,那就是需要串口烧录的话,Bootloader对应的引脚是 PA9/PA10(USART1),PA2/PA3(USART2) 或 PC10/PC11(USART3)。


STM32G0系列芯片的启动配置相关内容在官方文档《AN5096:Getting started with STM32G0 Series hardware development》第三章
       后面不管CodeMX上面的引脚配置,串口模块直接连接PA9/PA10,一把连接成功!!!

9184968ba96a278f2e.png


问题解决:
        但到这还是没能彻底解决问题,烧录和通信串口的引脚还是不能复用。
        这就很怪了,在CodeMX上面,一开启USART1,就直接配置了PB7和PB6作为对应引脚,也没法直接控制PA9/PA10作为串口的TX/RX引脚。难道是CodeMX出现Bug了?

8676368ba9694a6dfa.png 5057268ba969d49184.png


        后续经过自己的探索发现,若想要正常使用PA9/PA10作为USART1的TX/RX引脚,需要在“SYS Mode and Configuration”内,勾选“Pin PA9 instead of pin PA11”和“Pin PA10 instead of pin PA12”。

7241268ba968e52d15.png


        这里的指令应该是选定硬件16号引脚作为PA9,硬件17号引脚作为PA10,倘若不勾选,则硬件16号引脚作为PA11,硬件17号引脚作为PA12。


9167068ba968307b32.png


5222868ba967c2e3d6.png



        好家伙儿,原来是"单选题"而不是"多选题",得给硬件引脚选择对应IO的,而不是两IO共用同一引脚。

        这里对比一下,可以明显看到PB3,PB4,PB5,PB6是共用硬件20号引脚的,但硬件16号引脚这里,只能是要么选择PA11,要么PA9。

          3222268ba966f03481.png

7961568ba9674165f8.png       

        在工程创建时,默认是不勾选“Pin PA9 instead of pin PA11”和“Pin PA10 instead of pin PA12”。就相当于当前MCU没有PA9和PA10这个两个IO,也难怪一打开USART1,指定的TX/RX IO是PB6/PB7(这边是直接启用了PB6/PB7的复用功能)。

        接下来,勾选“Pin PA9 instead of pin PA11”和“Pin PA10 instead of pin PA12”,直接再打开USART1,可以看到PA9此时已经被选定为USART1_TX了。

53368ba96679a207.png


        PA10这里我们得手动选择一下

9168068ba953984e45.png


        至此,就实现了选定PA9/PA10作为USART1的对应TX/RX功能,这样就既能实现正常的串口通信,也能实现串口烧录了。

5935468ba9535d4141.png


————————————————
版权声明:本文为CSDN博主「石墨电极」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_63366725/article/details/151049822

abotomson 发表于 2025-9-21 12:46 | 显示全部楼层
STM32CubeProgrammer 救砖操作
pl202 发表于 2025-9-21 13:36 | 显示全部楼层
首次烧录成功,但后续烧录时无法进入Bootloader模式,导致烧录失败。
pixhw 发表于 2025-9-21 13:52 | 显示全部楼层
未连接GND,导致信号电平浮动              
everyrobin 发表于 2025-9-21 14:31 | 显示全部楼层
无需额外预留 SWDIO/SWCLK
benjaminka 发表于 2025-9-21 15:14 | 显示全部楼层
芯片可能自动进入主Flash启动模式,而未进入Bootloader模式,导致无法通过串口连接。
cemaj 发表于 2025-9-21 15:37 | 显示全部楼层
烧录时MCU复位或无法进入Bootloader模式。
beacherblack 发表于 2025-9-21 16:17 | 显示全部楼层
ST-Link Utility或第三方工具。
tifmill 发表于 2025-9-21 16:38 | 显示全部楼层
在上电复位时,将BOOT0引脚拉高,同时NRST引脚保持低电平,以进入Bootloader模式。
linfelix 发表于 2025-9-21 17:15 | 显示全部楼层
使用ST-Link或其他调试器解锁调试端口。
uiint 发表于 2025-9-21 19:25 | 显示全部楼层
工具与MCU不兼容​              
fengm 发表于 2025-9-21 20:25 | 显示全部楼层
串口参数错误​              
louliana 发表于 2025-9-21 20:57 | 显示全部楼层
芯片无法正常工作或烧录失败。              
yeates333 发表于 2025-9-21 21:21 | 显示全部楼层
STM32G030系列MCU的串口烧录功能虽然方便,但在实际操作中可能会因硬件连接、软件配置或供电问题导致烧录失败。
lzbf 发表于 2025-9-22 12:48 | 显示全部楼层
上位机提示 “校验错误”“超时”,或烧录过程中突然中断。
updownq 发表于 2025-9-22 13:28 | 显示全部楼层
使用可靠夹具保证供电稳定,禁用代码修改选项字节
febgxu 发表于 2025-9-22 14:55 | 显示全部楼层
J-Flash烧录              
claretttt 发表于 2025-9-22 15:19 | 显示全部楼层
供电电压稳定,避免因电压波动导致的复位或烧录失败。
louliana 发表于 2025-9-22 15:42 | 显示全部楼层
烧录时频繁出现“超时”或“校验失败”。
benjaminka 发表于 2025-9-22 17:00 | 显示全部楼层
芯片支持的协议?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

240

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部