打印
[STM32F1]

stm32f103停止模式下的唤醒问题

[复制链接]
13324|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jaywhitejay|  楼主 | 2014-7-29 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jaywhitejay 于 2014-7-30 14:46 编辑

大家好!求助这样的问题。
①我按这个步骤进行了实验,成功:系统3.3v供电-> 进入停止模式-> 按键PB9中断-> 成功唤醒。
②我按这个步骤进行了实验,失败:系统3.3v供电-> 进入停止模式-> 系统断电后2.2v电池供电-> 上电PA0唤醒。进行最后一步时PA0无法唤醒。
对于PA0的中断,我进停止模式前开启了管脚唤醒:   PWR_WakeUpPinCmd(ENABLE);  并设置了上升沿触发中断。
附程序。献丑了
int main (void)
{

RCC_Configuration();  //配置时钟                     
GPIO_Configuration(); //配置IO
NVIC_Configuration();
EXTI_Configuration();
while(1)
{
    PWR_WakeUpPinCmd(ENABLE);  
           PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);//进入停止模式
  }
}

void EXTI9_5_IRQHandler(void) /*中断唤醒*/
{
  if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  {   
           RCC_Configuration();                                  //初始化时钟
    EXTI_ClearITPendingBit(EXTI_Line9);  /*清除中断标记*/

  }
}

void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0) != RESET)
   {
     EXTI_ClearITPendingBit(EXTI_Line0);
   }     
}



沙发
airwill| | 2014-7-29 17:45 | 只看该作者
有问题:
退出停止模式, 并不进中断, 而是走的复位线路.

使用特权

评论回复
板凳
jaywhitejay|  楼主 | 2014-7-30 08:41 | 只看该作者
airwill 发表于 2014-7-29 17:45
有问题:
退出停止模式, 并不进中断, 而是走的复位线路.

谢谢回复。可是就算是不进中断,至少程序也被唤醒了。可是我这就是没有动静

使用特权

评论回复
地板
jaywhitejay|  楼主 | 2014-7-30 11:34 | 只看该作者
不要沉啊

使用特权

评论回复
5
jaywhitejay|  楼主 | 2014-7-30 14:48 | 只看该作者
没人回答么

使用特权

评论回复
6
香水城| | 2014-7-30 16:46 | 只看该作者
②我按这个步骤进行了实验,失败:系统3.3v供电-> 进入停止模式-> 系统断电后2.2v电池供电-> 上电PA0唤醒。进行最后一步时PA0无法唤醒。

系统断电后只有2.2V电池供电。这个电池是接在Vdd、Vbat引脚上呢,还是只接在Vbat引脚上呢。

后者的话,就只有备份域的RTC(如果RTC模块的时钟源时LSE的话)和备份寄存器还在工作。

当再次上电,MCU属于上电复位,不存在什么唤醒不唤醒的问题。

你现在是MCU起不来么?

使用特权

评论回复
7
jaywhitejay|  楼主 | 2014-7-31 11:55 | 只看该作者
香水城 发表于 2014-7-30 16:46
②我按这个步骤进行了实验,失败:系统3.3v供电-> 进入停止模式-> 系统断电后2.2v电池供电-> 上电PA0唤醒。 ...

谢谢版主。
我VDD/VBAT都接电池的。PA0没有接电池。
再次上电的话,其实是从2.2v变到了3.3v。MCU好像没有起来,因为没有任何现象出现。
我是希望掉电后RAM中的数据还是保持,再次上电后继续使用这些数据。是不是停止模式不能实现我的需求啊

使用特权

评论回复
8
zhang_haojia| | 2014-7-31 14:34 | 只看该作者
jaywhitejay 发表于 2014-7-31 11:55
谢谢版主。
我VDD/VBAT都接电池的。PA0没有接电池。
再次上电的话,其实是从2.2v变到了3.3v。MCU好像没有 ...

掉电后肯定RAM中没有数据了,能不能掉电前将RAM的数据写进Flash呢?重新上电后先读取Flash

使用特权

评论回复
9
香水城| | 2014-7-31 14:49 | 只看该作者
第一:VDD/VBAT都接2.2电池,再次上电的3.3V是怎么接进来的?

第二:“没有任何现象”,你是如何判断MCU是否起来,期望出现怎样的现象?有没有量过此时各个电源引脚上的电压值?复位引脚的电平?还有你使用HSI还是HSE?如何判断HSE有没有起振?可以先尝试使用芯片内部HSI作为系统时钟(芯片上电默认就是这个状态,不要去turn on HSE)。

第三:如果VDD上一直有电的话(高于正常工作电压值),STOP模式下SRAM中的数据和寄存器的值都是可以保持的,退出STOP模式后可以使用。

使用特权

评论回复
10
jaywhitejay|  楼主 | 2014-7-31 16:20 | 只看该作者
zhang_haojia 发表于 2014-7-31 14:34
掉电后肯定RAM中没有数据了,能不能掉电前将RAM的数据写进Flash呢?重新上电后先读取Flash ...

谢谢回复。我接电池了,只是电池的电量有点低

使用特权

评论回复
11
jaywhitejay|  楼主 | 2014-7-31 16:55 | 只看该作者
本帖最后由 jaywhitejay 于 2014-8-1 08:28 编辑
香水城 发表于 2014-7-31 14:49
第一:VDD/VBAT都接2.2电池,再次上电的3.3V是怎么接进来的?

第二:“没有任何现象”,你是如何判断MCU是 ...

谢谢香水城回复我。
第一:3.3V是直接接进VDD/VBAT的,电池是通过二极管到管脚的,到管脚的电压是2.2V。
第二/第三:我现在开了DBGMCU->CR位开启了低功耗调试模式。调试步骤和现象如下:
①上主电-->断主电PVD进低功耗->上主电无现象,上电产生的上升沿没有唤醒MCU,暂停发现停在WFI();
②上主电-->断主电PVD进低功耗->上主电无现象,暂停调试发现程序停在WFI->调试继续->上电产生的上升沿到这一刻才把程序唤醒,过了很久

这就奇怪了。就差暂停调试这一步,就能唤醒了。我想来想去,会不会上电的同时产生的外部中断,这个中间的时间差太短还是怎么的呢?

使用特权

评论回复
12
jaywhitejay|  楼主 | 2014-8-7 10:00 | 只看该作者
顶一下

使用特权

评论回复
13
pofu007| | 2014-8-7 13:10 | 只看该作者
PWR_WakeUpPinCmd(ENABLE);  虽然是复用的PA0,但是这个并不是EXTI_0中断,因为WKUP是用于从standby模式唤醒的,
After waking up from Standby mode, program execution restarts in the same way as after a Reset (boot pins sampling, vector reset is fetched, etc.).
所以你想用PA0作为外部中断输入,从stop mode唤醒的话,PA0的配置,应该同PB9一样,而不是用你认为的 PWR_WakeUpPinCmd(ENABLE); 就使能了EXTI0中断。

使用特权

评论回复
14
jaywhitejay|  楼主 | 2014-8-8 13:50 | 只看该作者
pofu007 发表于 2014-8-7 13:10
PWR_WakeUpPinCmd(ENABLE);  虽然是复用的PA0,但是这个并不是EXTI_0中断,因为WKUP是用于从standby模式唤 ...

谢谢你。停止模式成功了。你说的很正确。但我的问题出在在中断中进了停止模式,导致异常。
现在的问题主要是功耗有点高,达到5mA级别了,我再研究研究,不行再发帖。

使用特权

评论回复
15
pofu007| | 2014-8-8 13:59 | 只看该作者
jaywhitejay 发表于 2014-8-8 13:50
谢谢你。停止模式成功了。你说的很正确。但我的问题出在在中断中进了停止模式,导致异常。
现在的问题主 ...

我也试过让stm32进入stop mode然后用I/O口的外部中断来唤醒,这个要看你对低功耗的要求了,因为要达到data sheet上说的stop mode电流14uA,要求把I/O配置为模拟输入状态,这个状态下是无法用I/O触发外部中断的,我尝试过是这样的,还没想到正确的方法,我接了3*3的矩阵按键,这样就需要用到6个I/O口,在这种情况下进入stop mode待机的电流就有100uA。

使用特权

评论回复
16
jaywhitejay|  楼主 | 2014-8-9 11:36 | 只看该作者
pofu007 发表于 2014-8-8 13:59
我也试过让stm32进入stop mode然后用I/O口的外部中断来唤醒,这个要看你对低功耗的要求了,因为要达到dat ...

我现在用PVD唤醒,把其他IO全部配成模拟输入,都有5mA

使用特权

评论回复
17
bangy| | 2015-10-4 14:46 | 只看该作者
谢谢楼主的帖子,最近在写停止模式下的一点东西,卡在这里了。 楼主可否提供以下完整程序呢,不胜感激~0.0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

23

帖子

0

粉丝