STM8 低功耗设计

1.STM8 的几种低功耗模式
1、等待模式:可执行指令wif()进入等待模式,该模式下主CPU停止工作,但其外设不停,严格来说只能算是降低功耗而不能算低功耗,该模式可由AMU或外部中断唤醒
2、停机模式:可执行指令half()进入停机模式,该模式下主cpu和外设全部停止,达到最低功耗,只能由外部中断进行唤醒。
3、快速活跃停机模式:在执行指令half()之前,如果你使能了AMU功能,则进入快速活跃停机模式,该模式下由于主电压调节器打开,在受到AMU或外部中断触发时,可快速唤醒。
4、慢速活跃停机模式:在快速活跃停机模式下,如果设置内部时钟寄存器CLK_ICKR的REGAH位清零。则进入慢速活跃停机模式,该模式主电压调节器关闭,MCU内核由低功 耗电压调节器(LPVR)供电,唤醒时间相对较长。
在这里插入图片描述
2.代码测试
项目所用单片机型号:stm8L051
测试的模式:快速活跃停机模式
描述:采用RTC时钟定时唤醒系统

代码如下:

/************************************************
函数名称 : RTC_Config
功 能 : RTC时钟初始化
参 数 : 无
返 回 值 : 无
作 者 : liangjia
*************************************************/
void RTC_Config(uint16_t time)
{
RTC_DeInit(); //初始化默认状态
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); //允许RTC时钟
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_2); //选择RTC时钟源LSI、2=19K
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //19k/16=1.1875KHz t=0.85ms
RTC_ITConfig(RTC_IT_WUT, ENABLE); //开启中断
RTC_SetWakeUpCounter(time); //设置RTC Weakup计算器初值
RTC_WakeUpCmd(ENABLE); //使能自动唤醒
}

/************************************************
函数名称 :Sys_Close()
功 能 :系统时钟和外设关闭
参 数 : 无
返 回 值 : 无
作 者 : liangjia
*************************************************/
void Sys_Close()
{
//关闭不需要的时钟
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM3,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,DISABLE);

CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_USART1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_DMA1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_I2C1,DISABLE);

//关闭不需要的外设IO
//IO配置为输出
GPIO_Init(GPIOA, GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_Out_PP_High_Fast);

//IO配置为输出低(注意低电平使能的得设置为输出高)
GPIO_WriteBit(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3, RESET);
GPIO_WriteBit(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, RESET);
GPIO_WriteBit(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6, RESET);
GPIO_WriteBit(GPIOD, GPIO_Pin_0, RESET);
}

/************************************************
函数名称 : Sys_Open()
功 能 ?/所用系统相关配置开启
参 数 : 无
返 回 值 : 无
作 者 : liangjia
*************************************************/
void Sys_Open()
{
USART_DeInit(USART1);
TIM1_DeInit();

System_Initializes();
enableInterrupts();
MFRC522_Init();
   
EN485_Recevie_ON;
GET_DeviceAddress();
App_Init();
enableInterrupts();

}

main函数调用
使用前先配置RTC时钟
//0.85msx1176
RTC_Config(1176);
在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值