这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32单片机退出停止模式时出现死机现象的原因分析

共6条 1/1 1 跳转至

STM32单片机退出停止模式时出现死机现象的原因分析

工程师
2019-09-26 23:52:11     打赏

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

STM32单片机退出停止模式时出现死机现象的原因分析

图1

根据手册和开发板给的源码,直接实现停止模式,但是发现退出时就发生死机现象,并没有进入恢复正常,只执行了中断函数中一个或者两个语句(是随机的)。

看例程,度娘等走了一圈,表现出来的原因应该是这样的,由于THUMB指令不支持汇编内联,所以采用如下方法实现执行汇编指令WFI,创建了一个WFI_SET()函数,其函数原型:

__asm void WFI_SET(void)

{

WFI;

}

表现出来的原因是:被Sys_Sleep()函数调用的时候,并没有在编译时把WFI_SET()的内容inline到Sys_Sleep()函数里面去,而是一个普通的函数在运行时被调用,出现了死机现象。后来将WFI_SET()函数修改为:

__asm void __inline WFI_SET(void)

{

WFI;

}

问题解决。

但根本原因是不是跳出WFI_SET()函数出的错,还是其他原因,后续进一步确认。




工程师
2019-10-01 23:54:53     打赏
2楼

分析的不错


助工
2019-10-08 21:07:48     打赏
3楼

谢谢分享


工程师
2019-10-11 15:50:41     打赏
4楼

分析得很好 不错


工程师
2019-10-12 13:34:04     打赏
5楼

学到了


工程师
2019-10-12 13:50:49     打赏
6楼

学习一下


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]