STM32低功耗模式简介
- 格式:docx
- 大小:9.64 KB
- 文档页数:2
STM32使用说明STM32是一系列由STMicroelectronics公司开发的32位微控制器,它们集成了处理器核、存储器和外设,并能够在嵌入式系统中控制硬件设备。
STM32系列芯片为工业控制、汽车电子、消费电子等领域的各种应用提供了高性能和低功耗的解决方案。
下面将介绍STM32的使用说明,包括其主要特性、开发工具和开发流程。
首先,STM32微控制器的主要特性如下:1. 32位核心处理器:STM32系列采用ARM Cortex-M处理器,具有高性能和低功耗的特点。
2.多种型号选择:STM32微控制器有多种不同型号可供选择,包括主频、封装、存储容量等方面的差异,以满足不同应用的需求。
3.丰富的外设:STM32集成了丰富的外设,包括通用输入输出(GPIO)、通用串行接口(USART)、SPI接口、I2C接口、定时器和PWM 生成器等,可用于连接各种外部传感器和执行器。
4.低功耗模式:STM32支持多种低功耗模式,通过灵活地控制功耗,可以延长电池寿命或减少功耗。
5. 丰富的开发生态系统:STMicroelectronics为STM32提供了完整的开发工具链和开发文档,包括编译器、调试器、开发板和软件库等,方便开发者进行应用开发和调试。
其次,STM32的开发工具包括以下几个方面:1. STM32Cube软件套件:这是STMicroelectronics提供的一套软件工具,用于开发和配置STM32芯片。
它包括STM32CubeMX配置工具和STM32Cube库,可以帮助开发者生成初始化代码、配置外设和生成项目模板。
2. Keil MDK:Keil是ARM公司提供的一套开发工具,包括C编译器、调试器和集成开发环境(IDE),可以用于编写、编译和调试STM32的应用程序。
3. IAR Embedded Workbench:IAR是一家瑞典公司开发的嵌入式开发工具,包括C编译器、调试器和IDE,在STM32的开发中也有广泛应用。
STM32独立看门狗和低功耗模式_RTC定时唤醒来喂狗
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。
其中独立看门狗的时钟由独立的RC振荡器(STM32F10x 一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。
而且独立看门狗一旦启动,除了系统复位,它不能再被停止。
但这样引发的一个问题是当MCU进入到低功耗模式后由于CPU停止运行无法喂狗,会导致系统频繁复位。
那如何解决这个问题呢,难道独立看门狗和低功耗模式没法同时使用?
一个很好的方式是在休眠模式下通过RTC定时唤醒来喂狗,喂完够在进入继续进入到休眠模式。
比如看门狗复位的时间间隔为10s。
那么在进入休眠模式前设置RTC闹钟中断时间为5s。
这样每隔5s唤醒一次喂一次狗。
便可以很好的解决这个问题。
while(1)
{
// 执行任务
Task1();
Task2();
// ..
// 喂狗
dev_iwdg_feed();
// 进入待机模式开关
if(m_bEnterStandByMode)
{
// 使能外部中断,GPIOB3,用以MCU从待机模式唤醒
dev_exTI_enable(TRUE);
ENTERSTOPMODE:
// 设置RTC闹钟,5秒钟产生一次RTC闹钟中断*/
dev_rtc_setAlarm(5);。
STM32STM32的低功耗设计YunFeiRoboticsLaboratory云飞机器人实验室STM32 | STM32的低功耗设计Posted by automatic.dai on March 8, 2013 Leave a comment (0) Go to comments在谈到低功耗处理器时,我们第一个想到的总是MSP430,但其实STM32也能拥有不错的低功耗特性。
通过合理的进行软件设置,STM32在工作时的功耗可以降至数十mA,而待机功耗可以降到数uA。
总的来说,降低STM32功耗的方法主要有以下三种:1. 关闭不需要的外设时钟STM32的所有外设都可以独立开启和关断,通过将不需要的AHB/APB的时钟关闭,可以起到降低总待机功耗的作用。
各个模块的典型功耗如下所示:Figure 1. APB1外设的典型功耗Figure 2. APB2外设的典型功耗2. 降低主时钟的工作频率对数字电路而言,功耗是与主频呈正比的。
在进行一般任务时主动降低功耗,在需要高性能运算时再恢复到一般频率,通过这种方法可以显著降低设备运行期间的平均功耗,这也是目前很多电脑和手机的功耗优化方案之一。
Figure 3. CPU主频-功耗-温度的关系3. 进入休眠模式当设备不需要运行时,可将CPU切换至休眠状态。
STM32共有三种休眠状态,如下:Figure 4. STM32的休眠模式这三种模式下的典型功耗如下:Figure 5. Sleep模式下的典型功耗Figure 6. Stop和Standby模式下的典型功耗可见Standby模式功耗最低,在数个uA;其次是Stop模式,为数十uA;而Sleep模式的功耗最大,是其余两种模式的100倍。
那么既然Standby功耗最低,那么另外两种模式的意义又是什么呢?首先,这三种模式下的唤醒时间各不相同:Figure 7. 不同休眠模式下的启动时间其次,这三种模式的特性也不相同:·Sleep mode唤醒后程序继续运行CPU停止运行,但外设继续运行,IO状态保持不变唤醒时间最短,但功耗较大。
具体要点为:1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉输入,如果高阻是中间状态,设成模拟输入。
这个很多人都提到过,必须的。
作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了2、两个晶振输入脚要remap成普通IO!!!使用内部晶振。
3、pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);这个也相当重要4、关闭jtag口,并设成普通IO;5、注意助焊膏的质量!!!注意电路板层之间是否进水!!!!掌握这几项要点,再设中断什么的都行,整个世界清静了!!!完全低能耗刚开始进入STOPMode后,整机功耗有300uA的,此时外围其他硬件电路电流已经可以肯定漏电流在nA级,因此调试方向在主芯片,经过实际测试,都是GPIO配置的问题,比如某个GPIO为中断输入,闲置为低电平,而我们配置成了IPU,因此内部的40K上拉就会在这里消耗3/40k =75uA,另外将N.C的GPIO配置成Floating Input,也会有一些漏电流,实际测试漏电流不大;另外将STM32F05x直接PIINtoPIN替代STM32100,所以Pin35,36的PF6,PF7为之前的VCC,GND,因此要相应的配置为IPU,IPD,才不会有拉电流/灌电流;外部不使用晶振,因此必须将其配置为IPU/IPD或者输出Low,如果配置成Floating,实测消耗200uA+的电流,这个特别注意。
另外不需要关闭不用的外设的CLK,因为STOPMODE会将内部1.8V的core关闭,因此该步骤不影响功耗。
因此在进入STOPMODE之前,需要做:1、将N.C的GPIO统一配置为IPU/IPD;2、检查一些Signal的输入Active是High/Low,相应进行配置为IPD/IPU,即避免在内部上/下拉电阻上消耗电流,而且该电流理论值为VCC/R = 3/40 =75uA;3、如果外部晶振不使用,必须将GPIO配置为IPU/IPD/PPLow,不允许配置为floating,否则会消耗极大的电流200uA+;4*、加入进入STOPMODE前,不允许将PWR的CLK关闭,这部分牵涉低功耗模式,实际测试关闭能用,也能唤醒,但是电流会增加10uA+;5、配置GPIO为输出时,根据输出的常态选择上拉/下拉,如闲置输出为0,则配置为下拉,输出闲置为1,则配置上拉;6、另外特别说明的是->从Stopmode唤醒后,系统会自动切换到HSI,如果进入前使用的是外部晶振/PLL(PLL的clksource = HSI/HSE)因此必须调用System_Init(),对RCC重新初始化,否则唤醒后主频发生改变,会影响系统;STM32F103R8和RC的停机模式的休眠电流还不一样,R8停机模式实测为11UA,RC停机模式实测为30uA,还以为又是我的程序哪里没做好呢,仔细看了PDF,这两个芯片PDF上标的值的确有区别,和我测的值差不多,那我就没有再深究的意义了!结合下文的高手经验,反复摸索,standby模式1.9uA,PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); stop模式:11uA, PWR_EnterSTANDBYMode();实验证明,将IO端口设成IPU/IPD/AIN/PPOUT=1/PPOUT=0/ODOUT=0,电流是基本相同的,最可怕的就是GPIO浮空,且电路上未外接上拉下拉,这样电流就会比较大。
【STM32】电源控制、低功耗模式(实例:待机模式)STM32F1xx官⽅资料:《STM32中⽂参考⼿册V10》-第4章4.3⼩节低功耗模式STM32的电源控制STM32的电源框图STM32的⼯作电压(VDD)为2.0~3.6V。
通过内置的电压调节器提供所需的1.8V电源。
当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。
下⾯是STM32的电源框图:注意:框图中的VDDA和VSSA必须分别联到VDD和VSS。
独⽴的A/D转换器供电和参考电压为了提⾼转换的精确度,ADC使⽤⼀个独⽴的电源供电,过滤和屏蔽来⾃印刷电路板上的⽑刺⼲扰。
ADC的电源引脚为VDDA;独⽴的电源地VSSA。
如果有VREF-引脚(根据封装⽽定),它必须连接到VSSA。
同时,为了确保输⼊为低压时获得更好精度,⽤户可以连接⼀个独⽴的外部参考电压ADC到VREF+和VREF-脚上。
在VREF+的电压范围为2.4V~VDDA。
电池备份区域使⽤电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。
VBAT脚也为RTC、LSE振荡器和PC13⾄PC15供电,这保证当主要电源被切断时RTC能继续⼯作。
切换到VBAT供电由复位模块中的掉电复位功能控制。
如果应⽤中没有使⽤外部电池,VBAT必须连接到VDD引脚上。
电压调节器复位后调节器总是使能的。
根据应⽤⽅式它以3种不同的模式⼯作:运⾏模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设);停⽌模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容;待机模式:调节器停⽌供电。
除了备⽤电路和备份域外,寄存器和SRAM的内容全部丢失。
STM32的低功耗模式在系统或者电源复位后,微控制器出于运⾏状态之下,HCLK 很多单⽚机有低功耗模式,STM32也不例外。
在系统或者电源复位后,微控制器出于运⾏状态之下,提供时钟,内核执⾏代码。
STM32L4如何用闹钟唤醒待机模式STM32L4微控制器是一款低功耗型的微控制器,具有多种低功耗模式,包括待机模式。
待机模式是一种非常低功耗的模式,减少了系统的功耗和电池的消耗。
在待机模式下,微控制器处于最低功耗状态,只有少数外设处于工作状态。
为了实现在待机模式下使用闹钟唤醒,需要使用RTC(实时时钟)和唤醒时钟。
以下是在STM32L4微控制器上使用闹钟唤醒待机模式的步骤:第一步:配置RTCRTC是一个计时器和日历,可以配置为以低功耗模式运行,以实现在待机模式下仍然运行。
需要配置RTC的时钟源和时钟预分频器,以及闹钟的时间和日期。
可以使用STM32CubeMX工具来生成初始化代码,并进行配置。
第二步:配置唤醒时钟唤醒时钟是唤醒待机模式的时钟源,可以选择RTC时钟或者外部时钟。
需要配置唤醒时钟源的时钟频率和预分频器。
第三步:配置RTC闹钟唤醒RTC闹钟唤醒是通过比较RTC计数器的值和闹钟的时间来实现的。
需要设置闹钟的时间和日期,并使能RTC的闹钟中断。
可以使用RTC中断处理函数来处理闹钟中断。
第四步:配置待机模式需要将微控制器设置为待机模式,并选择所需的待机模式。
可以选择从WFI或WFE指令进入待机模式,然后在唤醒时钟中断发生时唤醒。
第五步:进入待机模式通过设置待机模式位,可以将微控制器设置为待机模式。
可以在主循环中或者其他适当的位置调用待机模式函数,以便在满足一定条件时进入待机模式。
例如,在任何其他可能导致系统空闲的地方,可以插入检查唤醒条件的代码,并在满足条件时调用待机模式函数。
第六步:处理唤醒中断当RTC闹钟的时间和日期与RTC计数器的值匹配时,将会发生唤醒中断,并从待机模式中唤醒。
可以在RTC中断处理函数中处理唤醒中断,例如重新配置RTC闹钟或恢复其他外设。
通过以上步骤,就可以实现在待机模式下使用RTC闹钟唤醒STM32L4微控制器。
这样可以大大降低系统的功耗,并在指定的时间唤醒系统进行相应的操作。
STM32 Standby低功耗模式示例
1.基本流程
1)初始化RTC
2)配置外部中断(不是必需的)
3)设置Alarm时间
4)进入Standby
2.几个需要注意的问题
1)从Standby退出后,代码将重新运行,相当于执行了软复位。
其实也容易理解,因
为进入Standby后,内核的所有功能都已经停止(断电),RAM内的所有数据将消
除,因此,从Standby退出后,需要重新执行所有程序。
2)如果有必要,可在进入Standby之前将重要数据存入BACKUP RAM或RTC的19个
备份寄存器中,退出Standby时再将数据读出。
3)进入Standby后,如果Alarm事件发生,虽然可以退出Standby模式,但即使配置
了外部中断,发系统也无法响应外部中断,因为,从Standby退出后发生了系统复
位。
4)虽然,导致系统从Standby退出的Alarm事件不能用于触发外部中断(注:仅仅是
导致系统从Standby退出的那个特定事件不能触发外部中断,而系统正常运行后,Alarm事件还是可以正常触发外部中断的),但即使不需要Alarm触发外部中断的
功能,也必须配置使能Alarm中断,否则系统将无法从Standby退出。
5)使能Alarm中断之前,最好先清除中断标志位,否则在循环进入或推出Standby的
操作就会失败(原因有待研究)。
3.示例代码
3.1.初始化RTC
3.2.配置外部中断
3.3.设置Alarm时间
3.4.进入Standby。
STM32低功耗学习1)设置SLEEPDEEP位该位在系统控制寄存器(SCB_SCR)的第二位(详见《CM3权威指南》,第182页表13.1),我们通过设置该位,作为进入待机模式的第一步。
2)使能电源时钟,设置WK_UP引脚作为唤醒源因为要配置电源控制寄存器,所以必须先使能电源时钟。
然后再设置PWR_CSR 的EWUP位,使能WK_UP用于将CPU从待机模式唤醒。
3)设置PDDS位,执行WFI指令,进入待机模式接着我们通过PWR_CR设置PDDS位,使得CPU进入深度睡眠时进入待机模式,最后执行WFI指令开始进入待机模式,并等待WK_UP中断的到来。
4)最后编写WK_UP中断函数因为我们通过WK_UP中断(PA0中断)来唤醒CPU,所以我们有必要设置一下该中断函数,同时我们也通过该函数里面进入待机模式。
关于具体进入低功耗模式WFI命令的写法:下面是我写的进入Sleep模式的代码,你把它添加到软件库中stm32f10x_pwr.c中/******************************************************************************** Function Name : PWR_EnterSLEEPMode* Description : Enters SLEEP mode.* Input : - SysCtrl_Set: Select the Sleep mode entry mechanism,.* This parameter can be one of the following values:* - 0: MCU enters Sleep mode as soon as WFI or WFE instruction is executed.* - 1: MCU enters Sleep mode as soon as it exits the lowest priority ISR.** - PWR_STOPEntry: specifies if SLEEP mode in entered with WFI or WFE instruction.* This parameter can be one of the following values:* - PWR_SLEEPEntry_WFI: enter STOP mode with WFI instruction* - PWR_SLEEPEntry_WFE: enter ST OP mode with WFE instruction* Output : None* Return : None*******************************************************************************/void PWR_EnterSLEEPMode(u32 SysCtrl_Set, u8 PWR_SLEEPEntry){if (SysCtrl_Set)*(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPONEXIT_Set; // Set SLEEPONEXITelse*(vu32 *) SCB_SysCtrl &= ~SysCtrl_SLEEPONEXIT_Set;// Reset SLEEPONEXIT*(vu32 *) SCB_SysCtrl &= ~SysCtrl_SLEEPDEEP_Set; // Clear SLEEPDEEP bitif(PWR_SLEEPEntry == PWR_SLEEPEntry_WFI) // Select SLEEP mode entry__WFI(); // Request Wait For Interrupt else__WFE(); // Request Wait For Event}同时将下面的代码添加到stm32f10x_pwr.h中:/* SLEEP mode entry */#define PWR_SLEEPEntry_WFI ((u8)0x01)#define PWR_SLEEPEntry_WFE ((u8)0x02)其中进入低功耗模式使用__WFI(); 或者__WFE(); 命令就行,这个和__nop();等待命令一样。
STM32L系列低功耗在stop模式下,所有Vcore(稳压器输出电压)域时钟停止,PLL、MSI、HSI、HSE都被停止。
RAM和寄存器中的值保留。
在stop模式下,稳压器为Vcore(稳压器输出电压)域提供低功耗电压,用来保持寄存器和内部RAM中的数据。
为了最大程度降低功耗,在进入stop模式之前,VREFINT、BOR、PVD、和温度传感器可以被关闭,退出stop模式后,可以用PWR_UltraLowPowerCmd()打开他们。
PWR_UltraLowPowerCmd(ENABLE);//使能超低功耗模式;内部参考电压的功耗也不是微不足道的,尤其在stop模式和standby模式。
为了减小功耗,用这个函数设置PWR_CR的ULP位来关闭内部参考电压,然而,在这种情况下从stop模式或standby模式退出时,在内部参考电压启动时间内(3ms),通过内部参考电压管理那些功能是不可靠的。
为了缩短唤醒时间,在进入stop模式或者standby模式之前,调用PWR_FastWakeUpCmd()函数(设置PWR_CR的FWU位),CPU就可以从stop模式或者standby模式唤醒而不用等待内部参考电压的启动。
if ULP=0(参考电压在低功耗模式下打开),FWU位被忽略。
if ULP=1(参考电压在低功耗模式下关闭),FWU=1:当从低功耗模式退出时,忽略参考电压的启动时间。
if ULP=1(参考电压在低功耗模式下关闭),FWU=0:CPU只有等到参考电压准备好才会从低功耗模式退出。
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STO PEntry_WFI);//进入stop模式;设置PWR_CR寄存器的PDDS和LPSDSR位。
PDDS:进入stop模式。
稳压器:一个嵌入式的、线性的稳压器给除了待机电路外的所有数字电路供电。
稳压器的输出电压在1.2~1.8V范围内,软件可配。
stm32f030 低功耗 stop模式的5.6uA 程序配置真正的从项目中的经验,不是单纯的配置引脚测试。
希望对大家有帮助。
最近一个项目,需要 stm32f030K6 单片机低功耗,3种模式的区别哪儿都有介绍我就不再赘述了,我需要stop 模式,外部是5个按键,每个按下都能将单片机唤醒。
刚开始功耗休眠为200uA,经过几天查找,发现时钟芯片第二脚不能加上拉(可是手册上推荐的有这个上拉啊,好郁闷)。
然后功耗就降到了60uA,接下来,就怎么也降不下来了。
void Sleep_IO_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE); ///*初始化GPIOA*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_RESET);GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_RESET);GPIO_WriteBit(GPIOB,GPIO_Pin_3,Bit_RESET);GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_RESET);GPIO_WriteBit(GPIOB,GPIO_Pin_4,Bit_RESET);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOB, &GPIO_InitStructure);ZI2C_SCL_O(1);ZI2C_SDA_O(1);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;GPIO_Init(GPIOF, &GPIO_InitStructure);void Sleep_Con(void){ADC_Cmd(ADC1, DISABLE);//失能ADCRCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);ADC_DeInit(ADC1);USART_DeInit(USART1);USART_Cmd(USART1,DISABLE); //失能串口RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE );TIM_Cmd(TIM14, DISABLE); //停止计数TIM_Cmd(TIM3, DISABLE);TIM_CtrlPWMOutputs(TIM3, DISABLE);//PWM输出關RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,DISABLE); //关闭TIM3 时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,DISABLE); //关闭TIM14 时钟RCC_HSI14Cmd(DISABLE);RCC_LSICmd(DISABLE);RCC_LSEConfig(RCC_LSE_OFF);//关外部时钟Sleep_IO_Init();//IO 初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);sleepdelaycnt = 0; //被唤醒后,休眠延时清0,}1. 我在程序中用到的外设有UART1、TIM14、PWM(TIM3-CH4)、ADC、模拟IIC,这个我没见到其他人用这么多的*_*,确定引脚和外围之间没有漏电流了。
stm32 低功耗设计最近使用STM32进行了一个低功耗应用设计,做一个小总结:1、SLEEP 模式:很容易实现,可以由中断唤醒,但省电较少。
这时候要配合时钟的关闭来节电:不需要用到的外设关闭时钟,要用到时才打开。
例如USART:要发送数据前,把USART 的时钟使能,数据包发送完成后,立即关闭时钟。
2、STOP 模式:需要外部中断唤醒。
RTC报警唤醒给该模式带来了更加灵活的应用。
但应用中有一个问题需要注意:在ADC数据采样的应用场合。
如果使用STOP模式,假设采样率为200HZ,5毫秒唤醒一次启动ADC 采样,通过测试STOP唤醒的周期并不是很固定(可能是唤醒后需要恢复时钟设置,唤醒后自动使用内部的HSI时钟做为系统时钟),造成采样周期不是很固定,对滤波不利,例如工频陷波。
以上一点总结,希望对大家有用。
低功耗设计参考在ST官方提供的AN2821 Clock/calendar functionality features应用笔记中关于控制器从Stop mode和Standby mode唤醒后的状态记录。
官方原文:Stop mode:After the microcontroller has exited the Stop mode, the basic reset and clock control circuitry (RCC)has to be reconfigured and access to the backup domain has to be re-enabled. Standby mode:The Standby mode is the lowest power consumption mode. After the microcontroller wakes up from the Standby mode, program execution restarts in the same way as after a system/power reset. 译文:Stop mode:当控制器从Stop mode中唤醒后,RCC必须重新配置并且需要再次使能对备份区的访问。
STM32低功耗模式一、低功耗注意事项:1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入;如果高阻状态是低电平,设成下拉输入;如果高阻是中间状态,设成模拟输入。
这个很多人都提到过,必须的。
作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了2、两个晶振输入脚要remap成普通IO,使用内部晶振。
3、pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);这个也相当重要4、关闭jtag口,并设成普通IO。
5、注意助焊膏的质量。
6、功耗计算方式:功耗=工作电压*工作电流7、引脚电压的切换会对外部和内部电容负载产生动态损耗,其损耗与电压切换频率和负载电容有关。
8、在配置IO模拟输入之前,一定不要锁定IO口。
二、低功耗模式1、电源管理为了方便进行电源管理,STM32把它的外设、内核等模块根据功能划分了供电区域(备份域电路、调压器供电电路、 ADC电源及参考电压),其内部电源区域划分见图1。
图 1 STM32供电图①备份域电路STM32的LSE振荡器、RTC、备份寄存器及备份SRAM这些器件被包含进备份域电路中,这部分的电路可以通过STM32的VBAT引脚获取供电电源,在实际应用中一般会使用3V的钮扣电池对该引脚供电。
当VDD主电源存在时,由于VDD电压较高,备份域电路通过VDD供电,当VDD掉电时,备份域电路由钮扣电池通过VBAT供电,保证电路能持续运行,从而可利用它保留关键数据。
②调压器供电电路在STM32的电源系统中调压器供电的电路是最主要的部分,调压器为备份域及待机电路以外的所有数字电路供电,其中包括内核、数字外设以及RAM,调压器的输出电压约为 1.2V,因而使用调压器供电的这些电路区域被称为1.2V域。
调压器可以运行在"运行模式"、"停止模式"以及"待机模式"。
STM32-M3芯片功耗研究传统型STM32F103x8/B (典型值50mA)提供三种低功耗模式●睡眠模式Sleep mode(典型值32mA)在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。
●停机模式Stop mode(典型值24uA)在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。
在停机模式下,停止所有内部1.8V部分的供电,PLL、HSI的RC振荡器和HSE晶体振荡器被关闭,调压器可以被置于普通模式或低功耗模式。
可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部I/O口之一、PVD的输出、RTC闹钟或USB的唤醒信号。
●待机模式Standby mode(典型值3.4uA)在待机模式下可以达到最低的电能消耗。
内部的电压调压器被关闭,因此所有内部1.8V部分的供电被切断;PLL、HSI的RC振荡器和HSE晶体振荡器也被关闭;进入待机模式后,SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。
从待机模式退出的条件是:NRST上的外部复位信号、IWDG复位、WKUP引脚上的一个上升边沿或RTC的闹钟到时。
注:在进入停机或待机模式时,RTC、IWDG和对应的时钟不会被停止。
以下table13、15、16,为数据来源。
低功耗型STM32L151xD STM32L152xD(典型值10.5mA)提供七种低功耗模式,以实现低功耗,短启动时间和可用唤醒源之间的最佳折衷:●睡眠模式Sleep mode (典型值2.1mA)仅停止CPU。
所有外设都继续运行,并在发生中断/事件时唤醒CPU。
所有外设均关闭时,16 MHz时的睡眠模式功耗约为1 mA。
●低功耗运行模式Low-power run mode(典型值100uA)此模式通过将多速内部(MSI)RC振荡器设置为MSI范围0或MSI范围1个时钟范围(最大131 kHz),从SRAM或闪存执行,内部稳压器设置为低电平来实现。
stm32低功耗作用STM32是一种微控制器,具有低功耗的特性,因此在许多应用中广泛使用。
在本文中,我们将探讨STM32低功耗的作用以及它在不同领域的应用。
一、STM32低功耗的作用低功耗是STM32微控制器的重要特性之一,它对于许多应用来说非常关键。
以下是STM32低功耗的几个重要作用:1. 延长电池寿命:在许多依赖电池供电的应用中,如智能手表、便携式设备等,低功耗是至关重要的。
STM32低功耗的设计可以显著延长电池的使用寿命,提供更长的使用时间。
2. 节约能源:在大量的工业自动化和智能家居应用中,低功耗是为了节约能源而必不可少的特性。
STM32低功耗的设计可以减少能源的消耗,降低运行成本。
3. 提高系统可靠性:低功耗设计有助于减少系统的热量产生,从而降低了电子元件的温度,延长了系统的寿命。
此外,低功耗还有助于减少电磁干扰,提高了系统的可靠性。
二、STM32低功耗在不同领域的应用STM32低功耗的特性使其在各种领域得到了广泛的应用,下面是一些常见的应用领域:1. 物联网设备:物联网设备通常需要长时间运行,并且需要使用电池供电。
STM32低功耗的设计使得它成为物联网设备的理想选择,可以延长设备的使用寿命,减少电池更换的频率。
2. 医疗设备:在医疗设备中,低功耗是非常重要的,因为这些设备需要长时间运行,并且对电池寿命有较高的要求。
STM32低功耗的特性使其在医疗设备中得到广泛应用,如便携式监护仪、健康追踪设备等。
3. 工业自动化:在工业自动化领域,低功耗可以降低设备的能源消耗,并提高系统的可靠性。
STM32低功耗的设计使其成为自动化设备的首选,如工厂自动化控制系统、机器人等。
4. 智能家居:智能家居设备通常需要长时间运行,并且需要使用电池供电。
STM32低功耗的特性使其在智能家居领域得到广泛应用,如智能照明系统、智能门锁等。
总结:STM32低功耗的作用不仅体现在延长电池寿命和节约能源上,还可以提高系统的可靠性。
STM32低功耗模式简介
STM32F10xxx 有三中低功耗模式:●睡眠模式(Cortex?-M3 内核停止,外
设仍在运行)●停止模式(所有的时钟都以停止)●待机模式(1.8V 电源关闭)
时钟频率72MHz 时,从闪存执行代码,STM32 功耗36mA,是32 位市场上
功耗最低的产品,相当于0.5mA/MHz。
上电,默认使用内部HSI 时钟8M,经测试10mA 左右。
待机模式可实现系
统的最低功耗。
可将电流消耗降至两微安。
在待机模式下,所有的I/O 引脚处于高阻态,除了以下的引脚:●复位引脚
(始终有效)●当被设置为防侵入或校准输出时的TAMPER 引脚●被使能的唤醒
引脚
/*按钮GPIOB9 进入睡眠,WKUP pin(GPIOA0)唤醒,GPIOD3-LED 200ms
闪烁*/int main(void){ /* System Clocks Configuration
**********************************************/ RCC_Configuration();
GPIO_Configuration();
/* Enable PWR and BKP clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Enable WKUP pin */ PWR_WakeUpPinCmd(ENABLE);
/* Allow access to BKP Domain */ PWR_BackupAccessCmd(ENABLE);
//RTC_Configuration();
EXTI_Configuration();
NVIC_Configuration();
SysTick_Config(SystemFrequency / 1000 *200 ); //200ms。