关于STM32进入待机模式后很容易自动复位

[复制链接]
14953|54
 楼主| ripny 发表于 2010-5-15 19:32 | 显示全部楼层 |阅读模式
把STM32按照正确的时序进入待机模式之后, 一开始都还正常..外部中断是不能唤醒的, 除非在PA0(WAKE UP PIN)上加一个上升沿.
但是很奇怪的是, 我发现我开一下台灯, 系统居然自己复位了, 就好像我按了复位键或者按了PA0一样....随后发现,貌似外界有一点小小的干扰都会导致系统自己跑出待机模式...
请问大家有没有碰过这些问题啊?
PS:台灯放在开发板旁边,但是和开发板的电源是独立的. 另外有时候碰几下VDD那根线, 也会出现同样的问题.

以下是我进入待机模式的代码:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_WakeUpPinCmd(ENABLE); //使能WAKE-UP管脚
PWR_EnterSTANDBYMode();   //主机进入待机模式(最低功耗)

系统复位之后,也会执行 PWR_WakeUpPinCmd(DISABLE); 这句代码

应该不会有错吧...
IJK 发表于 2010-5-17 10:46 | 显示全部楼层
查一下是不是复位脚或者PA0容易受台灯干扰。
PA0:可以试着直接接地。
复位脚:可以试着直接接电源。
然后看看是否还受台灯干扰
 楼主| ripny 发表于 2010-5-17 14:37 | 显示全部楼层
之前都试过了....硬件上平时PA0接地的;
复位应该没问题,因为我试过一些没有进入待机模式的程序,无论外界怎么干扰,都不会自动复位.

然后PA0我直接断开,让他浮空,都不行...还是一开灯,程序就复位..
IJK 发表于 2010-5-17 14:57 | 显示全部楼层
对于ARM芯片(包括STM32),从STANDBY模式唤醒,代码就从复位入口开始运行,基本上等同于复位。

如果有示波器(最好是数字示波器),建议看一下:Vdd、复位脚以及PA0,当开灯时这些引脚是什么状态。
香水城 发表于 2010-5-17 17:00 | 显示全部楼层
请在复位后,通过复位标志寄存器察看复位原因,也许会有所发现。
 楼主| ripny 发表于 2010-5-30 10:31 | 显示全部楼层
香主你好!
无论是WAKE-UP复位,还是NRST复位,或者是外部一个小小的干扰引起的复位,复位后,RCC->CSR始终是0X0C000000
现在问题是比较明显,如果没有进入待机模式,外部无论怎么干扰,都不会复位
但是如果进入待机模式,外部只要一个很微弱的干扰,例如万用表任意一个档位接STM32的任意一个管教,都会引起WAKE UP事件....
 楼主| ripny 发表于 2010-5-30 10:38 | 显示全部楼层
晕,在待机模式下......甚至是随便用一根导电的轻轻一碰任意一个无关的管脚,都会触发复位事件(或者是WAKE UP事件)
香水城 发表于 2010-5-30 12:07 | 显示全部楼层
请问,在进入待机模式之前,那些无关的管脚都是处于什么配置模式?
 楼主| ripny 发表于 2010-5-30 18:01 | 显示全部楼层
无关的管脚是应该是复位之后的状态,我没有对它们进行配置.

很奇怪,找了很久,发现主要用一根杜邦线把PA0(也就是WAKE UP脚) 引出来(无论引线是悬空,或者接地) 之后, 就会发生这种问题, 比如随便拿一根导线去碰一下无关的管脚,就会唤醒系统.

但是如果不用杜邦线引出来, 一切都正常, 系统很稳定.

所以我觉得有可能是像按键抖动那样的问题?但是要对WAKE UP脚消抖,好像不太可能....奔溃了...
香水城 发表于 2010-5-30 18:04 | 显示全部楼层
请把所有无用的管脚配置为模拟输入,或配置为推挽输出同时接地并输出'0'。

复位之后所有管脚为浮空输入状态,如果没有接任何外部电路,极易受到干扰。
 楼主| ripny 发表于 2010-5-30 22:36 | 显示全部楼层
香主...再次麻烦你....

按照你的指示,我把所有IO都配置为模拟输入或者推挽输出0, 在系统初始化前或者 在进入待机模式前 都设置一次. 结果还是原来那样子

有个问题我不太明白....
STM32的用户手册上写着:待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电(见图4)。
(见STM32 RM_CH的 4.3.5节)
那就算之前配置了IO, 进入待机模式了这些配置也将是无效的啊?对吗?
香水城 发表于 2010-5-31 21:24 | 显示全部楼层
你的理解是正确的,但是如果你的系统并没有真正地进入待机模式,则情形就不一样了;你可以检查一下,看看系统是否正地进入了待机模式。

还有一点就是系统中不要有悬空的管脚,不用的管脚都要把它们接到地或接到VCC,这样可以有效地避免各种干扰。
mxh0506 发表于 2012-6-30 11:01 | 显示全部楼层
没有下文了? 如果有结论的话, 这是个很有借鉴意义的贴子. 先做个记号.
我要学stMCU 发表于 2013-11-12 11:35 | 显示全部楼层
楼主问题提出来了,问什么不结贴??我也遇到和楼主相似的问题,是在没进入待机模式的时候,随便碰一个IO口,就会复位,但是一旦插上JLINK就没有影响 ,所以我连调试都没有办法.
戈卫东 发表于 2013-11-12 11:47 | 显示全部楼层
EMI干扰.
你的板子EMC做的不够或根本就没有
我要学stMCU 发表于 2013-11-12 13:05 | 显示全部楼层
嗯,可能吧,开发板,应该没有EMC吧,我的问题解决了,因为我是在中断里进入待机模式的,所以中断了加了一个判断,就可以了。
Marco-Marco 发表于 2017-9-16 22:24 | 显示全部楼层
尴尬。7年之后我也遇到了。用的STM32L0. 关键是不稳定,时有时无,所以很难判断
lattice1 发表于 2019-2-27 14:27 | 显示全部楼层
牛X了,9年后,遇到同样问题,STM32L053R8,进入stop睡眠模式,有时因为外部的连接电线,螺丝刀碰到金属产品外壳,人的触摸,不小心都可能唤醒。2年了,各种方法,软件,硬件,都想了办法,如故。 不知道我牛了逼,还是ST牛X。
adgfadrga 发表于 2020-12-2 14:31 | 显示全部楼层
lattice1 发表于 2019-2-27 14:27
牛X了,9年后,遇到同样问题,STM32L053R8,进入stop睡眠模式,有时因为外部的连接电线,螺丝刀碰到金属产 ...

你这个像esd事件了
Youngmanzs 发表于 2021-1-2 11:08 | 显示全部楼层
遇到同样的问题,能不能说说,后面你怎么解决的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部