打印
[STM32F1]

stm32休眠奇葩问题

[复制链接]
1168|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
coderdd|  楼主 | 2017-8-16 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 coderdd 于 2017-8-17 18:05 编辑

目前发现,用stm32f103开的外部中断。每次进入外中断后,我会先关闭外中断(因为这是摇晃,我只要它有唤醒功能即可,普通情况下不需要它一直外中断),等休眠前几秒再打开外中断,这样单片机就可以每次都可以唤醒。这都是正常的。但是,如果这个外中断在休眠前我没有开启,这导致每次进入休眠时单片机却休眠不了了!必须休眠前开启这个外中断才可以正常休眠,什么鬼??休眠和外中断有啥关系?
void EXTI9_5_IRQHandler(void)//B5摇晃,进入外中断后就关掉这个中断
{
  led_status_flag=1;
  if(EXTI_GetITStatus(EXTI_Line5)!= RESET)        
  {
    free_to_halt_cout=0;
    Close_Shake_INT();
  }
  EXTI_ClearITPendingBit(EXTI_Line5);        
}
------------------------------------------------
Open_Shake_INT();//这一句不加上就进入不了休眠,什么情况??
MCU_Run_StopMode();//MCU休眠

--------------------------
void Close_Shake_INT()//关摇晃中断
{
  NVIC_InitTypeDef NVIC_InitStructure;     
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //摇晃中断
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
  NVIC_Init(&NVIC_InitStructure);
}
void Open_Shake_INT()//打开摇晃中断
{
  NVIC_InitTypeDef NVIC_InitStructure;   

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}






沙发
coderdd|  楼主 | 2017-8-16 10:04 | 只看该作者
好吧,有解决方案了,用EXTI_InitStructure.EXTI_LineCmd = DISABLE;可以完美解决。

使用特权

评论回复
板凳
mmuuss586| | 2017-8-16 11:18 | 只看该作者

解决了就好,谢谢分享;

使用特权

评论回复
地板
airwill| | 2017-8-17 08:28 | 只看该作者
看来是没有吃透休眠唤醒的功能.
另外提个建议: 不要把字体设置这么大, 行数那么多, 我看得头大.

使用特权

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

本版积分规则

101

主题

385

帖子

11

粉丝