RISC-V MCU应用教程之PWR睡眠模式

简介

CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列具有1路USB2.0主机/设备接口、多通道12位ADC转换模块、多通道TouchKey、多组定时器、多路IIC/USART/SPI接口等丰富的外设资源。
本章教程主要讲述如何控制CH32V103进入睡眠模式以及对其进行中断唤醒操作。

1、PWR-睡眠模式简介及相关函数介绍
在系统复位后,微控制器处于正常工作状态(运行模式),此时可以通过降低系统主频或者关闭不用外设时钟或者降低工作外设时钟来节省系统功耗。如果系统不需要工作,可设置系统进入低功耗模式,并通过特定事件让系统跳出此状态。

微控制器目前提供了 3 种低功耗模式,从处理器、外设、电压调节器等的工作差异上分为:
睡眠模式:内核停止运行,所有外设(包含内核私有外设)仍在运行。
停止模式:停止所有时钟,唤醒后系统继续运行。
待机模式:停止所有时钟,唤醒后微控制器复位(电源复位)。

在睡眠模式下,所有的IO引脚都保持他们运行模式下的状态,所有的外设时钟都正常,所以进入睡眠模式前,尽量关闭无用的外设时钟,以减低功耗。该模式唤醒所需时间最短。

进入睡眠模式:配置内核寄存器控制位 SLEEPDEEP=0(PFIC系统控制寄存器(PFIC_SCTLR)位2,SLEEPDEEP,控制系统的低功耗模式:1为deepsleep,0为sleep),电源控制寄存器 PDDS=0,LPDS 决定内部调压器状态,执行WFI或WFE,可选SEVONPEND 和SLEEPONEXIT(可配合CH32V103应用手册第二章PWR章节寄存器描述和第九章中断和事件进行阅读理解)。

退出睡眠模式:任意中断或者唤醒事件。

关于WFI和WFE方式:
WFI:微控制器被具有中断控制器响应的中断源唤醒,系统唤醒后,将最先执行中断服务函数(微控制器复位除外)。
WFE:唤醒事件触发微控制器将退出低功耗模式。唤醒事件包括:
(1)配置一个外部或内部的 EXTI 线为时间模式,此时无需配置中断控制器;
(2)或者配置某个中断源,等效为 WFI 唤醒,系统优先执行中断服务函数;
(3)或者配置 SLEEPONPEN 位,开启外设中断使能,但不开启中断控制器中的中断使能,系统唤醒后需要清除中断挂起位。

关于SLEEPONEXIT(PFIC系统控制寄存器PFIC_SCTLR位1,控制离开中断服务程序后,系统状态。1:系统进入低功耗模式;0:系统进入主程序)和SEVONPEND(PFIC系统控制寄存器PFIC_SCTLR位4),可配合CH32V103应用手册第九章中断和事件寄存器描述进行阅读理解:
SLEEPONEXIT:启用:执行 WFI 或 WFE 指令后,微控制器确保所有待处理的中断服务退出后进入低功耗模式。
不启用:执行 WFI 或 WFE 指令后,微控制器立即进入低功耗模式 。
SEVONPEND:启用:所有中断或者唤醒事件都可以唤醒通过执行WFE进入的低功耗。
不启用:只有在中断控制器中使能的中断或者唤醒事件可以唤醒通过执行 WFE 进入的低功耗。

关于CH32V103 PWR睡眠模式具体信息,可参考CH32V103应用手册。CH32V103 PWR标准库函数具体内容如下:

 

 

2、硬件设计
单片机进入睡眠模式之后,需要对其进行中断唤醒,此时将开发板PA0引脚与3.3V引脚连接即可进行中断唤醒。

3、软件设计
本章教程在第四章EXTI基础上进行单片机睡眠模式唤醒,通过PA0接GND进入中断对睡眠模式进行唤醒,关于EXTI部分程序在此不再介绍,主要介绍如何进入睡眠模式并对其进行中断唤醒,其具体程序如下:
main.c文件

 

 

4、下载验证
将编译好的程序下载到开发板并复位,串口打印情况具体如下:

 

由上图可知,单片机进入睡眠模式,将PA0引脚与3.3V引脚连接,串口打印如下:

 

posted @   Zhu_zzzzzz  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示