STM8电源模式管理及功耗控制

一、功耗控制调整

1、硬件功能调整

STM8电源模式管理及功耗控制_第1张图片

2、软件功能调整

STM8电源模式管理及功耗控制_第2张图片

3.经验

  • 3.3V供电比5V更省电
  • HSI比HSE更省电
  • 晶振频率越低越省电
  • 读写RAM比FLASH更省电
  • 片上资源会影响功耗,不用的应该用PCG功能关掉。

STM8电源模式管理及功耗控制_第3张图片

二、电源管理

STM8电源模式管理及功耗控制_第4张图片

怎么进入模式?

进入等待模式:asm("WFI");

进入活跃停机模式:asm("HALT"); //开启AWU再执行此句会进入活跃停机

进入停机模式:asm("HALT"); //没有开启AWU再执行此句会进入停机

三、自动唤醒AWU结构和配置

自动唤醒单元用于单片机活跃停机模式,

1、时钟源

AWU可以选用两个时钟源:LSI和HSE

通过选项字节OPT4中的“CKAWUSEL”位来选择:

置0 ==》LSI (默认);

置1 ==》HSE。

2、时钟源分频系数

通过选项字节OPT4中的“PRSC[1:0]”位来选择:

STM8电源模式管理及功耗控制_第5张图片

通过1、2步的设置得到1个粗略的时钟LS

3、修正时钟频率(不常用)

使用AWU_CSR控制/状态寄存器中的“MSR”位和TIM3或者TIM1的输入捕捉通道1来检测LS的时钟频率,发现误差则通过重新配置异步预分频器AWU_APR中的APR[5:0]来进行定时时间修正。

STM8电源模式管理及功耗控制_第6张图片

4、配置异步预分频器

配置异步预分频器AWU_APR中的APR[5:0]来配置适当的分频值

APR :预分频系数

STM8电源模式管理及功耗控制_第7张图片

STM8电源模式管理及功耗控制_第8张图片

5、写时基选择寄存器

写时基选择寄存器AWU_TBR中的AWUTB[3:0]来选择需要的自动唤醒延时间隔

AWUTB: 时间间隔

STM8电源模式管理及功耗控制_第9张图片

STM8电源模式管理及功耗控制_第10张图片

到底该怎么设置??

参考这张表:

STM8电源模式管理及功耗控制_第11张图片

比如:我们想设置6ms定时,则查表可得:AWUTB=0101

根据计算公式:3秒=

v2-b6e4458c9b53e00e98b55dee41443648_b.png

其中fLS=128000,则可以计算出:APR=48

再查APR表

v2-1258ed38ac9c9d7b7313bd1048356057_b.png

确定APR应赋值2E

6、控制位使能

置位控制/状态寄存器(AWU_CSR)的AWUEN位

STM8电源模式管理及功耗控制_第12张图片

7、执行HALT命令进入活跃停机

        
          asm
          (
          "HALT"
          );
        
      

四 具体操作如下

① 开启LSI,同时设置快速唤醒功能,此两个功能都在CLK_ICKR寄存器中.

        CLK_ICKR|=0x0C;  //打开LSI时钟,从活跃停机模式快速唤醒使能
      

② 确定FLASH进入活跃停机后是否掉电

        FLASH_CR1&=0x0B; //活跃停机模式下Flash不掉电
      

③ 设置预分频值

        AWU_APR=0x26;    //配置预分频值
      

④ 设置AWU唤醒时间间隔

        AWU_TBR=0x0C;    //配置AWU唤醒时间间隔
      

⑤ 使能AWU

        AWU_CSR1|=0x10;  //使能“AWUEN”启动AWU
      

⑥ 进入活跃停机模式

        asm("HALT");
      

⑦ 如果写了活跃停机的唤醒中断,会在醒来时触发,所以应该写一个中断响应函数

        #pragma vector=3
__interrupt void AWU_IRQHandler(void)//自动唤醒AWU中断函数
{  
  //此处写中断响应函数
  AWU_CSR1|=0x10;//继续使能AWU
  //asm("HALT");
}
      

可以把前几步写作一个初始化函数:AWU_init()

        void AWU_init(void)
{
  CLK_ICKR|=0x0C;  //打开LSI时钟,从活跃停机模式快速唤醒使能
  FLASH_CR1&=0x0B; //活跃停机模式下Flash不掉电
  AWU_APR=0x26;    //配置预分频值
  AWU_TBR=0x0C;    //配置AWU唤醒时间间隔
  AWU_CSR1|=0x10;  //使能“AWUEN”启动AWU
}
      

你可能感兴趣的:(STM8电源模式管理及功耗控制)