[应用相关]

STM32进入低功耗模式以及唤醒(RTC+中断)

[复制链接]
1577|10
手机看帖
扫描二维码
随时随地手机跟帖
磨砂|  楼主 | 2019-6-13 19:17 | 显示全部楼层 |阅读模式
此文献给做单片机工作的同僚,希望大家在嵌入式硬件的道路上越走越远,第一篇,望大家多多指导,不喜勿喷!

     这里主要说一下,本人在调试STM32低功耗功能时遇到的问题以及解决思路与大家分享一下。

    在确认使用低功耗功能后,大家铁定会通过不同途径查找相关的资料,了解到什么是低功耗、低功耗有哪几种以及不同模式之间的区别,最后还有一些程序截取、说明,资料不少,但是能让人一目了然理解的不太多,尤其是刚接触这个功能的新手,或许是资历尚浅,编程以及检索资料能力还有待提高。

    再此,我抛砖引玉,发表一篇我的调试感受,我从  低功耗初体验、低功耗功能说明、低功耗总结三个方面进行说明。


使用特权

评论回复
磨砂|  楼主 | 2019-6-13 19:18 | 显示全部楼层
首先,低功耗初体验。跟大家一样,查到STM32的低功耗有三个模式,分别是睡眠模式、停止模式以及待机模式(STM32开发指南——库函数版本321页)。

446825d0230ec8ee8f.png

这里介绍的是停机模式,原因有以下亮点:功耗以及实用性。三个模式的功耗由高到低依次是睡眠、停机,最后是待机,既然待机功耗最低为什么选停机模式,这是由于待机模式与停机模式都可以RTC唤醒,但是停机模式可以通过任意管脚的外部中断唤醒,而待机模式只能通过NRST因脚伤的外部复位唤醒,局限性太大。


使用特权

评论回复
磨砂|  楼主 | 2019-6-13 19:18 | 显示全部楼层

第二部分,低功耗功能说明


watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pzajIwMTZv,size_16,color_FFFFFF,t_70.jpg


使用特权

评论回复
磨砂|  楼主 | 2019-6-13 19:18 | 显示全部楼层

/*RTC设置*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_WakeUpPinCmd(ENABLE);
PWR_BackupAccessCmd(ENABLE);
RTC_Configuration();
NVIC_Configuration();


使用特权

评论回复
磨砂|  楼主 | 2019-6-13 19:19 | 显示全部楼层
//MCU进入停机模式
void MCU_EnterSTOPMode(void)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
        /* Allow access to BKP Domain */
  PWR_BackupAccessCmd(ENABLE);
       
        RTC_WaitForLastTask();
    RTC_ClearFlag(RTC_FLAG_SEC);
        RTC_WaitForLastTask();
    while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
    RTC_SetAlarm(RTC_GetCounter()+ Stop_Time);
    //Stop_Time这个是唤醒时间,单位是秒,即Stop_Time秒后启动RTC唤醒
    RTC_WaitForLastTask();
        RTC_ClearFlag(RTC_FLAG_RSF);
        RTC_WaitForLastTask();
        RTCAlarm_IT_Enable();
        RTC_WaitForLastTask();
       
        EXTIX_Init();
        EXIT_Configuration();     
    STOP_PeripthAndClk();

    EXTI->PR = 0x00;

    /* Request to enter STOP mode with regulator in low power mode*/
    PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
       
        CLI();
    System_timer_1ms = 0;
        SYSCLKConfig_STOP();
        START_PeripthAndClk();
       
        SEI();
}


使用特权

评论回复
磨砂|  楼主 | 2019-6-13 19:19 | 显示全部楼层
最后,低功耗总结

低功耗想要做到自己满意的效果,需要程序与硬件配合,根据外部电路将引脚置成上拉或者下拉,减小不必要的电流损失;还有就是将开启的外设关闭,如果忘了关闭可能会对结果有较大影响(尤其是又添加功能的时候,记得初始化的时候加上并调试成功可以使用时,记得在进入低功耗关掉)。第一次写,可能有好多说不明白的地方,大家一起交流学习,好好体会有惊喜。


使用特权

评论回复
kxsi| | 2019-6-19 11:29 | 显示全部楼层
必须要喷喷 感觉写的很好

使用特权

评论回复
磨砂|  楼主 | 2019-7-4 13:04 | 显示全部楼层
kxsi 发表于 2019-6-19 11:29
必须要喷喷 感觉写的很好

非常感谢支持

使用特权

评论回复
keaibukelian| | 2019-7-5 10:35 | 显示全部楼层
写的很实在

使用特权

评论回复
labasi| | 2019-7-5 11:04 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
renzheshengui| | 2019-7-5 11:25 | 显示全部楼层
我很喜欢这篇**

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

3836

帖子

2

粉丝