打印
[STM8]

Stm8L系列单片机的低功耗

[复制链接]
841|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晓伍|  楼主 | 2021-6-4 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Stm8L系列单片机的低功耗有五种模式:

wait模式

Low power run模式

Low power wait模式

Active-halt with full RTC模式

Halt模式

最低功耗的就是就是halt模式。这里也主要总结一下如何进入halt模式,进入以后可以通过什么方式唤醒,以及有很多客户会关心的如何自动唤醒。

Halt模式进入很简单,执行一条halt指令,调用库函数也就是halt()就行了。但是进入前要注意把所有的中断挂起标志给清除掉。要是不清零又恰巧有中断标志的时候进入该模式也会被立马唤醒。进入这种模式,所有的外设全都关闭了,所有时钟关闭。这时候它自己是醒不过来的,只能靠掐人中(给个外部中断)或者重新复活(重启复位)。当然这个在进入halt之前是要把中断引脚什么的该配置的给配置好了。

那现在有个问题就是在halt模式下只能通过外部中断和复位了,我需要它自动醒过来怎么办?那就在进入的时候定个闹铃了(打开rtc),到点了就要醒过来。既然开了闹铃了它也就不是纯halt模式了。这时候也就叫做active-halt模式。Active-halt模式下可以打开个rtc和lcd。这里要说明一下,在stm8s和stm8l101xx系列里面有AWU自动唤醒寄存器。



Halt模式下设置,达到0.4uA


I/O口设置,没有其它外设下,不用的IO口全部拉低输出,用到的IO口按使用情况设置,GPIO_Mode_In_PU_No_IT,与GPIO_Mode_In_Fu_No_IT,对GPIO的配置,功耗也是有差别的,各位各自去体会吧,哈哈。且主时钟默认是2MHz。


使用特权

评论回复
沙发
晓伍|  楼主 | 2021-6-4 21:32 | 只看该作者
void GPIOInit(void)

{
      GPIO_TypeDef GPIO_Struct;



      GPIO_DeInit(&GPIO_Struct);



      GPIO_Init(GPIOB,GPIO_Pin_0  | GPIO_Pin_3|GPIO_Pin_5 | GPIO_Pin_6,GPIO_Mode_Out_PP_Low_Fast);

      GPIO_Init(GPIOB,GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_7,GPIO_Mode_In_PU_No_IT);

      GPIO_Init(GPIOB,GPIO_Pin_4,GPIO_Mode_Out_PP_Low_Fast);



      GPIO_Init(GPIOD,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_Low_Fast);        

      //GPIO_ExternalPullUpConfig(GPIOC,GPIO_Pin_2 | GPIO_Pin_3,ENABLE);

      //GPIO_Init(GPIOD,GPIO_Pin_6 |GPIO_Pin_7 ,GPIO_Mode_Out_PP_High_Fast);        



      GPIO_Init(GPIOC,GPIO_Pin_4,GPIO_Mode_In_PU_No_IT); //RF_IRQ

      GPIO_Init(GPIOC,GPIO_Pin_0 | GPIO_Pin_6,GPIO_Mode_Out_PP_High_Fast); //MOSI 备用

      GPIO_Init(GPIOC,GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7,GPIO_Mode_Out_PP_High_Fast);



      GPIO_Init(GPIOA,  GPIO_Pin_4|GPIO_Pin_5 |GPIO_Pin_6 , GPIO_Mode_In_PU_No_IT); //KEY

      GPIO_Init(GPIOA,  GPIO_Pin_0|GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3|GPIO_Pin_7 , GPIO_Mode_Out_PP_Low_Fast);



      PD_ODR_ODR0=0; //oled_ce      

}



int main( void )

{  

   asm("sim");   //全局中断关



   GPIOInit();   //IO初始化



asm("rim");   //全局中断开启

   CLK_DeInit();

   PWR_UltraLowPowerCmd(ENABLE);

    halt();

    /*infinite loop begin*/

while(1);

此设置下STM8L151芯片功耗达到0.4uA,无其它外设的初始化


使用特权

评论回复
板凳
god9987| | 2021-6-5 09:56 | 只看该作者
学习学习!

MARK:Stm8L系列单片机的低功耗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

4113

帖子

1

粉丝