【STM8L】Active-Halt模式下的低功耗

1 篇文章 0 订阅
1 篇文章 0 订阅

  大家好,我是小政。本篇文章我将针对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

在这里插入图片描述

图1 Active-Halt模式 1uA

在这里插入图片描述

图2 正常工作模式

4、下载

(1)程序下载地址:
https://pan.baidu.com/s/1qyIJas0YQCZgQGjX3WlSkw
提取码:1234

5、总结

  以上就STM8L Active-Halt模式下的低功耗测试。.若文章中出现错误或者小伙伴对以上内容有所疑问,欢迎大家在评论区留言,小政看到后会尽快回复大家!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁乎乎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值