打印

STM32多个外部中断疑问

[复制链接]
7433|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
f43067|  楼主 | 2010-7-8 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位一下,STM32的外部中断如果EXTI5和6同时中断,进入EXTI9_5_IRQHandler()函数中,先执行5的中断处理,然后接着执行6的中断,那这样进入中断时压栈的数据不就不对了吗?进中断压栈是按EXTI5中断把数据压栈的,但却同时执行了EXTI6的中断处理。
我想问每次进入中断是只能执行一个中断处理还是可以连续执行多个中断?
沙发
ST_ARM| | 2010-7-8 17:20 | 只看该作者
每次进入中断是可以连续执行多个中断。

使用特权

评论回复
板凳
f43067|  楼主 | 2010-7-8 17:40 | 只看该作者
我现在遇到的问题是两个中断都进入EXTI9_5_IRQHandler()函数中,一个是3ms中断一次,一个是500ms中断一次,这样总出问题,然后我把500ms中断的那个IO口换成PA3,在EXTI3_IRQHandler()函数中去执行,这样就没问题了。所以我怀疑是不是一次处理多个中断会有问题。

使用特权

评论回复
地板
香水城| | 2010-7-8 17:56 | 只看该作者
每次进入中断时,可以连续执行多个中断源的请求,但你的程序要能够区分正在处理哪个请求,同时在处理完这个请求后清除相应的请求位。

3楼的问题,应该是程序的问题。

使用特权

评论回复
5
f43067|  楼主 | 2010-7-8 18:02 | 只看该作者
本帖最后由 f43067 于 2010-7-8 18:06 编辑

我是这样处理的:
void EXTI9_5_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line5) != RESET)  
   {  
       .......
       EXTI_ClearITPendingBit(EXTI_Line5);
   }  
  
    if(EXTI_GetITStatus(EXTI_Line6) != RESET)  
   {  
       .......
       EXTI_ClearITPendingBit(EXTI_Line6);
   }        
}

我感觉这样没问题啊。
程序的问题我也检查过了,没找到原因。。。。

我试着吧5和6的中断判断改成if  else类型的,保证每次进中断只能执行一个函数,但这样改完上电后直接死机,可能是进入某种错误类型的中断里了

使用特权

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

本版积分规则

7

主题

20

帖子

0

粉丝