历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2018年12月03日 | STM32共用中断和共用中断函数的判断

2018-12-03 来源:eefocus

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()使用。

PS:

建议参考以下代码;三个中断公用一个中断函数。 
void EXTI9_5_IRQHandler(void) 

if(EXTI_GetITStatus(EXTI_Line5) != RESET) 


else if (EXTI_GetITStatus(EXTI_Line6) != RESET) 


else if (EXTI_GetITStatus(EXTI_Line7) != RESET) 


EXTI_ClearITPendingBit(EXTI_Line5); 
EXTI_ClearITPendingBit(EXTI_Line6); 
EXTI_ClearITPendingBit(EXTI_Line7); 
}


推荐阅读

史海拾趣

European Crystal Org公司的发展小趣事

面对快速变化的电子市场和技术趋势,ECO始终保持着敏锐的市场洞察力和创新精神。公司不断投入研发资源,探索新的技术方向和产品应用。同时,ECO还积极拓展新的业务领域,如物联网、智能家居等。这些努力为公司的未来发展奠定了坚实的基础,使ECO能够在激烈的市场竞争中保持领先地位。

Amaze Electronics Pte Ltd公司的发展小趣事

随着业务的不断发展,Amaze Electronics意识到国际市场的巨大潜力。于是,公司积极寻求与国际知名电子企业的合作,共同开发新产品。通过与这些企业的深度合作,Amaze Electronics不仅获得了先进的技术支持,还成功将产品打入国际市场,实现了业务的快速拓展。

Corning Cable Systems公司的发展小趣事

在深海光缆领域,Corning Cable Systems公司也展现出了强大的实力。公司成功研发出适用于深海环境的光缆产品,并在多个国际项目中得到了广泛应用。这些深海光缆不仅具有优异的传输性能,还能够在极端恶劣的海底环境下保持长期稳定运行,为跨洋通信提供了可靠的保障。

Advanced Analog公司的发展小趣事

随着技术的不断进步和市场需求的多样化,Advanced Analog的产品逐渐应用于更广泛的领域。从最初的TFT-LCD面板,到后来的数字相机、手持装置、网络通讯装置等领域,Advanced Analog都提供了完整的解决方案和优质的服务。通过与各行业合作伙伴的紧密合作,Advanced Analog的产品助力众多电子设备实现了更高效、更稳定的性能,推动了整个电子行业的发展。

CTS [CTS Corporation]公司的发展小趣事

CTS Corporation的创始人在1896年创立了这家公司,当时的主要业务是设计并生产高品质的电话产品。随着电话技术的普及和通信行业的快速发展,CTS凭借其出色的产品质量和创新的设计理念,逐渐在电话市场中占据了一席之地。公司的创始人凭借其敏锐的商业洞察力和不懈的努力,为CTS奠定了坚实的基础。

GradConn Ltd公司的发展小趣事

GradConn Ltd的创立初期,公司便明确了其专注于电子连接器和同轴电缆组件的市场定位。这一战略选择使GradConn能够迅速在通讯、工业、医疗和汽车等领域建立起稳定的客户基础。通过不断研发创新,GradConn推出了一系列高质量的产品,如板对板连接器、电缆组件连接器以及SIM卡连接器等,满足了市场对精密、可靠连接解决方案的迫切需求。

问答坊 | AI 解惑

网络防火墙概述

网络防火墙早已是一般企业用来保护网络安全的主要安全机制。然而,企业网络的整体安全涉及层面相当广,防火墙不仅无法解决所有的安全问题,防火墙所使用的控制技术、自身的安全保护能力、网络结构、安全政策等因素都会影响企业网络的安全性及效能。 ...…

查看全部问答>

选择D题加入QQ群,一起讨论吧~

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 选择D题的请进我们的群22373240  …

查看全部问答>

求救高手,一个通信耦合问题!

问题是这样的:我现在要把一个“密室”里的音视频信号采集以后传输出来,信号采集传感器装在一个小车上,平时小车在“密室”预装的轨道上来回移动,轨道铺到密道口,密道是“S”形的,周围是1.8m厚的水泥墙,不能用有线通信,但是用无线的话信号也 ...…

查看全部问答>

请教高手,怎么实现C8051的GPIO实现UART的读取

        EXTERN XBYTE gxbUartBitNum     _AT_ (0x990F);/////当前接受数据的位数 EXTERN XBYTE gxbUart2s      _AT_ (0x991F);   //ie. SBUF2 EXTERN XBYTE gxbUart2f ...…

查看全部问答>

印刷的参考手册哪里能买到?680多页

                                 电子版的不方便,需要反复看,英文的最好…

查看全部问答>

dsp2812的外设存贮器如何用啊?

外扩一个AD采样芯片,如何为采样来的数据分配空间啊?我们用XINTF2空间来激活片选,理应把数据存到XINTF2空间内吧?怎么分配呢?我们在XINTF2空间里随便分了一块,可读不出来数啊?XINTF2空间的地址和数据总线上的数据是如何联系起来的呢?  ...…

查看全部问答>

求助TDA7419设置问题

各位高手大侠,我目前用TDA7419做音频处理,结果是MCU与TDA7419的I2C通信正常了,TDA7419都能正常ACK。但是就是没有声音出来。 请求各位高手帮帮忙指点小弟。 我的外部硬件设置是,外部MUTE脚悬空,其他的是SE2先做一路输入,输入信号为1V  ...…

查看全部问答>

变压器发热严重的问题

我最近遇到了一个问题,需要大家帮我解答一下,在逆变器件正常的情况下,变压器发热严重的问题应该怎么调整?…

查看全部问答>