GD32F407单片机开发入门(十二)低功耗模式实战含源码

一.概要

在生活中通过关掉用电器可以实现省电节能的目的,同样的道理单片机也可以通过这种方法实现降低功耗。单片机是由许多部件组成,一些组件的电源系统是独立的,可以通过关闭单片机内部的组件的电压,可以实现降低功耗。

二.GD32单片机低功耗基本介绍

GD32提供了一些低功耗模式。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不需要继续运行(例如等待外部事件) 时,可以利用多种低功耗模式来节省功耗。

GD32提供了多种功耗模式,以达到不同层次的降低功耗的目的:
在这里插入图片描述

GD32主要低功耗模式:

• 睡眠模式 (内核停止工作,外设仍在运行)
• 深度睡眠模式 (所有时钟都停止)
• 待机模式 ( 1.2V 内核电源关闭)

在这里插入图片描述在这里插入图片描述

WFI和WFE都是系统指令,WFI是表示中断,WFE表示事件。

睡眠模式:
仅关闭了Cortex®-M4内核时钟,内核停止运行,但其片上外设单片机的外设全都照常运行,在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。如需进入睡眠模式,只要清除Cortex®-M4系统控制寄存器中的SLEEPDEEP位,并执行一条WFI或WFE指令即可

睡眠模式退出:
如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从睡眠模式唤醒。
如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。

深度睡眠模式:
进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码 。先将 Cortex®-M4 系统控制寄存器的 SLEEPDEEP 位置 1,再清除PMU_CTL寄存器的STBMOD位,然后执行WFI或WFE指令即可进入深度睡眠模式。

深度睡眠退出:
当一个中断或唤醒事件会退出停止模式。

待机模式:
它除了关闭所有的时钟,还把 1.2V 区域的电源也完全关闭了,也就是说, 从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测BOOT条件,从头开始执行程序 。先将Cortex®-M4 系统控制寄存器的SLEEPDEEP位置1,再将PMU_CTL寄存器的STBMOD位置1,再清除PMU_CS寄存器的WUF位,然后执行WFI或WFE指令,系统进入待机模式。

待机模式退出:
WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、FWDGT复位可以退出待机模式。

三.GD32单片机待机模式介绍

待机模式是基于Cortex®-M4的SLEEPDEEP模式实现的。在待机模式下,整个1.2V域全部
停止供电,同时LDO和包括IRC16M、HXTAL 和 PLL 也会被关闭。进入待机模式前,先将
Cortex®-M4 系统控制寄存器的SLEEPDEEP位置1,再将PMU_CTL寄存器的STBMOD位
置1,再清除PMU_CS寄存器的WUF位,然后执行WFI或WFE指令,系统进入待机模式,
PMU_CS寄存器的STBF位状态表示MCU是否已进入待机模式。待机模式有四个唤醒源,包
括来自NRST引脚的外部复位,RTC唤醒事件,包括RTC侵入事件、RTC闹钟事件、RTC
时间戳事件或RTC唤醒事件,FWDGT复位,WKUP引脚的上升沿。待机模式可以达到最低
的功耗,但唤醒时间最长。另外,一旦进入待机模式,SRAM和1.2V电源域寄存器(除了备
份SRAM,当BLDOON置位时)的内容都会丢失。退出待机模式时,会发生上电复位,复位之后Cortex®-M4 将从0x00000000地址开始执行指令代码。

四.待机低功耗例程实验

硬件准备:
STLINK接GD32F407VET6开发板,STLINK接电脑USB口。
在这里插入图片描述

主要代码

#include "gd32f4xx.h"
#include "gd32f4xx_libopt.h"
#include "systick.h"

int main(void)
{
		int i;
    systick_config();//配置系统主频168M,外部8M晶振,配置在#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)
    rcu_periph_clock_enable(RCU_GPIOB);//使能GPIOB时钟
    gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4);//PB4配置成输出
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);//PB4配置成推挽输出,50M速度
		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);//进入待机模式
}

实验效果

LED灯会在上电1秒之后,亮灭交替闪烁10秒钟,然后停止闪烁,板子进入待机模式,
如果按板子上的唤醒按键(wk_up),板子才会重新运行,LED继续闪烁10秒钟。

GD32单片机进入低功耗前,板子功耗是60mA(包含LED灯消耗)左右。
在这里插入图片描述

10秒之后,GD32单片机进入待机状态,LED灯停止闪烁,板子功耗是6mA左右,说明进入待机状态,功耗降的比较明显,按唤醒按键(wk_up),板子又进入重新运行状态。
在这里插入图片描述

五.工程源代码下载

代码链接如下:
CSDN

六.小结

GD32单片机支持多种低功耗模式,‌包括睡眠模式、‌待机模式等,‌这些模式通过降低时钟频率、‌禁用外设和进入深度睡眠状态来实现节能。‌通过仔细选择和配置这些模式,‌可以显著减少功耗,‌从而延长设备的续航时间。‌

### 不同单片机及相关实时操作系统的概述 #### 51 单片机的技术特点与应用案例 51 单片机是一种经典的 8 位微控制器架构,广泛应用于嵌入式系统开发中。其主要特点是结构简单、成本低且易于学习,适合初学者入门。常见的应用场景包括家用电器控制、工业自动化设备中的数据采集模块以及简单的通信接口设计[^1]。 ```c #include <reg52.h> void delay(unsigned int time){ while(time--); } void main(){ P1 = 0xFF; // 初始化端口P1为高电平 while(1){ P1_0 = ~P1_0; // 反转P1.0引脚状态 delay(6000); // 延时函数调用 } } ``` 上述代码展示了如何通过编程实现 LED 的闪烁功能,在实际项目中可以扩展到更多复杂的功能实现上。 --- #### STM32 系列单片机的特点及其典型用途 STM32 是基于 ARM Cortex-M 内核的一类高性能 32MCU 家族产品线之一。它具有丰富的外设资源(如 SPI、I²C 和 USB 接口),强大的计算能力和较低功耗特性使其成为物联网(IoT)节点的理想选择对象。 下面是一个使用 HAL 库初始化串口并发送字符串的例子: ```c #include "stm32f1xx_hal.h" UART_HandleTypeDef huart1; int main(void){ HAL_Init(); MX_USART1_UART_Init(); char *msg="Hello World!"; HAL_UART_Transmit(&huart1,(uint8_t*) msg,strlen(msg),HAL_MAX_DELAY); while (1){} } static void SystemClock_Config(void){...} /* 配置系统时钟 */ static void MX_GPIO_Init(void){...} /* GPIO 初始设置 */ static void MX_USART1_UART_Init(void){...}/* USART1 UART 设置*/ ``` 此程序片段说明了利用官方提供的硬件抽象层(HAL Library),简化驱动编写过程的同时提高了可移植性和可靠性。 --- #### STM8S207 特定型号介绍及其实战经验分享 作为 STMicroelectronics 生产的一款经济高效的解决方案——STM8S207 提供高达 128KB Flash 存储空间和多种通讯协议支持选项。对于预算有限但又追求一定性能水平的应用场合非常合适,比如电机速度调节器或者环境监测仪器等领域都可见它的身影. --- #### PY32F003 芯片亮点解析 PY32F003 属于超值型系列成员之一,专为满足低成本需求而优化设计而成;尽管如此,该器件仍然保留了一些关键特性的优势,例如内置 ADC 功能用于模拟信号处理能力等方面表现出色。因此非常适合那些对价格敏感的小规模生产制造企业采用. --- #### GD32F103 性能参数对比分析 GD32F103 是由兆易创新推出的兼容性强的通用MCU平台,具备良好的性价比表现。除了常规的任务执行效率之外,还特别强调能源管理方面的改进措施,从而延长电池供电产品的续航时间。这使得它们成为了便携电子消费品市场的热门选手之一. --- #### FreeRTOS 实时操作系统基础概念讲解 FreeRTOS 是一种轻量级开源 RTOS ,专门为小型嵌入式目标构建。它允许开发者创建多任务应用程序,并提供诸如队列、互斥锁之类的同步机制来协调这些任务之间的交互行为模式。由于源码完全公开可用的缘故,所以可以根据具体项目的特殊要求自由裁剪定制版本大小以便适应不同的存储容量限制条件下的运行环境. 以下是启动两个独立任务的一个基本实例演示: ```c TaskHandle_t Task1, Task2 ; void vTaskFunction1(void *pvParameters ){ for (;;){ printf("Task1 Running\n"); vTaskDelay(pdMS_TO_TICKS(500)); } } void vTaskFunction2(void *pvParameters ){ for (;;){ printf("Task2 Running\n"); vTaskDelay(pdMS_TO_TICKS(1000)); } } int main() { xTaskCreate(vTaskFunction1,"task1",configMINIMAL_STACK_SIZE,NULL ,1,&Task1 ); xTaskCreate(vTaskFunction2,"task2",configMINIMAL_STACK_SIZE,NULL ,1,&Task2 ); vTaskStartScheduler(); return 0; } ``` --- #### μC/OS-II & III 主要区别探讨 μC/OS-II 和 μC/OS-III 同属 Micrium 开发维护的产品序列,二者均属于商业性质较强的硬实时内核类别。不过随着技术进步迭代更新之后诞生的新一代产物即 μC/OS-III,则进一步增强了原有框架下所能承载的最大优先级数量范围上限至多达 256 级别之多,同时还引入了许多现代化软件工程实践理念进去,像动态内存分配策略调整等等都是其中比较重要的改动方向所在之处. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值