STM8L151C8学习笔记5:低功耗

发布者:幸福时光最新更新时间:2022-01-12 来源: eefocus关键字:时钟  低功耗 手机看文章 扫描二维码
随时随地手机看文章

一、低功耗模式介绍

根据STM8L15X的数据手册,可以知道该芯片有5种低功耗模式,如下:


1.等待模式: CPU时钟停止,选择的外设可继续运行,内部或外部中断或复位信号都可退出等待模式(WFE或WFI模式)。


2.低功耗运行模式: CPU和选择的外设在运行,由低速RAM或低速振荡器(LSI或LSE)执行完成。停止了闪存(flash memory)和EEPROM数据存储器,配置稳压器为超低功耗模式。单片机可通过软件进入低功耗运行模式,也可通过软件或复位退出该模式。


3.低功耗等待模式: 在低功耗运行模式下执行等待事件时进入此模式。除了CPU时钟被停止了,它和低功耗运行模式差不多。单片机可通过复位或内部或外部事件(由定时器、串行接口DMA控制器(DMA1)、比较器和I/O端口生成的外设事件)触发唤醒此模式,当唤醒被其中一个事件触发时,系统会回到低功耗运行模式。


4.活跃停机模式: 除了RTC外,CPU和外设时钟停止。唤醒可由RTC中断、外部中断或复位触发。


5.停机模式: CPU和外设时钟停止,设备保持开机状态。RAM内容被保存,唤醒可由外部中断或复位来触发。一些外设也有从停止模式中唤醒的能力。可关闭内部参考电压来减少功耗。通过软件配置,也可在不等待内部参考电压唤醒时间的情况下唤醒设备,使其在5us后快速唤醒。

在这里插入图片描述

二、工程要求

1.低功耗模式,PB1口输入电压为0的时候,系统处于低功耗模式。


2.工作模式,PB1口输入电压大于某个值时,系统处于工作模式。


这里只是初步要求,后面可能要用RTC时钟来唤醒并发送信息(电池电量等)。


三、实现思路

初步思路:PB1对应的ADC采集口,一直处于开启状态,当采集值超过某个值时,唤醒进入工作模式,否则处于低功耗状态,但是从停机模式唤醒,这需要中断来触发。


而从数据手册得知,ADC中断无法唤醒Halt模式,所以这个思路行不通。

在这里插入图片描述

而在标准固件库看STM8的例程时,找到了一个通过COMP外设来唤醒的实例(COMP/COMP1_Halt):


This example shows how to configure the COMP peripheral to exit MCU from Halt mode. 

这个例子展示了如何配置COMP外围设备使MCU从Halt模式退出。

When the user presses the key push-button, the MCU enters Halt mode. 

当用户按下按键时,单片机进入停止模式。

And when the comparator 1 non inverting input (which is connected to the potentiometer) exceeds the internal reference voltage which is set to 1.22V,

当比较器1的非反相输入(连接到电位器)超过内部基准电压设置为1.22V时,

the comparator 1 causes the CPU to exit halt mode.

比较器1会使CPU退出halt模式。


COMP中断能够唤醒Halt模式,其中PB1也是连接至COMP1+的一个I/O口。

在这里插入图片描述

最终思路:利用COMP进行比较,比较器1的同相端(+)连接至PB1,反向端连接至 VREFINT ,其中 VREFINT 为内部基准电压1.22V,COMP1寄存器中CMP1OUT标志位:当非反相输入电压低于反相输入电压时,比较器1的输出低,该标志位为0;当非反相输入比反相输入电压高时,比较器1输出高,该标志位为1。所以我可以通过比较器输出标志来判断是否开启工作模式,而唤醒由COMP中断来完成,其触发方式为上升沿事件检测。

在这里插入图片描述

四、具体代码:

1.COMP1配置

根据数据手册中的Comparator block diagram和I/O groups and selection (continued),可知要想将PB1连接至COMP1+,将VREFINT 连接至COMP1-:


首先需要将PB1对应的I/O switches通道18打开。

在这里插入图片描述

接着开启模拟开关AS5和AS14,将PB1连接至COMP1+。


使能VREFINT 连接COMP1-的函数。


设置上升沿触发中断。

在这里插入图片描述

static void COMP_Config(void)

{

  /*PB1*/

  /* close the I/O switch number 4 */

  SYSCFG_RIIOSwitchConfig(RI_IOSwitch_18, ENABLE);

  /* close the analog switch number 14 */

  SYSCFG_RIAnalogSwitchConfig(RI_AnalogSwitch_14, ENABLE);

  /* close the analog switch number 1 */

  SYSCFG_RIAnalogSwitchConfig(RI_AnalogSwitch_5, ENABLE);

  /* Connect internal reference voltage to COMP1 inverting input */

  COMP_VrefintToCOMP1Connect(ENABLE);

  /* Enable COMP1 Interrupt */

  COMP_ITConfig(COMP_Selection_COMP1, ENABLE);

  /* Configure the event detection */

  COMP_EdgeConfig(COMP_Selection_COMP1, COMP_Edge_Rising);

}


2.工作模式切换

工作模式切换主要用了stm8l15x_comp.c中的COMP_GetOutputLevel()函数来判断当前处于什么状态,低功耗模式因为还没有仪器进行测量,现在只是单纯进入停机模式,可在停机前加上关闭所有外设,拉低所有I/O口等等操作,从停机模式唤醒后可以再对相应外设进行初始化。


这里需要注意的是:ADC和COMP1无法同时使用,因为它们共享同一组模拟开关,所以用到ADC的时候,需要关闭COMP,而停机前需关闭ADC,再开启COMP。


/**

  * @brief  Main program.

  * @param  None

  * @retval None

  */

void main(void)

{

   /* CLK configuration -------------------------------------------*/

  CLK_Config(); 

  /* Key button configuration */

  Key_Init();

  /* Initialize Leds,OLED */

  Led_Init();

  OLED_Init();

  OLED_Clear();

  OLED_ShowString(0,0,"  Hello World!");

   /* COMP configuration -------------------------------------------*/

  COMP_Config(); 

  /* Enable Interrupts */

  enableInterrupts();


  GPIO_SetBits(LED_PORT,LED2);

  /* Infinite loop */

  while (1)

  {

    if (COMP_GetOutputLevel(COMP_Selection_COMP1) == COMP_OutputLevel_High)

    {

    //工作模式:

      /* A rising edge is detected so the input voltage is over VREFINT

       and the ADC will be turned on for monitoring input voltage, the COMP2 will be off */

      GPIO_SetBits(GPIOA,GPIO_Pin_6);

       /* Toggle LDE1..4 */

      GPIO_ToggleBits(LED_PORT,LED2);

      /* Insert delay */

      Delay_ms(50);

      if(Flash_Flag)    LED_Flash();

      /*KEY*/

      Key_Function();

      /*DISPLAY*/

      System_Display();

    }

    else

    {

    //低功耗模式:

      //关闭所有外设(除了COMP),将所有IO口拉低,

      halt();

      //开启相关外设及初始化。

    }

    

  }

}


五、总结

现在还是初步探索STM8低功耗模式,STM8系列单片机主打的就是低功耗,这里面感觉学问还是挺多的,后面可能还有学一下RTC时钟唤醒停机模式(也就是活跃停机模式)。这次也提醒我,当思路遇阻时,可以看看官方固件库例程,所有的外设都有相应的例程,可以从其中来找到新的办法,如果只是对代码的一味地移植,学到的东西没有这条途径多,所以可以多看看数据手册和官方固件库中给的例程。


关键字:时钟  低功耗 引用地址:STM8L151C8学习笔记5:低功耗

上一篇:STM8L151C8学习笔记2:KEY驱动
下一篇:STM8L151C8学习笔记4:ADC驱动

推荐阅读最新更新时间:2024-11-08 11:40

利用低抖动LVPECL扇出缓冲器增加时钟源的输出数
电路功能与优势 许多系统都要求具有多个低抖动系统时钟,以便实现混合信号处理和定时。图1所示电路将ADF4351集成锁相环(PLL)和压控振荡器(VCO)与ADCLK948接口,后者可通过ADF4351的一路差分输出提供多达八路差分、低电压正射极耦合逻辑(LVPECL)输出。     现代数字系统经常要求使用许多逻辑电平不同于时钟源的高质量时钟。为了确保在不丧失完整性的情况下准确地向其它电路元件配电,可能需要额外的缓冲。此处介绍ADF4351时钟源和ADCLK948时钟扇出缓冲器之间的接口,并且测量结果表明与时钟扇出缓冲器相关的加性抖动为75 fs rms. 电路描述 ADF4351是一款宽带PLL和VCO,由三个独立的多频段VC
[电源管理]
利用低抖动LVPECL扇出缓冲器增加<font color='red'>时钟</font>源的输出数
STM32L0低功耗设计5: STOP_RTC模式的真实功耗
本例程测试STOP_RTC模式的真实功耗,主程序如下: int main(void) { while(1) { HAL_Delay(5000); Target.HAL.Rtc.EnterStopRtcMode(); Target.HAL.SystemClock.SetMode(2); } } 系统进入主循环后,先进行5秒延时,然后进入低功耗模式,低功耗模式设置的RTC时间为4秒,4秒过后退出低功耗模式,重新进行时钟设置。 在进入main函数之前,执行了3个操作:时钟设置、低功耗设置和RTC设置,如下面程序: class CHAL { public: CSystemClock SystemC
[单片机]
ARM 时钟小结
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。   ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。   ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。   ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。   ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。   ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。   其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟
[单片机]
Intersil发布新系列低功耗40V精密运算放大器
Intersil公司(纳斯达克全球精选市场交易代码:ISIL)今天宣布推出ISL28117和ISL28217,为其快速增长的双极性低功耗精密运算放大器系列增加了两个新成员。 这两款产品理想地组合了低噪声和低功耗,以及低偏置电压、低偏置电流漂移和在工作温度范围内的最小零点漂移。这些产品非常适合对各种各样精密模拟信号进行调理的应用,这些应用需要减小功耗、高DC精度和AC性能。 与现有的竞争方案相比,ISL28117和双通道的ISL28217通过采用更低的噪声、更低的偏置电压、更低的偏置电流和更高的增益精度,从而降低信号调理误差。这些放大器实现了对宽共模电压信号的高增益处理,而精度则远优于竞争方案。
[新品]
Intersil发布新系列<font color='red'>低功耗</font>40V精密运算放大器
自学单片机编程之中断与时钟程序
对于我以前学习过的东西以周记的形式进行总结整理! 不喜勿喷!有好的建议或资料请@我! 在懂了数码管的工作原理和控制原理之后,我们现在可以正式编写时钟程序了,所谓时钟就是几点几分几秒用八位数码管显示出来,只是它会跳动显示的数值随时间变化而变化。一开始我使用的延迟写的时钟,每过1s数码管的秒加一,通过写的程序运算之后分加一,再后时加一。 我现在用的是中断写的时钟,不用延迟 ,将主程序写好后,写出中断程序,等待中断响应,将时钟用到的运算写在中断里,每中断一次,时钟运算一次。 中断概念: 对于单片机来说,中断是指CPU在处理某一事件A,发生了另一事件B,请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作(中断响应),转去
[单片机]
自学单片机编程之中断与<font color='red'>时钟</font>程序
具有低功耗待机和PFC功能的开关电源控制器
摘要:TDA16846-2和TDA16847-2是英飞凌公司生产的改进型开关电源(SMPS)控制器芯片。文中介绍了其主要特点,重点介绍了基于TDA16846-2的彩电SMPS电路工作原理。 关键词:SMPS;控制器;TDA168460-2/TDA16847;PFC 1 概述 英飞凌(Infineon)公司推出的TDA16846和TDA16847开关电源控制器自投放市场以来,在TV、VCR、 SAT接收机及PC监视器等SMPS中获得了广泛应用。目前对这两种控制器进行了改进,并将改进和创新后的器件称为2型或第二代产品,型号分别为TDA16846-2和TDA16847-2。 TDA16846-2/TDA16847-2是支持低功率待机和功
[电源管理]
东芝高级Bluetooth®低功耗SoC采用紧凑式模块提供远程通信
东京—世界正在步入一个无线通信时代,东芝集团对此功不可没。Bluetooth®已经成为各种应用连接的事实标准,比如无人机、耳机和无线音频、可穿戴技术和物联网中的智能标签。东芝公司和东芝电子元件及存储装置株式会社(“东芝电子元件及存储”)开发了兼容蓝牙5.0版本的系统芯片,实现了业界最紧凑和最强大的 模块。 Bluetooth® 5.0版标准的传输速度翻了一倍(2M PHY)并且扩大了通信范围(编码PHY)。东芝和东芝电子元件及存储在此基础上更进了一步,其SoC实现了长达600m的远程通信。 在Bluetooth® SoC中,通信范围取决于传输功率与接收器灵敏度之间的差值,即链路预算。 全新东芝SoC的链路预算是113dB(
[网络通信]
MAX9867 超低功耗立体声音频编解码器
MAX9867是一款超低功耗立体声音频编解码器,设计用于手机和便携式游戏机等便携式消费类电子产品。   该器件具有立体声差分麦克风输入,可连接至模拟或数字麦克风。单端线入信号经过可配置前置放大器,能够输入到ADC用于录音或直接切换到耳机放大器用于回放。辅助ADC通道可用于跟踪任何直流电压。   立体声耳机放大器支持差分、单端以及无滤波电容的输出配置。采用无滤波电容输出配置时,器件可为32Ω负载提供10mW输出功率。完备的咔嗒/噼噗声抑制电路能够在音量变化、启动或关断过程中消除可闻噪声。   采用Maxim专有的数字电路,器件可接受任何10MHz至60MHz范围的系统时钟。该架构省去了外部PLL和多个晶体振荡器。立体声ADC和DA
[模拟电子]
MAX9867 超<font color='red'>低功耗</font>立体声音频编解码器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved