23 LPM 低功耗软件待机模式

开发板官网(https://www.edevkit.com/)
本系列教程目录:
- 瑞萨单片机开发教程[一] e2-studio + DAP LINK开发环境搭建
- 瑞萨单片机开发教程[二] Keil/RASC开发环境搭建
- 瑞萨单片机开发教程[三] 新建RASC工程
- 瑞萨单片机开发教程[四] GPIO输出——led实验
- 瑞萨单片机开发教程[五] GPIO输入——按键key实验
- 瑞萨单片机开发教程[六] ICU外部中断实验
- 瑞萨单片机开发教程[七] SCI UART串口通信实验
- 瑞萨单片机开发教程[八] DMAC 串口数据传输实验
- 瑞萨单片机开发教程[九] ADC 电压采集实验
LPM 低功耗软件待机模式实验
本章目标:
- 了解 RA6M5 处理器的低功耗及其工作原理;
- 学会使用 RASC 配置低功耗软件待机模式、使用 API 函数;
硬件设计
(略,参见配套硬件原理图)
软件设计
新建工程
复制一份“07 SCI_UART_Recv_send”并修改文件夹名为“21 LPM_SoftwareStandby_Mode”,双击打开“EBF_RA6M5.uvprojx”工程,通过 Keil 的新建文件新建“lpm_software.c”和“lpm_software.h”,保存到工程目录下的 \src 文件夹下。
FSP 配置
Keil 界面选择“Tools”→“RA Smart Configurator”打开 RASC 界面。
添加 LPM Stack 模块。

设置 LPM 属性
设置名称和软件待机模式,在“wake sources”选择唤醒中断。

- Standby Limit:待机限制,如果配置为 Enabled,只能使用
R_LPM_LowPowerModeEnter进入待机模式。 - Low Power Mode:低功耗模式选择,可选:
- 睡眠模式(Sleep mode)
- 软件待机模式(Software standby mode)
- 贪睡模式(Snooze mode)
- 深度软件待机模式(Software standby mode)
- Output port state in standby and deep standby:选择待机期间输出引脚的状态,适用于地址输出、数据输出等总线控制输出引脚。
- 选择 No change 则不改变输出引脚状态
- 选择 High impedance state 则输出引脚为高阻态
配置完成之后可以按下快捷键“Ctrl + S”保存,最后点击“Generate Project Content”按钮,让软件自动生成配置代码即可。
程序设计
设计程序,在循环中翻转 LED 灯后进入睡眠模式,等待按键中断唤醒程序,按一次按键中断唤醒程序接着循环翻转 LED,观察现象。
- 打开低功耗模块
R_LPM_Open(sleep.p_ctrl, sleep.p_cfg);
- 进入睡眠模式
R_LPM_LowPowerModeEnter(sleep.p_ctrl);
程序编写
在 lpm_software.h 头文件里定义初始化函数、测试函数。
#ifndef __BSP_LPM_SOFTWARE_H
#define __BSP_LPM_SOFTWARE_H
#include "hal_data.h"
void lpm_software_Init(void);
void lpm_software_led_test(void);
#endif
在 lpm_software.c 里实现初始化函数、测试函数。
#include "lpm_software.h"
#include "led.h"
#include "stdio.h"
//初始化
void lpm_software_Init(void)
{
R_BSP_PinAccessEnable();
R_LPM_Open(Software.p_ctrl, Software.p_cfg);
}
//软件待机模式测试
void lpm_software_led_test(void)
{
LED1_TOGGLE();
printf(" mcu enter Software Standby mode\r\n");
R_LPM_LowPowerModeEnter(Software.p_ctrl);
printf(" mcu exit Software Standby mode\r\n");
}
在 hal_entry.c 文件中添加头文件 lpm_software.h,在 hal_entry 入口函数中初始化。
void hal_entry(void)
{
/* TODO: add your own code here */
led_Init();
uart0_Init();
key_Init();
key_IRQ_Init();
lpm_software_Init();
LED1_ON();
R_BSP_SoftwareDelay(3, BSP_DELAY_UNITS_SECONDS);
while(1)
{
lpm_software_led_test();
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
下载验证
连接下载器,将程序编译并下载到开发板之后,按下复位按键来复位开发板,程序启动初始化完成后,观察实验结果。
LED 灯亮 3s 后,串口打印“mcu enter Software Standby mode”,进入软件待机模式,按下按键,唤醒程序接着运行打印“mcu exit Software Standby mode”,多次按键,LED 灯翻转;
