很多朋友在调试GD32 MCU的低功耗模式时会遇到一个问题:程序中让MCU进入了Sleep、Deepsleep或者Standby模式,之后MCU就无法再下载程序了。这是因为在低功耗模式下,MCU的SW口和JTAG口是无法访问的。比如下面的程序就会导致该问题发生:

该main函数中第一步是打开PMU时钟,然后马上让MCU进入Deepsleep模式,当你想要再次下载程序时,IDE会有如下错误提示(不同IDE报错不同):

遇到这种情况怎么办呢?难道只能重新换一颗芯片了?不不不,其实有方法解决这个问题的。
方法一:
GD32 MCU的启动模式根据芯片上的BOOT0和BOOT1脚是可以选择三种模式:

一般情况下,BOOT0需要接地,也就是程序是从主Flash启动的,即从用户代码区启动,此时代码会运行到进入Deepsleep的语句。如果将BOOT0拉高,再重新上电MCU,此时程序会从出厂引导装载程序(ISP)或者片上SRAM运行,这样就不会运行用户代码,也就不会再让MCU进入低功耗了,此时通过IDE的全片擦除功能将Flash中的程序擦除掉,再将BOOT0恢复为低并重新上电后,就可以重新下载程序啦。
以聚沃东方红开发板为例:



只需要将上图中方框处的两个排针用跳线帽短接,再将Flash擦除即可。
方法二:
如果板子上的BOOT0不好再接高怎么办呢?不妨试试下面的办法:
将MCU的NRST脚和仿真器的NRST脚相连,这样在重新下载程序时,仿真器会先拉低NRST脚让MCU复位,再在很短的时间内进行程序下载。但这种办法不是每次都有效,这取决于是仿真器先进入下载状态还是MCU先进入低功耗状态。
一些建议:
1、在调试低功耗模式时,可以在main函数之前增加几秒钟的延时,这样在复位MCU后,在MCU进入低功耗前,你可以有足够的时间进行新的程序下载;
2、程序中设计算法,让一些条件达到后才让MCU进入低功耗模式,比如按键,这样在复位MCU后,就可以不让MCU进入低功耗了:

好了,今天的内容就这些,如果还没有学废,那就评论区聊聊吧~记得点赞收藏加关注
-
单片机
+关注
关注
6046文章
44670浏览量
640716 -
mcu
+关注
关注
146文章
17435浏览量
353901 -
GD32
+关注
关注
7文章
416浏览量
24628
发布评论请先 登录
相关推荐
【GD32 MCU入门教程】GD32 MCU GPIO 结构与使用注意事项

【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(14)RTC 模块介绍

GD32 MCU 入门教程】GD32 MCU 常见外设介绍(12)FMC 模块介绍

【GD32 MCU 入门教程】二、GD32 MCU 烧录说明(3)脱机烧录

【GD32 MCU 入门教程】二、GD32 MCU 烧录说明 (2)SWD/JTAG在线下载

【GD32 MCU 入门教程】二、GD32 MCU 烧录说明(1)ISP 烧录

【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(3)使用 Embedded Builder 开发 GD32

【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(2)使用 IAR 开发 GD32

【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(1)使用Keil开发GD32

评论