打印
[STM32L1]

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

[复制链接]
2618|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 | 只看该作者
望香版能解答  @香水城  

使用特权

评论回复
5
Ketose| | 2014-12-16 09:35 | 只看该作者
huangqi412 发表于 2014-12-15 20:56
你根本没仔细看。。。  我手好准每次能抖出3US啊。。。  EXTI20 你给我抖一个试试。。。 ...

楼主,你的手可能没有那么抖,可是你能保证按键接触不会抖吗?

使用特权

评论回复
6
huangqi412|  楼主 | 2014-12-16 11:48 | 只看该作者
Ketose 发表于 2014-12-16 09:35
楼主,你的手可能没有那么抖,可是你能保证按键接触不会抖吗?

麻烦用你高贵的手或者牛X的按钮帮我抖exti20  这货没外部连接好不好

使用特权

评论回复
7
huangqi412|  楼主 | 2014-12-16 11:49 | 只看该作者
还是等厂家人出面 外人再多猜也是白瞎

使用特权

评论回复
8
Ketose| | 2014-12-16 12:40 | 只看该作者
楼主,有没有断开PB6,PB7,测试下中断源是否波形正常?

使用特权

评论回复
9
huangqi412|  楼主 | 2014-12-16 13:12 | 只看该作者
Ketose 发表于 2014-12-16 12:40
楼主,有没有断开PB6,PB7,测试下中断源是否波形正常?

这是两个led   还是等厂家人回帖 外人乱猜

使用特权

评论回复
10
huangqi412|  楼主 | 2014-12-16 13:18 | 只看该作者
各位副班版 能否劳驾喊一下香版或者别的厂家筒子

使用特权

评论回复
11
huangqi412|  楼主 | 2014-12-16 13:26 | 只看该作者
高级的调试器应该能捕捉记录事件  将内核,nvic,exti的所有过程时间点搞出来分析

使用特权

评论回复
12
huangqi412|  楼主 | 2014-12-16 20:28 | 只看该作者
找到表面原因了,

使用特权

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

本版积分规则

个人签名:    好久不嚼槟榔

622

主题

24960

帖子

18

粉丝