[STM8] STM8L低功耗HALT模式一些总结

[复制链接]
1298|6
 楼主| lxs0026 发表于 2021-1-30 23:22 | 显示全部楼层 |阅读模式
STM8L低功耗HALT模式一些总结进入HALT注意事项
  • 将未使用到的IO口设置为输出低;
  • 关闭所有用到的外设时钟(如 ADC、USART等);
  • 失能所使用到的外设;
实测进入HALT模式待机约为0.3uA
下面列出示例代码,如有错误,还请广大网友指出。 ^_^
  1. #include "stm8l15x.h"

  2. uint8_t  sys_1ms_** = 0;
  3. uint16_t SleepTime   = 0;

  4. /*LED工作2S灭 进入HALT模式 外部唤醒 */
  5. void main(void){
  6. CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE);  /* 使能外设时钟                 */
  7. TIM4_DeInit();
  8. TIM4_TimeBaseInit(TIM4_Prescaler_8, 0xfa);               /* 16M/8/8=250K,0xfa=250,250*(1/250)=1mS */
  9. TIM4_ITConfig(TIM4_IT_Update, ENABLE);                   /* 向上溢出中断使能,中断向量号25 */
  10. TIM4_Cmd(ENABLE);                                        /* TIM4使能                     */

  11. GPIO_Init(GPIOD,GPIO_Pin_0,GPIO_Mode_Out_PP_High_Slow);  /* 初始化LED端口                */

  12. GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_PU_IT);        /* 配置GPIB PIN1脚为外部中断脚  */
  13. EXTI_DeInit ();                                          /* 恢复中断的所有设置           */
  14. EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling);/* 配置外部中断 唤醒Halt模式    */
  15.    
  16. PWR_FastWakeUpCmd(ENABLE);                               /* 快速唤醒使能                 */
  17. PWR_UltraLowPowerCmd(ENABLE);                            /* */
  18. enableInterrupts();                                      /* 开启中断总开关               */
  19. while (1){  
  20.    if(sys_1ms_**){
  21.      sys_1ms_** = 0;
  22.      GPIO_ResetBits(GPIOD, GPIO_Pin_0);
  23.      SleepTime++;
  24.      if(SleepTime==2000){
  25.        SleepTime = 0;
  26.        /* 进入HALT前 需把所有为用到的端口设置为低*/
  27.        GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
  28.        GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
  29.        GPIO_Init(GPIOC, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
  30.        GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
  31.       
  32.        /* 我的板子LED是低点亮 所以置高 */
  33.        GPIO_SetBits(GPIOD, GPIO_Pin_0);
  34.       
  35.         /* 上面把端口配置为输出低 但是不是我们想要的 所配置回来GPIB PIN1脚为外部中断脚  */
  36.        GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_PU_IT);
  37.       
  38.        /* 先失能Tim4 在禁用tim4时钟 */
  39.        /* 个人理解 先把外设时钟禁止了 那它怎么配置其他寄存器呢 不知道理解的正不正确 */
  40.        TIM4_Cmd(DISABLE);
  41.        CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,DISABLE);
  42.       
  43.        halt();        /* 进入停机模式 实测0.3uA */
  44.        nop();
  45.       
  46.        CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE);
  47.        TIM4_Cmd(ENABLE);
  48.       
  49.      }
  50.    }
  51. }
  52. }



tfqi 发表于 2021-2-5 23:22 | 显示全部楼层
楼主自己测得的电流?这么小啊
wiba 发表于 2021-2-5 23:26 | 显示全部楼层
主要的配置语句都有了
zljiu 发表于 2021-2-5 23:29 | 显示全部楼层
io不用的是设置为低?
coshi 发表于 2021-2-5 23:32 | 显示全部楼层
我也去试试看 是不是这么低
aoyi 发表于 2021-2-5 23:34 | 显示全部楼层
为什么不能设置为高阻抗呢
cvgjhuor 发表于 2021-11-10 15:57 | 显示全部楼层
给作者点赞,写的真棒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

1290

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部