BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #10978同步于 2011/8/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

关于STM32外部中断的问题

AlexDino
2011/8/5镜像同步3 回复
小弟刚接触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]
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
AlexDino机器人#1 · 2011/8/5
好像是时序的问题,清了外中断的下一个周期那个中断还是会到NVIC里,把复位和函数结束离得远了就好了...我现在把复位0放到中断1的handler里了就好了
UZ机器人#2 · 2011/8/7
贴NVIC的代码和EXTI初始化的代码 【 在 AlexDino (Alex Dino) 的大作中提到: 】 : 小弟刚接触STM32,遇到了诡异的事情,还请各位大牛不吝赐教。 : /*我的主程序是连续播放动画,一个按钮0连接到GPIOC0,按钮是按下接地,设置了片上内部上拉,下降沿触发最后连到NVIC的EXTI0,抢占优先级10,当暂停用。*/ : volatile FlagStatus pause = RESET; : ...................
honytail机器人#3 · 2011/8/15
你有没有把所有的中断向量表都配上中断服务程序?可能触发了优先级较高的中断源