×
单片机 > 单片机程序设计 > 详情

STM32F0 USART唤醒STOP模式

发布时间:2020-05-28 发布时间:
|

   最近考虑使用STM32F030/042系列做些低功耗的产品,比如车载导航配对的433/315拷贝型遥控器,需要串口通信和STOP模式。



但是遇到比较蛋疼坑爹的事情是,STM32F0系列自带的串口唤醒功能不支持030/042系列,如下:


#define EXTI_Line25      ((uint32_t)0x02000000)  /*!< Internal interrupt line 25

                                                      Connected to the USART1 wakeup

                                                      event, not applicable for STM32F030 devices */

#define EXTI_Line26      ((uint32_t)0x04000000)  /*!< Internal interrupt line 26

                                                      Connected to the USART2 wakeup

                                                      event, applicable only for 

                                                      STM32F072 devices */




然后这就TMD蛋疼了,又得按照以前的方式,在休眠之前把RX设置为中断输入脚;被中断唤醒之后,恢复为RX功能。这样操作起来就是不方面,而且容易丢失好几个字节的数据。


//================================================================================================================


/****************************************************************************************

** 函数名称: STM32F030_STOP(void)

** 功能描述: 设置RTC、RX中断唤醒STOP模式

** 参    数:     void

** 返 回 值:   void

** 日   期: 2017年02月27日

**---------------------------------------------------------------------------------------

** 修 改 人: WEN(QQ214490357/wenshijian4@163.com)

** 日   期: 2017年03月13日

**--------------------------------------------------------------------------------------

****************************************************************************************/


void STM32F030_STOP(void)


{


RCC_Close();//关闭全部时钟,GPIO设为AN输入

RTC_Config(WAKUP_10S0);//设置RTC唤醒周期,10S

EXIT_Control(INT_RTC_WKP,ENABLE);//RTC中断

EXIT_Control(INT_RX_FALL,ENABLE);//USART-RX中断 

while(1) 

{

IWDG_ReloadCounter();//清狗------ IWDG周期12S

WakeupByRx=0;//在USART-RX中断里面置为1

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入低功耗模式,并通过RTC定期唤醒

if(WakeupByRx==1)

break;

}

EXIT_Control(INT_RTC_WKP,DISABLE);//关闭RTC中断

EXIT_Control(INT_RX_FALL,DISABLE);//关闭USART-RX中断


//接下来恢复系统时钟及USART设置等。。。。。。。。。。。。。。。。


}


//================================================================================================================


为什么要两种唤醒方式?因为实际需要,软件一般都要开启看门狗IWDG,而进入STOP模式后IWDG其实还是一直在计数的,如果不定期清除容易被IWDG重启。所以STOP模式的唤醒方式其实有两个:RTC事件+RX中断。




这种方式有个缺点就是容易丢失串口数据,但如果对于数据很多不怕丢几串数据的我来说,这根本不是事儿~~


关键字:STM32F0  USART唤醒  STOP模式

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址