大家好,我是小政。本篇文章我将针对STM8L Active-halt模式下的低功耗进行详细的讲解,让准备做低功耗产品的小伙伴能够更好的理解在STM8L低功耗模式下运行,低功耗模式主要在各类仪器仪表的内部芯片调用。
话不多说,开始今天的学习吧!
1、硬件准备
(1)所需硬件
- 芯片:STM8L152K4T6
- 供电:3.3V直流电源
(2)硬件连接:
- PD5 —— LED灯(验证)
2、STM8的低功耗模式:
Active-Halt Mode
在此模式下, 除了 RTC 外,CPU 和其他外设的时钟被停止。 系统唤醒是通过RTC 中断、外部中断或复位。
3、工程代码:
1.1 所用工具:
- IDE:IAR软件
1.2 知识概括:
- IAR软件程序编写
1.3 现象
- LED灯一秒闪烁一次,一秒钟进入低功耗模式(熄灭LED灯),一秒钟进入正常工作模式(点亮LED灯)
1.4 代码
(1)主函数:
main.c
#include "stm8l15x.h"
/*******************************************************************************
**函数名称:void delay(unsigned int ms) Name: void delay(unsigned int ms)
**功能描述:大概延时
**入口参数:unsigned int ms 输入大概延时数值
**输出:无
*******************************************************************************/
void delay(unsigned int ms)
{
unsigned int x , y;
for(x = ms; x > 0; x--)
for(y = 1000 ; y > 0 ; y--);
}
/*******************************************************************************
**函数名称:void ALL_GPIO_Init()
**功能描述:把所有IO配置成最低功耗模式,即输出低电平,IO的功耗最低
**入口参数:无
**输出:无
*******************************************************************************/
void ALL_GPIO_Init()
{
// 所有IO输出低电平
GPIO_Init(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
}
void RTC_Config(void)
{
CLK_LSICmd(ENABLE);// 使能LSI
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);// RTC时钟源LSI,1分频=38K
while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);// 等待LSI就绪
RTC_WakeUpCmd(DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);// RTC时钟
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);// 38K/16=2.375k=0.421ms
RTC_ITConfig(RTC_IT_WUT, ENABLE);// 开启中断
RTC_SetWakeUpCounter(2375*2);// 2375*0.421=1S左右
//ITC_SetSoftwarePriority(RTC_CSSLSE_IRQn, ITC_PriorityLevel_3);// 优先级
enableInterrupts();
}
int main(void)
{
disableInterrupts(); // 关总中断
PWR_FastWakeUpCmd(ENABLE); // 设置快递呼醒
RTC_Config();
ALL_GPIO_Init();
GPIO_Init(GPIOD,GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Slow); // 初始化LED,设置PD_5为快速输出模式
enableInterrupts(); // 打开系统总中断
PWR_UltraLowPowerCmd(ENABLE); // 超低功耗
while(1) // 进入死循环等待外部中断线号4,呼醒低功耗
{
RTC_ITConfig(RTC_IT_WUT, ENABLE);// 唤醒定时器中断使能
RTC_WakeUpCmd(ENABLE); // RTC唤醒使能
halt(); // 等待外部中断线号4,呼醒低功耗
RTC_WakeUpCmd(DISABLE);
}
}
(2)在stm8l15x_it.c加上:
INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
RTC_ClearITPendingBit(RTC_IT_WUT);
GPIO_ToggleBits(GPIOD,GPIO_Pin_5);
}
(3)现象展示
实测Active-halt睡眠模式 时为1.0uA
4、下载
(1)程序下载地址:
https://pan.baidu.com/s/1qyIJas0YQCZgQGjX3WlSkw
提取码:1234
5、总结
以上就STM8L Active-Halt模式下的低功耗测试。.若文章中出现错误或者小伙伴对以上内容有所疑问,欢迎大家在评论区留言,小政看到后会尽快回复大家!