stm32退出停止模式出现死机现象分析

本文探讨了STM32在退出停止模式时出现的死机现象。通过分析《STM32中文参考手册》,作者尝试使用停止模式以降低功耗,但在退出时遇到系统死机的问题。问题出在WFI_SET()函数没有被正确内联,导致在运行时调用该函数引起死机。通过修改WFI_SET()函数为内联汇编解决了问题,但作者将继续调查根本原因。
摘要由CSDN通过智能技术生成

stm32退出停止模式出现死机现象分析

         根据《STM32中文参考手册》描述,STM32的低功耗模式有三种:睡眠模式,停止模式,待机模式。(有些资料说其实只有两种模式,不存在睡眠模式一说)。其中待机模式可实现系统的最低功耗,所以本来想采用该模式。但是《STM32中文参考手册》提到从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等),板子接了屏,再快再快也需要时间去加载界面,所以速度还是慢了。之后采用尝试采用停止模式,图1为停止模式的进入和退出方法。
 
                                                                 图1
        根据手册和开发板给的源码,直接实现停止模式,但是发现退出时就发生死机现象,并没有进入恢复正常,只执行了中断函数中一个或者两个语句(是随机的)。

        看例程,度娘等走了一圈,表现出来的原因应该是这样的,由于THUMB指令不支持汇编内联,所以采用如下方法实现执行汇编指令WFI,创建了一个WFI_SET()函数,其函数原型:
          __asm void WFI_SET(void)
         {
                WFI;   
           }
        表现出来的原因是:被Sys_Sleep()函数调用的时候,并没有在编译时把WFI_SET()的内容inline到Sys_Sleep()函数里面去,而是一个普通的函数在运行时被调用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值