把STM32按照正确的时序进入待机模式之后, 一开始都还正常..外部中断是不能唤醒的, 除非在PA0(WAKE UP PIN)上加一个上升沿.
但是很奇怪的是, 我发现我开一下台灯, 系统居然自己复位了, 就好像我按了复位键或者按了PA0一样....随后发现,貌似外界有一点小小的干扰都会导致系统自己跑出待机模式...
请问大家有没有碰过这些问题啊?
PS:台灯放在开发板旁边,但是和开发板的电源是独立的. 另外有时候碰几下VDD那根线, 也会出现同样的问题.
以下是我进入待机模式的代码:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_WakeUpPinCmd(ENABLE); //使能WAKE-UP管脚
PWR_EnterSTANDBYMode(); //主机进入待机模式(最低功耗)
系统复位之后,也会执行 PWR_WakeUpPinCmd(DISABLE); 这句代码
应该不会有错吧...
查一下是不是复位脚或者PA0容易受台灯干扰。
PA0:可以试着直接接地。
复位脚:可以试着直接接电源。
然后看看是否还受台灯干扰
之前都试过了....硬件上平时PA0接地的;
复位应该没问题,因为我试过一些没有进入待机模式的程序,无论外界怎么干扰,都不会自动复位.
然后PA0我直接断开,让他浮空,都不行...还是一开灯,程序就复位..
对于ARM芯片(包括STM32),从STANDBY模式唤醒,代码就从复位入口开始运行,基本上等同于复位。
如果有示波器(最好是数字示波器),建议看一下:Vdd、复位脚以及PA0,当开灯时这些引脚是什么状态。
请在复位后,通过复位标志寄存器察看复位原因,也许会有所发现。
版主你好!
无论是WAKE-UP复位,还是NRST复位,或者是外部一个小小的干扰引起的复位,复位后,RCC->CSR始终是0X0C000000
现在问题是比较明显,如果没有进入待机模式,外部无论怎么干扰,都不会复位
但是如果进入待机模式,外部只要一个很微弱的干扰,例如万用表任意一个档位接STM32的任意一个管教,都会引起WAKE UP事件....
晕,在待机模式下......甚至是随便用一根导电的轻轻一碰任意一个无关的管脚,都会触发复位事件(或者是WAKE UP事件)
请问,在进入待机模式之前,那些无关的管脚都是处于什么配置模式?
无关的管脚是应该是复位之后的状态,我没有对它们进行配置.
很奇怪,找了很久,发现主要用一根杜邦线把PA0(也就是WAKE UP脚) 引出来(无论引线是悬空,或者接地) 之后, 就会发生这种问题, 比如随便拿一根导线去碰一下无关的管脚,就会唤醒系统.
但是如果不用杜邦线引出来, 一切都正常, 系统很稳定.
所以我觉得有可能是像按键抖动那样的问题?但是要对WAKE UP脚消抖,好像不太可能....奔溃了...
请把所有无用的管脚配置为模拟输入,或配置为推挽输出同时接地并输出'0'。
复位之后所有管脚为浮空输入状态,如果没有接任何外部电路,极易受到干扰。
版主...再次麻烦你....
按照你的指示,我把所有IO都配置为模拟输入或者推挽输出0, 在系统初始化前或者 在进入待机模式前 都设置一次. 结果还是原来那样子
有个问题我不太明白....
STM32的用户手册上写着:待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电(见图4)。
(见STM32 RM_CH的 4.3.5节)
那就算之前配置了IO, 进入待机模式了这些配置也将是无效的啊?对吗?
你的理解是正确的,但是如果你的系统并没有真正地进入待机模式,则情形就不一样了;你可以检查一下,看看系统是否正地进入了待机模式。
还有一点就是系统中不要有悬空的管脚,不用的管脚都要把它们接到地或接到VCC,这样可以有效地避免各种干扰。
引用: 原帖由 niantianxia 于 2010-5-17 10:46 发表
查一下是不是复位脚或者PA0容易受台灯干扰。
PA0:可以试着直接接地。
复位脚:可以试着直接接电源。
然后看看是否还受台灯干扰
请问后来怎么解决的呀?
我也遇到了 很晕倒 不过不是台灯 我一上电就自动不停的复位。
回复 12楼 fish1983 的帖子
我的是stm32 64封装的 那么多空脚,不可能不用的就接地和上拉啊,因为很多是io脚,会影响芯片的。