历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2019年03月11日 | STM32F0 USART唤醒STOP模式

2019-03-11 来源:eefocus

   最近考虑使用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中断。




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


推荐阅读

史海拾趣

FOTEK公司的发展小趣事

随着业务的不断拓展,福禄克意识到全球化布局的重要性。1970年代,公司在英国设立了首个海外生产基地,随后又在荷兰和中国等地建立工厂。这一系列举措不仅降低了生产成本,还使福禄克能够更贴近全球市场需求,提供更加快速和灵活的服务。同时,福禄克在全球范围内建立了广泛的销售和服务网络,进一步巩固了其市场地位。

Advanced Ceramic X Corporation公司的发展小趣事

福禄克并未止步于传统电子测试工具领域,而是积极探索新的增长点。2005年,公司推出了一系列室内空气质量(IAQ)测试工具,旨在为HVAC、建筑物维修和IAQ专业人员提供综合的精密仪器产品组合。这些产品凭借其精确性、可靠性和易用性,迅速获得了市场的认可。此后,福禄克进一步拓展至生物医学领域,推出了电气安全性测试仪、病患模拟器等先进设备,在生物医学测试和模拟产品领域取得了领先地位。

ETC2公司的发展小趣事

ETC2公司深知服务对于企业的重要性,因此不断优化服务体系以提升竞争力。他们建立了完善的客户服务体系,为用户提供24小时在线客服支持,确保用户在使用过程中遇到问题能够及时得到解决。此外,ETC2公司还定期举办用户培训活动,帮助用户更好地了解和使用ETC设备。这些举措不仅提高了用户的满意度和忠诚度,也为ETC2公司赢得了更多的市场份额。

BVLED公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,BVLED公司开始积极拓展国内外市场。在国内,公司加强了与大型照明企业的合作,通过联合推广和定制服务等方式提高了产品知名度。在国外,公司积极参加国际展览和贸易洽谈会,与国际知名企业建立了合作关系,成功打开了国际市场的大门。

Bergquist Company公司的发展小趣事

在60年代,Bergquist Company作为一家私人拥有的美国公司,在明尼苏达州的一个小城市诞生。创立初期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,创始人凭借着对导热材料行业的深刻洞察和坚定信念,带领公司一步步走过了创业初期的艰难岁月。他们不断研发新产品,提升产品质量,逐渐在市场上获得了一席之地。

DLG Hanbit公司的发展小趣事

为了保证产品的品质,DLG Hanbit公司建立了严格的质量管理体系,并引进了国际先进的质量检测设备。公司还积极参与国际标准制定,与全球知名电子企业建立了合作关系。通过不断提升产品品质和服务水平,DLG Hanbit公司的产品在国际市场上获得了认可,公司也逐渐实现了国际化战略。

问答坊 | AI 解惑

ZT:一个技术人员悟到的管理秘诀

我在原来的公司做的时候,就注意观察公司在管理上的成功和失败的经验教训,并在网络上找很多关于管理的文章。     管理上有很多故事,让我领悟到管理就是设计一个合理的机制。          故事之一:分粥          分粥的故 ...…

查看全部问答>

驱动加载出错

我写了个驱动程序,编译没错,但是insmod的时候就出现 moduletest: please compile with -fno-common insmod: cannot insert `moduletest.ko\': Invalid module format (-1): Exec format error的错误,不知道为什么,求高手指教. 源码如下: #inclu ...…

查看全部问答>

s3c2440 for wince4.2 的 eboot启动时出现的网络端口问题,高手请进给解答一下。

启动后,DNW出现下列打印信息: WinCE NAND Boot v1.00 Jun 11 2007 11:50:13 Start Eboot... Start Launch...0 Microsoft Windows CE Ethernet Bootloader Common Library Version 1.0 Built Mar 13 2003 23:05:42 Microsoft Windows CE SMD ...…

查看全部问答>

STM32菜鸟程序!

拿到STM32开发板三天了!写了几个程序!程序简单但对入门还是有点帮助的!我自己下次调试成功了的! 上传供一起刚入门的朋友分享下! 第一天学习:MDK工程建立和GPIO 第二天学习:RCC和按键程序 第三天学习:EXTI程序(一个中断按键程序) 每 ...…

查看全部问答>

请教2407数据区与程序存储区的问题!谢谢

我用2407做一个液晶显示,因为有存放大量字符数据的常量数组,我把这些数组定义为const unsigned char 类型。cmd文件如下: -o LCD.out - stack 60 MEMORY {     PAGE 0:    /* Program Memory */      & ...…

查看全部问答>

电风扇模拟控制系统设计 求助 !!真的不会啊!!

电风扇模拟控制系统设计1.用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:“自然风”、 “常风”和“睡眠风”。2.设计 “自然风”、 “常风”和“睡眠风” 三个风类键用于设置风类; 设计一个“摇头” 键用于控制电机摇头。 &nb ...…

查看全部问答>

MSP430极品的中文资料,本人极力推荐!

偶然发现这个PDF,与别的430资料不同,这里全是经典,传上来与大家分享下!…

查看全部问答>

趣味实验

家里有一个上小学的女孩子,有一天兴冲冲的跟我说,要做一个伟大的实验给我看,并且不许我偷看。看着她神秘的样子,我想小孩子搞什么名堂。大概过了半个多小时,她跑进来把我屋里面的灯给关了,然后又匆匆忙忙的跑出去。不一会儿,她小心翼翼的端着 ...…

查看全部问答>

知道一些MOS管的选择方法

        我们知道, MOS管最常见的应用可能是电源中的开关元件,此外,它们对电源输出也大有裨益。服务器和通信设备等应用一般都配置有多个并行电源,以支持N+1 冗余与持续工作 (图1)。各并行电源平均分担负载,确保 ...…

查看全部问答>

液晶显示图片

在执行以下函数的时候 用仿真发现 i 只能加到14,然后就归零(也就是程序退不出第一个for循环),为什么?按道理说不该这样啊 显示上半屏函数: Write_Command(0x34); //  *******显示上半屏内容设置    for(i=0;i…

查看全部问答>