精华内容
下载资源
问答
  • 2021-11-26 11:01:44

    在休眠前加这一句就好了

    PWR->CR |= PWR_CR_CWUF;//清标识

    HAL_PWR_EnterSTANDBYMode();//休眠

    有用请点赞,谢谢

    更多相关内容
  • KEIl 开发的STM32低功耗,应用中专门测试休眠硬件电路是否达到最低功耗1LL_STM32L071外部唤醒低功耗(定时唤醒测试OK0.4uA),加LDO电源的功耗在1.9ua3.3V
  • STM32休眠与唤醒

    2020-12-21 17:27:08
    这两天研究了STM32的低功耗知识,低功耗里主要研究的是STM32的待机模式和停机模式。让单片机进入的待机模式和停机模式比较容易,实验中通过设置中断口PA1来响应待机和停机模式。voidEXTI1_IRQHandler(void){if(!GPIO...

    这两天研究了STM32的低功耗知识,低功耗里主要研究的是STM32的待机模式和停机模式。让单片机进入的待机模式和停机模式比较容易,实验中通过设置中断口PA1来响应待机和停机模式。

    voidEXTI1_IRQHandler(void)

    {

    if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))

    {

    delay_ms(10);

    while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1));

    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))

    {

    EXTI_ClearITPendingBit(EXTI_Line1);

    RTC_SetAlarm(RTC_GetCounter()+4);  //设置4S后闹钟唤醒

    RTC_ITConfig(RTC_IT_ALR, ENABLE);//使能闹钟中断.

    RTC_WaitForLastTask();//等待上一次写RTC任务完成

    Standby();             //进入待机(停机)状态

    }

    }

    }

    void Standby()

    {

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);//开电源管理时钟PWR_Regulator_LowPower

    PWR_WakeUpPinCmd(ENABLE);//使能唤醒引脚,默认PA0

    PWR_EnterSTANDBYMode();//进入待机

    //PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI|PWR_STOPEntry_WFE);//进入停机

    }

    进入的待机模式和停机模式很简单,基本一样。那么问题来了。

    主要问题有:

    1:如何对他们进行唤醒?

    2:唤醒的闹钟中断能否执行?

    2:唤醒后的程序入口在哪?

    通过各种实验和查资料,得到了如下结论:(本实验通过设定RTC_SetAlarm(RTC_GetCounter()+4); 为设置4S后进行闹钟唤醒,并开启闹钟中断,手册中可以查到闹钟中断能产生唤醒,故用闹钟中断进行实验)

    先研究待机模式下的唤醒,在闹钟中断函数如下:

    voidRTCAlarm_IRQHandler(void)

    {

    if(RTC_GetFlagStatus(RTC_IT_ALR))

    {

    RTC_ClearITPendingBit(RTC_IT_ALR);

    RTC_WaitForLastTask();

    EXTI_ClearITPendingBit(EXTI_Line17);

    if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)

    {

    PWR_ClearFlag(PWR_FLAG_WU);

    }

    GPIO_WriteBit(GPIOA, GPIO_Pin_5, 0);//LED指示

    }

    }

    实验结果:PA5的LED不指示,并且从其他LED灯的指示可以知道程序又重新开始运行。也就是被复位。

    因此待机模式下的唤醒结论如下:

    1:唤醒形式直接产生闹钟中断就能唤醒。

    2:唤醒后不会进入闹钟中断函数

    3:唤醒后程序复位,重新执行

    再研究停机模式下的唤醒,停机模式唤醒和待机唤醒差别很大,开始还以为两者相同,停机唤醒相对复杂些,中途调试了很长时间,才明白了停机唤醒的过程,贴上闹钟中断程序如下:

    char Wakeflag=0;

    voidRTCAlarm_IRQHandler(void)

    {

    if(RTC_GetFlagStatus(RTC_IT_ALR))

    {

    EXTI_ClearITPendingBit(EXTI_Line17);

    RTC_ClearITPendingBit(RTC_IT_ALR);

    RTC_WaitForLastTask();

    EXTI_ClearITPendingBit(EXTI_Line7);

    EXTI_ClearITPendingBit(EXTI_Line1);//对于程序可能产生的标志位必须的清除干净,不清除会出现唤醒失灵现象!!

    if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)

    {

    PWR_ClearFlag(PWR_FLAG_WU);//一般没用

    }

    SystemInit();//重要,由于停机下对所有时钟关闭,所以唤醒需要重新配置时钟!!

    Wakeflag=!Wakeflag;

    GPIO_WriteBit(GPIOA, GPIO_Pin_5, Wakeflag);//LED灯指示

    }

    }

    相比待机的闹钟中断是不复杂了很多,停机模式下的唤醒的中断函数需要注意这两点(能得到这两点,耗费了大量时间,终于还是搞定了,嗨皮!!):

    1:重要,对于程序可能产生的标志位必须的清除干净,不清除会出现唤醒失灵现象!!

    2:重要,由于停机下对所有时钟关闭,所以唤醒需要重新配置时钟!!

    实验现象:LED可以产生开通与关断的效果。并且从其他LED的指示可以看到程序没有被复位,而是继续原来运行。

    因此停机模式下的唤醒结论如下:

    1:唤醒形式产生闹钟中断不一定就唤醒,需要对任何可能的标志位清楚,并且时钟要重新配置。

    2:唤醒后进入闹钟中断函数

    3:唤醒后程序进入闹钟中断函数,然后再进入原来停机的位置继续运行。没有复位,单片机寄存器里的各种变量值仍然保留!!

    stm32用于进入停止模式的中断和用于产生唤醒的中断,后者的抢占优先级一定要高,否则无法唤醒!

    之前做实验时,实验时遇到了一个很严重的问题,就是停止模式无法唤醒。

    实验内容主要是:用一个外部中断的响应,使得程序进入停机模式。然后再通过其他一个外部中断或者闹钟中断将单片机唤醒。但是调试了很久

    用于进入停止模式的中断和用于产生唤醒的中断,后者要抢占优先级一定要高,否则无法唤醒。

    由实验结果分析原因:

    由于进入停止模式后,调节器以低功耗模式提供1.8V电源未断开,寄存器的内容还是保持的,所以程序还处在中断里面。但另一个中断来唤醒时,由于抢占的优先级不够高,无法抢占原来的中断,故无法唤醒。所以只有用来唤醒的中断抢占优先级高,才可以唤醒!!

    本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

    展开全文
  • 下图摘自STM32F103 datasheet Stop模式下,MCU的GPIO是可以保持休眠之前的状态的,且所有的寄存器在休眠状态下保持休眠前的状态不变,比如说休眠后需要某个LED控制亮着灯是可以实现的(已实验测试验证)。 1、...

    下图摘自STM32F103 datasheet
    在这里插入图片描述
    在这里插入图片描述
    为什么只选取Stop模式和Standby模式是因为Stop模式是能维持SRAM不变的最低功耗的模式了,Standby模式会丢SRAM数据,所以这是两个代表性的低功耗模式。
    Stop模式下,MCU的GPIO是可以保持休眠之前的状态的,且所有的寄存器在休眠状态下保持休眠前的状态不变,比如说休眠后需要某个LED控制亮着灯是可以实现的(已实验测试验证)。
    1、sleep模式(Cortex-M3内核停止,外设运行)
    这个时候,如果不锁定IO的话,有外部触发的IO电平会改变。
    2、stop模式(所有时钟停止)
    这个时候,外设已经停止工作,保持原来的电平,锁不锁都一样。
    3、stanby模式(1.8V电源关闭)
    在此情况下,IO都是高阻,除了复位引脚和唤醒引脚电平会变化。

    展开全文
  • stm32 休眠

    2020-12-23 05:00:56
    ;300 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;000014 2000 MOVS r0,#0000016 f88d0004 STRB r0,[sp,#4];;;301 EXTI_InitStructure.EXTI_Trigger = EXTI_Tri...

    ;300 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

    000014 2000 MOVS r0,#0

    000016 f88d0004 STRB r0,[sp,#4]

    ;;;301 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

    00001a 200c MOVS r0,#0xc

    00001c f88d0005 STRB r0,[sp,#5]

    ;;;302 EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    000020 2001 MOVS r0,#1

    000022 f88d0006 STRB r0,[sp,#6]

    ;;;303 EXTI_Init(&EXTI_InitStructure);

    000026 4668 MOV r0,sp

    000028 f7fffffe BL EXTI_Init

    ;;;304

    ;;;305

    ;;;306 /* Configure EXTI Line17(RTC Alarm) to generate an interrupt on rising edge */

    ;;;307 EXTI_ClearITPendingBit(EXTI_Line17);

    00002c f44f3000 MOV r0,#0x20000

    000030 f7fffffe BL EXTI_ClearITPendingBit

    ;;;308 EXTI_InitStructure.EXTI_Line = EXTI_Line17;

    000034 f44f3000 MOV r0,#0x20000

    000038 9000 STR r0,[sp,#0]

    ;;;309 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

    00003a 2008 MOVS r0,#8

    00003c f88d0005 STRB r0,[sp,#5]

    ;;;310 EXTI_Init(&EXTI_InitStructure);

    000040 4668 MOV r0,sp

    000042 f7fffffe BL EXTI_Init

    ;;;311 }

    000046 bd1c POP {r2-r4,pc}

    ;;;312

    ENDP

    AREA ||i.GPIO_Configuration||, CODE, READONLY, ALIGN=2

    GPIO_Configuration PROC

    ;;;249 *******************************************************************************/

    ;;;250 void GPIO_Configuration(void)

    000000 b508 PUSH {r3,lr}

    ;;;251 {

    ;;;252 GPIO_InitTypeDef GPIO_InitStructure;

    ;;;253

    ;;;254 /* Enable GPIOC, GPIOB GPIOD and AFIO clock */

    ;;;255 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOD |

    000002 2101 MOVS r1,#1

    000004 2039 MOVS r0,#0x39

    000006 f7fffffe BL RCC_APB2PeriphClockCmd

    ;;;256 RCC_APB2Periph_AFIO, ENABLE);

    ;;;257

    ;;;258 /* Configure PC.06, DX_LED3 | DX_LED4 as Output push-pull */

    ;;;259 GPIO_InitStructure.GPIO_Pin = DX_LED3 | DX_LED4 ;

    00000a 20a0 MOVS r0,#0xa0

    00000c f8ad0000 STRH r0,[sp,#0]

    ;;;260 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    000010 2003 MOVS r0,#3

    000012 f88d0002 STRB r0,[sp,#2]

    ;;;261 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    000016 2010 MOVS r0,#0x10

    000018 f88d0003 STRB r0,[sp,#3]

    ;;;262 GPIO_Init(GPIOC, &GPIO_InitStructure);

    00001c 4669 MOV r1,sp

    00001e 480d LDR r0,|L3.84|

    000020 f7fffffe BL GPIO_Init

    ;;;263

    ;;;264 /* Configure DX_LED7 | DX_LED8 as Output push-pull */

    ;;;265 GP

    展开全文
  • STM32休眠期关闭看门狗计数的简单解决方案测试平台问题的提出问题的解决源代码 测试平台 本文采用STM32L476进行测试,本方法对其它STM32芯片应该也管用。 问题的提出 在此之前对这个问题的解决方法主要有两种: (1...
  • STM32 的待机唤醒功能

    2020-08-11 08:58:43
    很多单片机都有低功耗模式,STM32 也不例外。在系统或电源复位以后,微控制器处于运行状态。运行状态下的 HCLK 为 CPU 提供时钟,内核执行程序代码。当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗,例如...
  • STM32休眠后不能烧录程序

    千次阅读 2019-01-04 08:46:20
    STM32 原因:程序逻辑有误导致休眠后不能唤醒,不能烧录程序。 解决: 通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键,点下载,然后松开复位键即可。 1、可以将单片机的NRST引脚引...
  • stm32休眠 以及休眠中如何喂狗

    千次阅读 2015-10-07 09:36:00
    STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。其中独立看门狗的时钟由独立的RC振荡器...
  • 1. 主循环中,当sec达到15s时,设定15s后闹钟,然后进入待机模式Sys_Enter_Standby; 2. RTC中断定时中,清中断。RTC定时中断中,不需要做其他操作。定时到达后,RTC定时会自动唤醒MCU; 3. 注意:standby唤醒后,...
  • STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。其中独立看门狗的时钟由独立的RC...
  • Stm32 三种休眠方式及其优缺点

    千次阅读 2021-03-23 14:14:20
    睡眠模式:只有CPU停止工作,各个外设正常工作,依靠任何中断/事件唤醒。 优点:快速响应,寄存器数据不丢失 缺点:由于外设正常工作,导致功耗过大 停机模式:1.8V供电区域时钟被停止,内部HSI,PLL,外部时钟...
  • stm32l151rtc定时唤醒,解决了唤醒时钟恢复的问题。
  • STM32 休眠模式下如何喂狗?

    千次阅读 2017-04-05 13:12:31
    STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。其中独立看门狗的时钟由独立的RC振荡器...
  • 诈骗stm32单片机的歇眠形式,使单片机间歇的歇眠从而告终低功耗的主意。往往会显现进入歇眠后无法叫醒,导致下一次圭臬烧不进去。时时的办理主意是:寻常的开辟板或单片机最幼编造都邑有复位键,按住复位键,点下载...
  • STM32F030进入低功耗模式了。以及待机唤醒的模版。亲测好用,直接下载就行,欢迎下载。
  • 这是采用stm32L151主芯片驱动NB做云端通信,采用GPS定位。和采集温度。加震动检测。休眠状态达到9umA。
  • stm32实现待机唤醒

    千次阅读 2020-12-23 05:01:04
    STM32的低功耗模式有3种:1、睡眠模式(CM3内核停止,外设仍然运行)2、停机模式(所有时钟都停止)3、待机模式(1.8v内核电源关闭)进入待机模式的方法,以及设置WK_UP引脚用于把STM32从待机模式唤醒的方法一般步骤如下:...
  • 长期以来一直都认为Stm32启用了IWDG看门狗以后,就不能再使用休眠进入低功耗模式。由于看门狗启动后就不能停止,给很多人带来了困扰。还有很多人放弃了使用看门狗,从而给产品带来一定的不确定性。 其实有一个简单...
  • 利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导致下一次程序烧不进去。通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键,点下载...
  • STM32H7入休眠模式,找不到SY-LINK, 无法下载程序的问题与解决 芯片: STM32H7XXX, ST-LINK下载器 问题:我从官网上下载STM32H7XXX的官网Demo,修改了一下时钟,然后直接用ST-link烧入,烧入完之后,在KEIL上就找不...
  • 于是我想用已经有的系统初始化函数,来初始化时钟来达到目的,所以要做的是在唤醒处理器的那个中断服务函数中加入初始化函数,我照搬system_stm32x.c中的函数写了一下函数 [mw_shl_code=c,true]void clock(void) { _...
  • 该资源为文章 stm32的μC/OS-II(μcosii)系统任务挂起、恢复、创建、删除 的工程,用keil4软件编写,文章的代码只是解释,并不完整,完整的工程为该资源
  • stm32f1 的停止休眠时钟问题

    千次阅读 2017-12-11 12:35:16
    例如:System control register (SCB_SCR)经过网友的帮助,知道了这是在程序设计指南STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual中找到的。这里有地址,我在下面也会上传这个pdf。 这里...
  • 工作问题笔记-----STM32休眠问题

    千次阅读 2015-01-08 16:47:58
    STM32低功耗分三种: SLEEP: 电压调节器开启,Cortex-M3内核停止运行,外设保持运行态; STOP: 电压调节器可选择性开启,所有外设时钟、PLL、HSI和HSE被关闭,Cortex-M3内核和所有外设停止运行,保留SRAM和寄存器...
  • 01前言按功耗由高到低排列,STM32具有运行、睡眠、停止和待机四种工作模式。上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒...
  • STM32F103 怎样进入睡眠模式及唤醒

    千次阅读 2020-12-23 05:01:03
    /******************************************************************************* * Function Name : PWR_EnterSLEEPMode * ... // Request Wait For Event } 任何中断和事件都能将STM32唤醒。
  • 本文章基于STM32F103RC; 在开启独立看门狗的状态下,进入停机模式,由RTC定时闹钟唤醒系统。 直接上代码: #include "main.h" static void RTC_NVIC_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,755
精华内容 1,102
关键字:

stm32休眠