打印
[应用相关]

关于STM32外部中断的问题

[复制链接]
553|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fhguo1990|  楼主 | 2015-4-16 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟刚接触STM32,遇到了诡异的事情,还请各位大牛不吝赐教。

/*我的主程序是连续播放动画,一个按钮0连接到GPIOC0,按钮是按下接地,设置了片上内部上拉,下降沿触发最后连到NVIC的EXTI0,抢占优先级10,当暂停用。*/
volatile FlagStatus pause = RESET;

void EXTI0_IRQHandler(void)
{        
    pause = SET;
    while(pause == SET);
    EXTI_ClearFlag (EXTI_Line0);
}

还有一个按钮1,其他设置一样,配置到了NVIC的EXTI1,抢占优先级9。

void EXTI1_IRQHandler(void)
{   
    pause = RESET;
    EXTI_ClearFlag (EXTI_Line1);
}


设想的情况是按钮0暂停,按钮1播放,但是实际情况按下按钮0暂停后,必须按两下按钮1才能继续播放,仿真器观察到按一下按钮1的时候把EXTI寄存器的挂起清零了,再按一下1才会把pause清除。就应该这样吗?我没弄防抖呢,按键质量真不错,按一下就是一个脉冲,在仿真器里手动调上下拉制造脉冲也是一样的结果
沙发
后会无期1| | 2015-4-16 20:30 | 只看该作者
好像是时序的问题,清了外中断的下一个周期那个中断还是会到NVIC里,把复位和函数结束离得远了就好了...我现在把复位0放到中断1的handler里了就好了

使用特权

评论回复
板凳
我是MT| | 2015-4-16 20:46 | 只看该作者
贴NVIC的代码和EXTI初始化的代码

使用特权

评论回复
地板
我思故我在12345| | 2015-4-16 20:52 | 只看该作者
你有没有把所有的中断向量表都配上中断服务程序?可能触发了优先级较高的中断源

使用特权

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

本版积分规则

23

主题

254

帖子

2

粉丝