零基础国产GD32单片机编程入门(九)低功耗模式实战含源码
文章目录
- 一.概要
- 二.GD32单片机低功耗基本介绍
- 三.GD32单片机待机模式介绍
- 四.待机低功耗例程实验
- 五.工程源代码下载
- 六.小结
一.概要
在生活中通过关掉用电器可以实现省电节能的目的,同样的道理单片机也可以通过这种方法实现降低功耗。单片机是由许多部件组成,一些组件的电源系统是独立的,可以通过关闭单片机内部的组件的电压,可以实现降低功耗。
二.GD32单片机低功耗基本介绍
GD32提供了一些低功耗模式。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不需要继续运行(例如等待外部事件) 时,可以利用多种低功耗模式来节省功耗。
GD32提供了多种功耗模式,以达到不同层次的降低功耗的目的:
GD32主要低功耗模式:
• 睡眠模式 (内核停止工作,外设仍在运行)
• 深度睡眠模式 (所有时钟都停止)
• 待机模式 ( 1.2V 内核电源关闭)
WFI和WFE都是系统指令,WFI是表示中断,WFE表示事件。
睡眠模式:
仅关闭了内核时钟,内核停止运行,但其片上外设,CM3 核心的外设全都照常运行,在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
睡眠模式退出:
如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从睡眠模式唤醒。
如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。
深度睡眠模式:
进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码 。
深度睡眠退出:
当一个中断或唤醒事件会退出停止模式。
待机模式:
它除了关闭所有的时钟,还把 1.2V 区域的电源也完全关闭了,也就是说, 从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测BOOT条件,从头开始执行程序 。
待机模式退出:
WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、FWDGT复位可以退出待机模式。
三.GD32单片机待机模式介绍
待机模式是基于Cortex™-M3的SLEEPDEEP模式实现的。在待机模式下,整个1.2V域全部
停止供电,同时 LDO 和包括 IRC8M、HXTAL 和 PLL 也会被关闭。进入待机模式前,先将Cortex™-M3 系统控制寄存器的SLEEPDEEP位置1,再将PMU_CTL寄存器的STBMOD位置1,再清除PMU_CS寄存器的WUF位,然后执行WFI或WFE指令,系统进入待机模式,PMU_CS寄存器的STBF位状态表示MCU是否已进入待机模式。待机模式有四个唤醒源,包括来自NRST引脚的外部复位,RTC报警,FWDGT复位,WKUP引脚的上升沿。待机模式可以达到最低的功耗,但唤醒时间最长。另外,一旦进入待机模式,SRAM和1.2V电源域寄存器的内容都会丢失。退出待机模式时,会发生上电复位,复位之后 Cortex™-M3 将从0x00000000 地址开始执行指令代码。
四.待机低功耗例程实验
硬件准备:
STLINK接GD32F103C8T6开发板,STLINK接电脑USB口。
主要代码
#include "gd32f10x.h"
#include "gd32f10x_libopt.h"
#include "systick.h"
int main(void)
{
uint8_t i;
rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);//AHB主频是1分频
systick_config();//系统主频108MHZ,采用外部晶振,由两个宏决定(__SYSTEM_CLOCK_108M_PLL_HXTAL与HXTAL_VALUE)
rcu_periph_clock_enable(RCU_AF);//管脚复用时钟alternate function clock使能
delay_1ms(1000);//等待1秒
gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);//PB4管脚默认是NJTRST,要当GPIO,需要重映射
rcu_periph_clock_enable(RCU_GPIOB);//GPIOB时钟使能
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);//PB4配置成输出
rcu_periph_clock_enable(RCU_PMU);//使能电源管理
pmu_wakeup_pin_enable();//使能唤醒引脚
for( i=0;i<50;i++)
{
delay_1ms(100);//等待100ms
gpio_bit_set(GPIOB, GPIO_PIN_4);//PB4输出高
delay_1ms(100);
gpio_bit_reset(GPIOB, GPIO_PIN_4);//PB4输出低
}
pmu_to_standbymode(WFI_CMD);//进入待机模式
return 0;
}
实验效果
LED灯会在上电1秒之后,亮灭交替闪烁5秒钟,然后停止闪烁,板子进入待机模式,
如果按唤醒按键(wk_up1),板子才会重新运行,LED继续闪烁5秒钟。
GD32单片机进入低功耗前,板子功耗是30mA左右。
5秒之后,GD32单片机进入待机状态,板子功耗是3mA左右,说明进入待机状态,功耗降的比较明显,按唤醒按键(wk_up1),板子又进入重新运行状态。
五.工程源代码下载
通过网盘分享的文件:10.低功耗.zip
链接: https://pan.baidu.com/s/1HYg1zlLQ7NvBfXaCJw7yIA 提取码: 4fph
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行
CSDN代码
六.小结
GD32单片机支持多种低功耗模式,包括睡眠模式、待机模式等,这些模式通过降低时钟频率、禁用外设和进入深度睡眠状态来实现节能。通过仔细选择和配置这些模式,可以显著减少功耗,从而延长设备的续航时间。