共用中断和共用中断函数的判断

2023-11-01 57浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。

STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢?

使用 EXTI_GetITStatus()来查询哪根线产生了中断。比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否产生了中断的。

还有 :当初你在设置中断引脚的时候都是不能把PB1和PD1同时设置为中断源的。如果非要设置,后面设置的会把前面的覆盖掉的。

编写中断服务函数经常需要使用两个函数。

**个是判断某个中断线上的中断是否发生(即标志位是否置位):

ITStatus EXTI_GetITStatus(uint32_t EXTI_line); //放在中断服务函数开头,监测中断标志位

第二个是清除某个中断线上的中断标志位(即清除标志位):

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);//放在函数的结尾

常用外部中断服务函数的格式: //格式一

void EXTI3_IRQHandler(void) {

If( EXTI_GetITStatus(EXTI_Line3)!-=RESET)//判断是否置位 {

Dosomething();//执行中断事件

EXTI_ClearITPendingBit(EXTI_Line3);//清零LINE上标志位 }

}

//======================================================== //格式二

void EXTI3_IRQHandler(void) {

If( EXTI_GetFlagStatus(EXTI_Line3)!-=RESET)//判断是否置位 {

Dosomething();//执行中断事件

EXTI_ClearFlag(EXTI_Line3);//清零LINE上标志位 }

}

//========================================================

区别:EXTI_GetITStatus()会先判断该中断是否使能,若使能了再判断中断标志位,而EXTI_GetFlagStatus()直接判断中断标志位是否置位(马虎点)。所以说方式一的EXTI_GetITStatus()会好点,一般配合EXTI_ClearITPendingBit()使用。


百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台