返回信息流小弟刚接触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清除。就应该这样吗?我没弄防抖呢,按键质量真不错,按一下就是一个脉冲,在仿真器里手动调上下拉制造脉冲也是一样的结果。[ema13]
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #10978同步于 2011/8/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
关于STM32外部中断的问题
AlexDino
2011/8/5镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
好像是时序的问题,清了外中断的下一个周期那个中断还是会到NVIC里,把复位和函数结束离得远了就好了...我现在把复位0放到中断1的handler里了就好了
贴NVIC的代码和EXTI初始化的代码
【 在 AlexDino (Alex Dino) 的大作中提到: 】
: 小弟刚接触STM32,遇到了诡异的事情,还请各位大牛不吝赐教。
: /*我的主程序是连续播放动画,一个按钮0连接到GPIOC0,按钮是按下接地,设置了片上内部上拉,下降沿触发最后连到NVIC的EXTI0,抢占优先级10,当暂停用。*/
: volatile FlagStatus pause = RESET;
: ...................