STM32低功耗停机模式(STOP)管脚中断(INTERRUPT)唤醒实现及优化

更新时间:2023-05-16 09:29:26 阅读: 评论:0

STM32低功耗停机模式(STOP)管脚中断(INTERRUPT)唤醒实现及优化STM32 低功耗停机模式(STOP)管脚中断(INTERRUPT)唤醒实现及优化
1. 介绍
STM32具有多种低功耗模式,当前以STM32L4系列的低功耗模式最为丰富,此处基于STM32L476和STM32CUBEIDE环境介绍停机模式(STOP)管脚中断唤醒的实现(HAL库)。STOP模式只是停⽌代码执⾏,唤醒(其实是continue的作⽤)后继续执⾏后⾯的代码,⽽不是重启之后从初始代码开始执⾏。
2. 低功耗模式
STM32L4的低功耗模式,相⽐其它系列的芯⽚,多了⼏种:
三种STOP模式的区别,可以参考⽂档:
STM32L4系列各种低功耗模式的特性总结如下:
3. 管脚中断配置
STOP模式可以通过通⽤管脚中断(Interrupt)或事件(Event)的⽅式唤醒,这⾥介绍通⽤管脚中断唤醒的⽅式, 选择⼀个GPIO管脚进⾏配置,这⾥⽤PC13作为唤醒源。preference是什么意思
英语教研组计划成都电脑学校设置PC13为GPIO_EXTI⽅式:
为PC13选择其中⼀种中断触发⽅式,包括上升沿触发,下降沿触发和电平变化触发(即上升沿下降沿都触发):
然后使能中断:
瑙鲁怎么读保存后⽣成代码:
4. STOP模式进⼊及中断唤醒
通过HAL库函数可进⼊STOP模式,其中库函数有⼀个参数,指定唤醒时的来源,有两个可选:PWR_STOPENTRY_WFI 和
PWR_STOPENTRY_WFE, 分别对应管脚中断唤醒和管脚事件唤醒,这⾥我们⽤PWR_STOPENTRY_WFI,即管脚中断唤醒。
clustering>英语4级词汇如果要进⼊STOP0模式,实施下⾯代码:
HAL_PWREx_EnterSTOP0Mode(PWR_STOPENTRY_WFI);
如果要进⼊STOP1模式,实施下⾯代码:
HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
如果要进⼊STOP2模式,实施下⾯代码:
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
在执⾏到上述代码时,MCU就进⼊了STOP状态,等待管脚上发⽣信号变化产⽣的中断唤醒。在接受
到中断唤醒后,会先进⼊中断处理函数,再出来执⾏进⼊STOP模式代码后⾯的代码。再PC13的管脚中断处理函数⾥,需要重新调⽤初始化时钟配置函数,以使得因为进⼊STOP模式关闭的时钟重新打开。PC13管脚的中断处理函数:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
永磁体if (GPIO_Pin==GPIO_PIN_13)
{
SystemClock_Config();
}
}
这样STOP模式的进⼊和唤醒就实现了。
5. STOP模式进⼊及中断唤醒的优化
当设计中存在多种中断源,包括调试器中断和其它管脚中断时,这些中断不是想⽤于唤醒STOP状态的中断,此时就需要增加必要的设计,实现:
1. 当指定的中断源产⽣中断时,唤醒STOP状态;
2. 当⾮指定的中断源产⽣中断唤醒STOP后,⽴即重新进⼊STOP模式。
英语专业毕业论文实现⽅式如下,先增加⼀个判断变量flag_recog:
uint8_t flag_recog = 0;
在进⼊STOP0模式时,采⽤如下代码:
flag_recog = 0;
while(flag_recog == 0) HAL_PWREx_EnterSTOP0Mode(PWR_STOPENTRY_WFI);
在进⼊STOP1模式时,采⽤如下代码:
flag_recog = 0;
while(flag_recog == 0) HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
在进⼊STOP2模式时,采⽤如下代码:
flag_recog = 0;
while(flag_recog == 0) HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
这样,当异常中断引起唤醒时,因为flag_recog保持为0,所以会再次执⾏进⼊STOP模式的代码。
当指定的唤醒中断到来时,如这⾥的PC13,则修改中断处理函数为:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin==GPIO_PIN_13)
{
flag_recog = 1;
英语四级成绩查询
SystemClock_Config();
雅思官方报名网}
}
从⽽在中断处理函数⾥将flag_recog设置为⾮0,在退出中断处理函数后,也会退出while(flag_recog == 0)的循环,执⾏后⾯的代码。通过以上优化,提⾼了STOP低功耗模式应⽤的可靠性,避免异常时间的唤醒。
6. 库函数对应关系
STM32L4系列将STOP模式分为了STOP0, STOP1和STOP2模式,实际上,STOP0和STOP1和以前的STOP模式在库函数上有对应关系。譬如以前的STOP模式的库函数在STM32L4的定义:

本文发布于:2023-05-16 09:29:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/110451.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   唤醒   模式
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图