你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM8L Active-Halt模式下的低功耗

[复制链接]
STMCU小助手 发布时间:2022-5-24 11:10
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

  1. #include "stm8l15x.h"

  2. /*******************************************************************************
  3. **函数名称:void delay(unsigned int ms)     Name: void delay(unsigned int ms)
  4. **功能描述:大概延时
  5. **入口参数:unsigned int ms   输入大概延时数值
  6. **输出:无
  7. *******************************************************************************/
  8. void delay(unsigned int ms)
  9. {
  10.   unsigned int x , y;
  11.   for(x = ms; x > 0; x--)
  12.     for(y = 1000 ; y > 0 ; y--);
  13. }

  14. /*******************************************************************************
  15. **函数名称:void ALL_GPIO_Init()
  16. **功能描述:把所有IO配置成最低功耗模式,即输出低电平,IO的功耗最低
  17. **入口参数:无
  18. **输出:无
  19. *******************************************************************************/
  20. void ALL_GPIO_Init()
  21. {
  22.      // 所有IO输出低电平
  23.     GPIO_Init(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
  24.     GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
  25.     GPIO_Init(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
  26.     GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
  27. }

  28. void RTC_Config(void)
  29. {


  30.   CLK_LSICmd(ENABLE);// 使能LSI

  31.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);// RTC时钟源LSI,1分频=38K

  32.   while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);// 等待LSI就绪

  33.   RTC_WakeUpCmd(DISABLE);

  34.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);// RTC时钟

  35.   RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);// 38K/16=2.375k=0.421ms

  36.   RTC_ITConfig(RTC_IT_WUT, ENABLE);// 开启中断

  37.   RTC_SetWakeUpCounter(2375*2);// 2375*0.421=1S左右
  38.   //ITC_SetSoftwarePriority(RTC_CSSLSE_IRQn, ITC_PriorityLevel_3);// 优先级

  39.   enableInterrupts();

  40. }

  41. int main(void)
  42. {
  43.    disableInterrupts();             // 关总中断
  44.    PWR_FastWakeUpCmd(ENABLE);       // 设置快递呼醒
  45.    RTC_Config();
  46.    ALL_GPIO_Init();
  47.    GPIO_Init(GPIOD,GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Slow);      // 初始化LED,设置PD_5为快速输出模式
  48.    enableInterrupts();              // 打开系统总中断
  49.    PWR_UltraLowPowerCmd(ENABLE);    // 超低功耗   

  50.    while(1)                        // 进入死循环等待外部中断线号4,呼醒低功耗
  51.    {
  52.      RTC_ITConfig(RTC_IT_WUT, ENABLE);// 唤醒定时器中断使能
  53.      RTC_WakeUpCmd(ENABLE);           // RTC唤醒使能
  54.      halt();  // 等待外部中断线号4,呼醒低功耗
  55.      RTC_WakeUpCmd(DISABLE);
  56.    }
  57. }
复制代码


(2)在stm8l15x_it.c加上:
  1. INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4)
  2. {
  3.     /* In order to detect unexpected events during development,
  4.        it is recommended to set a breakpoint on the following instruction.
  5.     */
  6.      RTC_ClearITPendingBit(RTC_IT_WUT);      
  7.      GPIO_ToggleBits(GPIOD,GPIO_Pin_5);   
  8. }
复制代码

(3)现象展示

  实测Active-halt睡眠模式 时为1.0uA

X}[B)SVQB{EU8L8L)ZF]9GD.png

图1 Active-Halt模式 1uA

`G`VR[I`HHYPLCAW0]`4MPG.png

图2 正常工作模式


4、总结

  以上就STM8L Active-Halt模式下的低功耗测试。


收藏 评论0 发布时间:2022-5-24 11:10

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版