STM8S 低功耗模式

功耗控制的概念调整

功耗控制之硬件调整

在硬件体系中可以有以下优化手段:

  1. 优化电路设计
  2. 优化电源供电效率(减少用于发热的能源)
  3. 调节单片机时钟频率(频率越高功耗越高)
  4. 选择单片机或者外围的工作电压(供电电压影响运行功耗,供电越大耗电越大)
  5. 管理单片机片上资源
  6. 自定义电源管理方案
  7. 管理模拟或者数字外设
  8. 配置I/O端口模式
  9. 单片机处理器选型

片上外设 影响运行功耗,针对具体的应用,编程人员往往只需要启用单片机的部分片上资源,而非全部启用,即便是全部启用了,也存在分时运行的情况。对比分析数据发现A/D转换T/C资源都是"耗电大户",片上外设消耗的电流就不能忽视,对此类资源的合理控制就显得非常必要。
STM8S 低功耗模式_第1张图片

功耗控制之软件优化

  1. 编译优化(编译器)
  2. 软件实现(软件逻辑优化)
  3. 快速短时(频率提高,处理指令的时间就减少了,一个合适的平衡点能降低功耗)
  4. 优化轮询
  5. 减少运算量(运算时是和Flash/RAM打交道,运行电流会上去)
  6. 中断处理
  7. 波特率优化
  8. 停机模式
  9. 等待模式
  10. AD采样速度
  11. 其它

在运行模式,为了即能满足系统性能又能降低功耗,选择合适的系统时钟源是很重要的。耗电量HSE>LSE>HSI>LSI,所以选择合适的时钟源能降功耗

代码执行位置影响运行功耗。代码从RAM中执行时的电源电流在其它条件参数一致的情况下比代码从Flash中执行时的电源电流要小,说明RAM存取速度快,执行效率高。

fCPU 是由 fMASTER 分频而来,可降低fCPU的时钟频率,虽然这会降低CPU的速度,但同时可降低CPU的功耗。其它外设(由fMASTER提供时钟)不会受此设置影响。

STM8单片机在低功耗上的优势

  1. STM8单片机支持宽泛的供电电压,如STM8S207/208系列单片机为例,其供电电压支持2.95V5.5V,其中就包含常见的3.3V5.0V的供电电压标准,选取3.3V电压供电时功耗与5.0V相比会有所下降
  2. STM8单片机具备灵活的模拟性能,有各种不同的输入输出模式,每种模式的电气特性皆不相同,针对具体的需求,用户可以配置特定的GPIO模式以实现功能,对于闲置未启用的GPIO也可以配置相应的端口模式以降低功耗。
  3. STM8单片机支持多种电源管理方式,STM8单片机可以配置为运行模式等待模式活跃停机模式停机模式等(耗电量从大到小),灵活多变的运行模式为单片机功耗调整提供了支持
  4. STM8单片机拥有多样的时钟源外设时钟门控功能,各种时钟源的运行参数均不相同,功耗参数自然也不一致,时钟源的多样性就能尽量满足用户的功耗需求(HSE耗电比HSI多)。外设时钟门控功能可以管理片上数字资源和时钟的连接,从而控制外设资源电流消耗。

为什么S系列能够使用低功耗模式了,ST还要推出L系列?

答:L系列有"超低漏电流",漏电流指的是晶元的静态电流,能到零点几个微安。

STM8低功耗运行模式

STM8单片机拥有出色的电源管理模式,可配置单片机运行状态如下:

  1. 等待模式(Wait)
  2. 活跃停机模式(Active-Halt):可配置为慢速或快速唤醒
  3. 停机模式(Halt):可配置为慢速或快速唤醒

用户可合理选择以上三种模式中的一种,在最低功耗、最快唤醒速度和可使用的唤醒源之间获得最佳平衡点
STM8S 低功耗模式_第2张图片
程序(IAR)上模式的切换(以下为STM8单片机专用中断指令):

#define wfi()   __wait_for_interrupt() /* Wait For Interrupt */
#define halt()  __halt()               /* 活跃停机模式 */
#define halt()  __halt()               /* 停机模式 */

用相同的指令halt()的时候,怎么区分是活跃停机还是停机模式?答:如果在执行这条指令之前,开启了AWU这个功能,那么就是切换到活跃停机模式;否则就是停机模式。

自动唤醒AWU结构及配置

问题:

  1. AWU单元的具体结构是什么样子?
  2. 各种分频参数和时钟选择是什么样的操作顺序?
  3. 什么时候会触发AWU的中断?

AWU结构

  • CKAWUSEL=CK+AWU+SEL(select),AWU时钟选择
  • 默认情况下,由于CKAWUSEL位为0,所以选择的是LSI作为AWU的时钟
  • fLS != fLSI,而是经过前面选择后得到128KHz的时钟
  • 通过HSE分频得到的128KHz可能比较精确,但是LSI有12.5%的误差,不一定是准确的,所以fLS右边有个分支,合上开关后,引入到定时器里,测得周期,判断是不是128KHz,如果不是,会对频率进行一定的修正。(不过一般不会去修正)

STM8S 低功耗模式_第3张图片

  • 这里由于使AWU_CSR中的"AWUEN"位为1了,所以后面执行HALT指令时,单片机会进入活跃停机状态

STM8S 低功耗模式_第4张图片
AWU结构树涉及到的三大寄存器如下:

  1. AWU_CSR:控制/状态寄存器,判断fLS的精度
  2. AWU_APR:异步预分频寄存器
  3. AWU_TBR:时基选择寄存器

控制/状态寄存器(AWU_CSR)

STM8S 低功耗模式_第5张图片

异步预分频寄存器(AWU_APR)

STM8S 低功耗模式_第6张图片

APR分频参数表

STM8S 低功耗模式_第7张图片

时基选择寄存器(AWU_TBR)

STM8S 低功耗模式_第8张图片

AWU唤醒时间计算参考

STM8S 低功耗模式_第9张图片
例题:
STM8S 低功耗模式_第10张图片
用C程序的配置如下:
算出来48这个值还要去查APR分频参数表,查到对应的值为2E,官方开发手册直接赋值算出来的数的做法是错的。

AWU_APR=0x2E; //配置预分频值,不是0x30
AWU_TBR=0x05; //配置AWU唤醒时间间隔
AWU_CRS |= 0x10;//使能"AWUEN"位,启动AWU
halt();

你可能感兴趣的:(STM8S实践,单片机,stm32,嵌入式硬件)