历史上的今天
返回首页

历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2021年09月29日 | STM8S(105K4)使用笔记——活跃停机模式的配置与AWU唤醒

2021-09-29 来源:eefocus

STM8S提供的可编程的电源管理

等待(Wait)模式:


通过WFI指令进入。该模式下CPU将停止运行,但外设与中断控制器仍保持运行。


该模式下可以通过外设时钟门控、降低CPU时钟频率、选择低功耗时钟源(LSI,HSI)进一步降低功耗。


在等待模式下,所有寄存器与RAM的内容不变,进入等待模式前所定义的时钟配置也不会在进入等待模式后改变。


当一个内部或外部中断产生时,CPU从等待模式唤醒并恢复工作。

停机(Halt)模式:


通过HALT指令进入。该模式下主时钟停止,即由fMASTER提供时钟的CPU及所有外设均被关闭。


该模式下可以通过关闭主电压调节器、进一步降低功耗。需注意,主电压调节器关闭后,仅LSI时钟源可用,HSE时钟源对于低功耗电压调节器来说电流消耗太大。


该模式下,FLASH是处于POWERDOWN状态的,此时FLASH处于低功耗状态,唤醒时间较长。可以通过配置FLASH_CR1的HALT位置1,使FLASH在进入停机模式时处于STANDBY状态,此时FLASH处于等待状态,唤醒时间短,但功耗较高。


在等待模式下,所有寄存器与RAM的内容不变,进入停机模式前所定义的时钟配置也不会在进入等待模式后改变。


HSI RC的启动速度比HSE快,可以通过进入停机模式前将时钟切换为HSI作为fMASTER的时钟源,减少MCU的唤醒时间。


当一个外部中断产生时,CPU从停机模式唤醒并恢复工作。


活跃停机(Active Halt)模式:


使能AWU后,通过HALT指令进入。该模式下主振荡器、CPU及几乎所有外设都被停止。如果AWU和IWD已被使能,则只有LSI RC与HSE仍处于运行状态,以驱动AWU和IWD计数器。


该模式下可以通过关闭主电压调节器、进一步降低功耗。需注意,主电压调节器关闭后,仅LSI时钟源可用,HSE时钟源对于低功耗电压调节器来说电流消耗太大。


该模式下,FLASH是处于STANDBY状态的,此时FLASH处于等待状态,唤醒时间短,但功耗较高。可以通过配置FLASH_CR1的AHALT位置1,使FLASH在进入停机模式时处于POWERDOWN状态,此时FLASH处于低功耗状态,唤醒时间较长。


在活跃等待模式下,所有寄存器与RAM的内容不变,进入活跃停机模式前所定义的时钟配置也不会在进入等待模式后改变。


HSI RC的启动速度比HSE快,可以通过进入活跃停机模式前将时钟切换为HSI作为fMASTER的时钟源,减少MCU的唤醒时间。


当一个外部中断产生,或AWU中断产生时,CPU从活跃停机模式唤醒并恢复工作。


0、文章简介

本文章仅讲述活跃停机模式配置与通过AWU中断的唤醒。


1、AWU的时间间隔介绍

AWU的时间间隔取决于AWU_TBR寄存器的AWUTB[3:0]位的值与AWU_PAR寄存器的APR[5:0]位的值。


AWUTB[3:0]配置参考表

image.png?imageView2/2/w/550

APR[5:0]配置参考表

image.png?imageView2/2/w/550

时间间隔配置

假设此时fLS=128kHz,需要的时间间隔为175ms,选择时间范围应为128 ms - 256 ms

则AWUTB[3:0]的值为0b1010。

APRDIV = 175 ms × 128kHz / 2AWUTB[3:0] - 1

= 0.175 s × 128000Hz / 29

= 43.75 ≈ 44

则APR[5:0]的值为2Ah。


2、AWU的配置

进入活跃停机模式,首先需要配置AWU。


通过官方库"stm8s_awu"提供的函数初始化AWU

/**

  * @brief AWU Initialization Function

  * @param None

  * @retval None

  */

void _AWU_Init(void)

{

  /* Initialization of AWU */


  /* The delay corresponds to the time we will stay in Halt mode */

  AWU_Init(AWU_TIMEBASE_30S);

  // 官方库共提供16档预设的唤醒中断触发时长与1档无唤醒中断,作为AWU_Init()的参数,它们分别是:

  // AWU_TIMEBASE_NO_IT:无自动唤醒中断

  // AWU_TIMEBASE_250US,AWU_TIMEBASE_500US,AWU_TIMEBASE_1MS,AWU_TIMEBASE_2MS

  // AWU_TIMEBASE_4MS,AWU_TIMEBASE_8MS,AWU_TIMEBASE_16MS,AWU_TIMEBASE_32MS

  // AWU_TIMEBASE_64MS, AWU_TIMEBASE_128MS,AWU_TIMEBASE_256MS,AWU_TIMEBASE_512MS

  // AWU_TIMEBASE_1S,AWU_TIMEBASE_2S,AWU_TIMEBASE_12S,AWU_TIMEBASE_30S

}


以175 ms时间间隔为例,通过寄存器初始化AWU(可以自定义唤醒时长)

/**

  * @brief AWU Initialization Function

  * @param None

  * @retval None

  */

void _AWU_Init(void)

{

  /* Initialization of AWU */

  

  /* Set the TimeBase */

  AWU->TBR &= (uint8_t)(~0x0F);

  AWU->TBR |= 0x0A;

  

  /* Set the APR divider */

  AWU->APR &= (uint8_t)(~0x3F);

  AWU->APR |= 0x2A;

  

  /* Enable the AWU peripheral */

  AWU->CSR |= 0x10;

}


3、配置软件中断

在活跃停机模式中触发AWU中断,AWU_CSR的AWUF将会置1。

AWU_CSR的AWUF置1,将进入INTERRUPT_HANDLER(AWU_IRQHandler, 1)中断函数中,通过读取AWU->CSR寄存器清除该标志位。


/**

  * @brief Auto Wake Up Interrupt routine.

  * @param  None

  * @retval None

  */

INTERRUPT_HANDLER(AWU_IRQHandler, 1)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  /* Clear AWU peripheral pending bit */

  AWU_GetFlagStatus();

  // AWU->CSR;

}


4、低功耗可选项

主电压调节器控制

主电压调试器关闭后,功耗将进一步降低。此时仅LSI时钟可用,且CPU唤醒时长增加。

// 通过官方库"stm8s_clk"提供的函数关闭主电压调试器

/* Enable Slow Active Halt Wake Up Moed*/

CLK_SlowActiveHaltWakeUpCmd(ENABLE);

/* Disable Slow Active Halt Wake Up Moed*/

// CLK_SlowActiveHaltWakeUpCmd(DISABLE);


// 通过寄存器关闭主电压调试器

/* Enable Slow Active Halt Wake Up Moed*/

/* Set S_ACTHALT bit */

CLK->ICKR |= 0x20;

/* Reset S_ACTHALT bit */

// CLK->ICKR &= (uint8_t)(~0x20);


FLASH低功耗模式控制

活跃停机模式的默认FLASH低功耗模式为开启。此时功耗将降低,但FLASH唤醒时长增加。

// 通过官方库"stm8s_flash"提供的函数控制FLASH低功耗模式

/* Set Flash Low Power Mode To Power Down */

FLASH_SetLowPowerMode(FLASH_LPMODE_POWERDOWN);

/* Set Flash Low Power Mode To STANDBY */

//FLASH_SetLowPowerMode(FLASH_LPMODE_STANDBY);


// 通过寄存器控制FLASH低功耗模式

/* Set Flash Low Power Mode */

/* Set Flash Low Power Mode To Power Down */

FLASH->CR1 &= (uint8_t)(~0x04);

/* Set Flash Low Power Mode To STANDBY */

// FLASH->CR1 |= (uint8_t)(~0x04);


5、例程

void main(void)

{

  /*

    系统时钟配置;

    外设配置;

    ……

  */

  /* AWU configuration    ---------------------------------------- */

  _AWU_Init();

  /*

    低功耗可选项;

  */

  /* enable interrupts   ----------------------------------------- */

  enableInterrupts();

  while (1)

  {

    /*

      业务代码;

    */

  if(/* 进入低功耗条件成立 */) {

    FlagStatus flag_HaltHold = TRUE;

  }

  while (flag_HaltHold) {

    halt();

    if(/* 唤醒条件成立 */) {

      flag_HaltHold = FALSE;

    }

  }

  }

}


注意:


进入活跃停机模式后,由于IWDG基于LSI时钟,因此IWDG不会停止计数;而由于WWDG基于HSI,因此WWDG将停止计数,但仍推荐在进入活跃停机模式前,刷新WWDG计数器。


进入活跃停机模式后,GPIO的状态将保持进入活跃停机模式前的状态,这一部分的电流消耗不能忽视。若有必要,请将所有GPIO引脚设置浮空输入,进一步降低功耗。


6、AWU寄存器简介

CSR控制/状态寄存器

在这里插入图片描述

APR异步分频寄存器

在这里插入图片描述

TBR时基选择寄存器

在这里插入图片描述

推荐阅读

史海拾趣

GC Electronics公司的发展小趣事
在安装完成后,进行调试测试,确保报警电路能够在水量不足或水温异常时准确报警。
Clever Little Box公司的发展小趣事

Clever Little Box公司成立于1964年,当时正值电子行业的蓬勃发展时期。创始人凭借对音频和电子技术的深厚理解,以及对市场的敏锐洞察,决定成立这家公司,专注于音频和电子组件的分销。创业初期,公司面临着资金短缺、市场竞争激烈等诸多挑战,但创始人凭借坚定的信念和不懈的努力,逐渐在市场中站稳了脚跟。

Captive Fastener公司的发展小趣事

随着环保意识的日益增强,Captive Fastener公司积极响应国家环保政策,推动生产方式的绿色转型。公司引进先进的环保生产设备和技术,减少生产过程中的污染排放。同时,公司还研发出可回收再利用的紧固件产品,为电子行业的可持续发展做出了贡献。

BREL International Components公司的发展小趣事

BREL International Components公司深知合作共赢的重要性。公司积极与上下游企业建立紧密的合作关系,共同开发新产品、拓展新市场。通过与供应商的深度合作,BREL确保了原材料的稳定供应和成本控制;通过与客户的紧密沟通,BREL及时了解市场需求,调整产品策略。此外,BREL还积极参与行业交流和合作,与同行共同推动电子行业的发展。

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

品质是BREL International Components公司发展的基石。公司从原材料采购到生产流程控制,再到产品检测,都严格遵循国际质量标准。BREL还建立了完善的品质管理体系,通过定期的质量检查和持续改进,确保每一件产品都达到客户的要求。正是这种对品质的执着追求,让BREL的产品在市场上赢得了良好的口碑,品牌价值不断提升。

蜂鸟无线公司的发展小趣事
如自动化生产线上的传送带、机器人等自动化设备,通过PWM调速电路可以实现运动速度的精确控制,确保生产过程的稳定性和效率。

问答坊 | AI 解惑

急需!!! 可编程方案!!!

急需!!! 电子技术研发设计开发方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 邮箱 rdeasy@yahoo.cn 请注明公司全名或个人的姓,详细准确的联系方式和方案,否则不予考。 你有别的电子技术设计 ...…

查看全部问答>

哪个朋友XINLIN的VHDL程序比较厉害,,我写了个程序老有点小问题

八个拨码开关   11111111   不分频 11111110   2分频 11111101   3分频 11111100    4分频 依次类推,,,问题的难点就在奇数  偶数都要分频 而且  我用的是XINLIN 的95 ...…

查看全部问答>

ARM的大小端如何能够自己设置

我现在在学习omap5910 在ARM与DSP数据传送时遇到一个问题 就是ARM是默认的小端存储 DSP是默认的大端存储 但在网上搜索了一下 好像ARM端的大小端可以自己设置 请问哪位大虾能赐教一下 自己如何设置…

查看全部问答>

C8051F040汇编调试问题!请大家帮我看看以下程序有什么错误!我发现定时器没启动!

GREEN_LED      equ   P1.6                               ORG  00h      & ...…

查看全部问答>

TI【免费样片!高棚灯 LED 照明/化学/气体传感器/LED 阵列驱动,,立即获取!!!】

【免费样片! 数量有限, 立即获取!!!】TI整合国半(NS)后推出系列系统解决方案 从通讯、计算机、消费类电子到汽车、工业,从能源、医疗到安防、航空航天,收购国半之后的TI整合双方优势,不断提升产品结合后的总体效用,已陆续推出一系列创新、完 ...…

查看全部问答>

求大神指点。。。

基础型学习板。。。在用数据线连接电脑时,安装完驱动,电脑显示无法识别。。。。这是怎么回事????求助。。。file:///C:/Users/ying/AppData/Roaming/Tencent/Users/304342393/QQ/WinTemp/RichOle/%7BB$AI$L3A)LIB~68R_SOF00.jpg…

查看全部问答>

助力电赛|CMOS管特性探讨

•Q1和Q2组成了一个反置的图腾柱,用来实现隔离,同时确保两只驱动管Q3和Q4不会同时导通。 R2和R3提供了PWM电压基准,通过改变这个基准,可以让电路工作在PWM信号波形比较陡直的位置。Q3和Q4用来提供驱动电流,由于导通的时候,Q3和Q4相对Vh ...…

查看全部问答>

msp430f149的I2C

    430f149的I2C中写字节和读字节咋是先写和读一个字节的,完了还得写读N个字节啊,而51只是读写一个字节即可,求大家帮忙解释一下。不胜感激。…

查看全部问答>