[STM32L1] STM32L152 exti会连续触发两次,弱弱求教这么设计的用意

[复制链接]
2897|11
 楼主| huangqi412 发表于 2014-12-15 20:25 | 显示全部楼层 |阅读模式
  这玩意坑死人不偿命。  开始没注意到这个,后来才发现这奇葩现象,  具体现象就是EXTI中断会在2.8US内连续触发两次,解决办法是在中断函数里延时若干个US。   将之复现到STM32L-DISCOVER上给各位验证:
打开DISCOVER温度测量例程,修改如下:

int main(void)
{
  /* Configure Clocks for Application need */
  RCC_Configuration();
  /* Configure RTC Clocks */
  RTC_Configuration();
  /* Set internal voltage regulator to 1.8V */
  PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1);
  /* Wait Until the Voltage Regulator is ready */
  while (PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) ;
  /* Enable debug features in low power modes (Sleep, STOP and STANDBY) */
#ifdef  DEBUG_SWD_PIN
  DBGMCU_Config(DBGMCU_SLEEP | DBGMCU_STOP | DBGMCU_STANDBY, ENABLE);
#endif

修改为
int main(void)
{
  
  RCC_Configuration();//原样
  RTC_Configuration();//原样
  PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1);//原样
  while (PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) ;//原样
Init_GPIOs();  //LED  KEY                  KEY=EXTI0           LED_BULE=PB6  LED_GREEN=PB7
AHBENR = 0XFFFFFFFF;//打开GPIO   
configureWakeup ();//开唤醒中断   唤醒中断=EXTI20
RTC_WakeUpCmd(ENABLE);  //使能
PWR_ClearFlag(PWR_FLAG_WU); //清除标志
while(1)
  ;  //卡死这里坐等中断

将中断函数修改
void EXTI0_IRQHandler(void)
{
GPIO_TOGGLE(GPIOB,LD_GREEN_GPIO_PIN);//闪灯

  setUserButtonFlag();

  EXTI_ClearITPendingBit(EXTI_Line0);
}
void RTC_WKUP_IRQHandler(void)
{

  if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
  {
GPIO_TOGGLE(GPIOB,LD_BLUE_GPIO_PIN);//闪灯
   RTC_ClearITPendingBit(RTC_IT_WUT);
   EXTI_ClearITPendingBit(EXTI_Line20);   
  }
}

下载直接运行,示波器两支表笔接到PB6,PB7,依次设置PB6和PB7上升沿触发,触发电平2V, 等待闹钟中断或者按动按键中断,见证坑爹奇迹的时刻到了,LED并没有一闪一闪亮晶晶,反倒是示波器捕捉到了一个个的接近3US的高脉冲看的眼睛冒星星。        

mmuuss586 发表于 2014-12-15 20:49 | 显示全部楼层

IO加滤波或者说消抖还是有必要的;
 楼主| huangqi412 发表于 2014-12-15 20:56 | 显示全部楼层
mmuuss586 发表于 2014-12-15 20:49
IO加滤波或者说消抖还是有必要的;

你根本没仔细看。。。  我手好准每次能抖出3US啊。。。  EXTI20 你给我抖一个试试。。。
 楼主| huangqi412 发表于 2014-12-15 21:04 | 显示全部楼层
望香版能解答  @香水城  
Ketose 发表于 2014-12-16 09:35 | 显示全部楼层
huangqi412 发表于 2014-12-15 20:56
你根本没仔细看。。。  我手好准每次能抖出3US啊。。。  EXTI20 你给我抖一个试试。。。 ...

楼主,你的手可能没有那么抖,可是你能保证按键接触不会抖吗?
 楼主| huangqi412 发表于 2014-12-16 11:48 来自手机 | 显示全部楼层
Ketose 发表于 2014-12-16 09:35
楼主,你的手可能没有那么抖,可是你能保证按键接触不会抖吗?

麻烦用你高贵的手或者牛X的按钮帮我抖exti20  这货没外部连接好不好
 楼主| huangqi412 发表于 2014-12-16 11:49 来自手机 | 显示全部楼层
还是等厂家人出面 外人再多猜也是白瞎
Ketose 发表于 2014-12-16 12:40 | 显示全部楼层
楼主,有没有断开PB6,PB7,测试下中断源是否波形正常?
 楼主| huangqi412 发表于 2014-12-16 13:12 来自手机 | 显示全部楼层
Ketose 发表于 2014-12-16 12:40
楼主,有没有断开PB6,PB7,测试下中断源是否波形正常?

这是两个led   还是等厂家人回帖 外人乱猜
 楼主| huangqi412 发表于 2014-12-16 13:18 来自手机 | 显示全部楼层
各位副班版 能否劳驾喊一下香版或者别的厂家筒子
 楼主| huangqi412 发表于 2014-12-16 13:26 来自手机 | 显示全部楼层
高级的调试器应该能捕捉记录事件  将内核,nvic,exti的所有过程时间点搞出来分析
 楼主| huangqi412 发表于 2014-12-16 20:28 | 显示全部楼层
找到表面原因了,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:    好久不嚼槟榔

622

主题

24960

帖子

18

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