STM32多个外部中断疑问

[复制链接]
8288|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楼的问题,应该是程序的问题。
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部