历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2021年04月22日 | STM32 外部中断简介

2021-04-22 来源:eefocus

简介:STM32 IO 口中断的一些基础概念。STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处。STM32F103 的中断控制器支持 19 个外部中断/事件请求。

每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103的19个外部中断为:


线0~15:对应外部IO口的输入中断。


线16:连接到PVD输出。


线17:连接到RTC闹钟事件。


线18:连接到USB唤醒事件。


在库函数中,配置GPIO与中断线的映射关系的函数GPIO_EXTILineConfig()来实现的:


voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource)


该函数将GPIO端口与中断线映射起来,使用范例是:


GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);


将中断线2与GPIOE映射起来,那么很显然是GPIOE.2与EXTI2中断线连接了。设置好中断线映射之后,那么到底来自这个IO口的中断是通过什么方式触发的呢?接下来我们就要设置该中断线上中断的初始化参数了。


中断线上中断的初始化是通过函数EXTI_Init()实现的。EXTI_Init()函数的定义是:


voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);


下面我们用一个使用范例来说明这个函数的使用:


1.EXTI_InitTypeDef EXTI_InitStructure;


2.EXTI_InitStructure.EXTI_Line=EXTI_Line4;    //中断线的标号 取值范围为EXTI_Line0~EXTI_Line15


3.EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式,可选值为中断 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event。


4.EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //触发方式,可以是下降沿触发 EXTI_Trigger_Falling,上升沿触发 EXTI_Trigger_Rising,或者任意电平(上升沿和下降沿)触发EXTI_Trigger_Rising_Falling


5.EXTI_InitStructure.EXTI_LineCmd = ENABLE;


6.EXTI_Init(&EXTI_InitStructure); 

 既然是外部中断,涉及到中断我们当然还要设置 NVIC 中断优先级。 


1.NVIC_InitTypeDef NVIC_InitStructure;


2.NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能按键外部中断通道


3.NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2, 


4.NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级 2


5.NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 


6.NVIC_Init(&NVIC_InitStructure);   

配置完中断优先级之后,接着我们要做的就是编写中断服务函数。中断服务函数的名字是在MDK中事先有定义的。这里需要说明一下,STM32的IO口外部中断函数只有6个,分别为:


EXPORTEXTI0_IRQHandler


EXPORTEXTI1_IRQHandler


EXPORTEXTI2_IRQHandler


EXPORTEXTI3_IRQHandler


EXPORTEXTI4_IRQHandler


EXPORTEXTI9_5_IRQHandler


EXPORTEXTI15_10_IRQHandler


中断线0-4每个中断线对应一个中断函数,中断线5-9共用中断函数EXTI9_5_IRQHandler,中断线10-15共用中断函数EXTI15_10_IRQHandler。


在编写中断服务函数的时候会经常使用到两个函数,


第一个函数是判断某个中断线上的中断是否发生(标志位是否置位):


ITStatusEXTI_GetITStatus(uint32_tEXTI_Line);


这个函数一般使用在中断服务函数的开头判断中断是否发生。另一个函数是清除某个中断线上的中断标志位:


voidEXTI_ClearITPendingBit(uint32_tEXTI_Line);


这个函数一般应用在中断服务函数结束之前,清除中断标志位。


常用的中断服务函数格式为:


voidEXTI2_IRQHandler(void)


{


if(EXTI_GetITStatus(EXTI_Line3)!=RESET)//判断某个线上的中断是否发生


{


中断逻辑…


EXTI_ClearITPendingBit(EXTI_Line3);//清除LINE上的中断标志位


}


}


使用IO口外部中断的一般步骤:


1)初始化IO口为输入。


2)开启IO口复用时钟,设置IO口与中断线的映射关系。


3)初始化线上中断,设置触发条件等。


4)配置中断分组(NVIC),并使能中断。


5)编写中断服务函数。


推荐阅读

史海拾趣

Anadigm公司的发展小趣事

Anadigm是一家曾经存在的半导体公司,专注于可编程模拟信号处理器(PASP)技术。以下是Anadigm公司发展的相关故事:

  1. 公司成立与初期发展:Anadigm公司成立于1997年,总部位于美国加利福尼亚州圣塔莫尼卡市。公司的创始人致力于开发一种新型的可编程模拟信号处理器(PASP),以应对传统模拟电路设计的局限性。通过引入数字技术,Anadigm旨在提供更灵活、高性能的模拟信号处理解决方案。

  2. PASP技术的推出与市场应用:Anadigm公司于2000年推出了其首款可编程模拟信号处理器产品系列。这些器件具有灵活的可编程性和高度集成的特点,能够适应多种应用场景,包括电力管理、医疗设备、汽车电子和工业控制等领域。Anadigm的PASP技术受到了行业的关注,并在市场上取得了一定的成功。

  3. 技术创新与产品优化:Anadigm公司不断投入研发,致力于改进其PASP技术并推出更先进的产品。公司持续与客户合作,了解市场需求并进行技术创新,以满足不断变化的行业需求。Anadigm的产品不断优化,性能不断提升,赢得了客户的信赖和市场份额的扩大。

  4. 合并与收购:尽管Anadigm公司在PASP技术方面取得了一定的成就,但面临着激烈的市场竞争和资金压力。在公司运营一段时间后,Anadigm于2008年被美国半导体公司Exar Corporation收购。此次收购使得Anadigm成为Exar的全资子公司,继续在模拟信号处理领域发展。

  5. 最终终止业务:然而,随着时间的推移,Anadigm在市场上的地位逐渐下滑,未能在激烈的竞争中保持竞争优势。最终,Exar Corporation于2014年宣布终止Anadigm的业务,并关闭其产品线。这标志着Anadigm作为一个独立的实体在半导体行业的终结。

以上是Anadigm公司发展的一些主要故事,展示了该公司从创立到终止业务的发展历程。

Corsair Electrical Connectors Inc公司的发展小趣事

在国内市场取得一定成绩后,Corsair开始将目光投向了更广阔的国际市场。公司积极参加国际电子展会,与海外客户建立联系,拓展销售渠道。同时,Corsair还根据不同国家和地区的市场需求,调整产品策略,提供定制化的解决方案。这些努力使得Corsair的产品逐渐走进了国际市场,公司的影响力也不断扩大。

Computer Conversions Corp公司的发展小趣事

随着云计算和大数据技术的兴起,计算机行业迎来了新一轮的变革。Computer Conversions Corp公司迅速调整战略,开始研发与云计算相结合的新型转换设备。通过不断地技术革新和产品迭代,公司成功推出了一系列高效、稳定的云计算转换解决方案,帮助众多企业顺利迁移到了云平台,从而保持了在行业中的领先地位。

Allianc公司的发展小趣事

随着公司规模的不断扩大和市场份额的增加,Allianc公司开始关注社会责任和可持续发展。公司积极参与公益事业和环保活动,努力为社会做出贡献。同时,公司还加强了对产品环保性能的研发和改进,推出了多款符合环保标准的产品。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了电子行业中一个成功公司可能经历的一些关键阶段和挑战。希望这些故事能够满足您的需求,并为您了解电子行业提供一定的参考。

爱浦电子(AIPULNION)公司的发展小趣事

爱浦电子自成立以来,一直致力于模块电源技术的研发与创新。在成立初期,公司便凭借其专业的研发团队和先进的生产设备,成功研发出多款具有竞争力的模块电源产品。随着技术的不断进步,爱浦电子不断对产品进行升级和优化,以满足市场日益增长的需求。公司不仅通过了ISO9001质量管理体系认证,还成功获得了CE、RoHS等国际认证,进一步提升了产品的品质和竞争力。

FUJITSU(富士通)公司的发展小趣事

随着公司业务的不断扩展,爱浦电子于XXXX年成立了广州优联电气科技有限公司作为其分支机构。这一举措不仅进一步扩大了公司的业务范围和市场影响力,还为公司提供了更多的发展机遇和合作伙伴。广州优联电气科技有限公司在爱浦电子的业务开拓、经营及配套服务方面发挥了重要作用,推动了公司整体业务的快速发展。

这五个故事只是爱浦电子发展起来的一部分缩影,它们展现了公司在技术创新、市场拓展、服务升级、创新引领以及分支机构成立等方面的努力和成就。正是这些不懈的努力和持续的进步,使得爱浦电子在电子行业中脱颖而出,成为一家备受瞩目的高新技术企业。

问答坊 | AI 解惑

汽车内串行通信总线

越来越多的电子系统都需要更可靠的互连解决方案,  而LIN总线正成为汽车串行通信的新兴标准。 对于汽车制造商来说,非常重要的三大问题就是燃料效率、可靠性和成本。随着汽车设计中电子系统越来越多,问题也变得越来越复杂。这些子系统每个都 ...…

查看全部问答>

龙芯,为你祝福

从2004年问世到2008年,龙芯走的很艰难。 不但要面对Intel 和AMD的强大优势,而且还要面对国内各种质疑。 作为国内有真正自主知识产权的一颗中国芯,从出生到成长,历经艰辛。 龙芯组有很多超强的人,许多人都要身兼数职。。。。前端,后端,验证, ...…

查看全部问答>

4*4列阵键盘(c语言)

4*4列阵键盘,含电路图…

查看全部问答>

4MBytes的内存设计

学计算机组织结构性能设计那本英文教材 教授出了个内存设计图 翻译过来大概如下 用 128K x 8SRAM   1Mb x 1DRAM   256KB x 4DRAM (三个都要用到,多次用到不限制) 设计出 4MBbytes的主内存. 要求画出图; 可 ...…

查看全部问答>

参与调查 抽取戴尔XPS? M153、灵越 Mini 1011 笔记本双重大奖 9月底抽奖!!!

eeworld携手戴尔? 共同开展“达人”系列活动之“戴”你赢双本,并为参与广大网友准备了丰厚礼品,特等奖1名:黑色戴尔XPS? M1530 、粉色Inspiron?灵越 Mini 1011 笔记本各一台 幸运奖100名,其中:《程序员》杂志 50名        ...…

查看全部问答>

passthru中获取MAC及其设置另一网卡MAC的问题?

双网卡冗余容错,同IP,同MAC地址,一个工作,另一个热备份。当需要切换时,passthru获取一块网卡的MAC地址保存到 CHAR * ADAPTER->MACADDRESS  成员变量,把其设置到另一个网卡的 ADAPTER->MACADDRESS  中,具体代码怎么实现 ...…

查看全部问答>

下载内核文件有错 有人遇到过没

手上有块ARM9的板子,下载前两步都没问题,(jtag下载), 当要下载IMAGE文件时,PB4.2环境下,提示网络控制口失败, 从RJ45  ---> 继电保护器----> 网络芯片(CS8900),估计哪个个地方出了问题呢? 如何查硬件的错误??  软件没问题,相 ...…

查看全部问答>

温度1602

用1602显示温度,可以显示到小数位。…

查看全部问答>

解决你STmcu量产和ISP的问题

西尔特http://www.xeltek.com.cn/系列编程器产品完全支持目前所有ST系列MCU的烧录,包括ST6,ST7,STR7,STR9,STM32,STM8系列等,从量产到ISP,满足各类需求,有需求的朋友不妨看看哦.…

查看全部问答>

改善多路输出电源负载交错性能

多路输出电源普遍采用针对一路输出进行闭环的PWM控制方式,而其他的辅助输出采用间接稳压方式。由于只对主输出进行闭环控制,占空比的改变对辅助输出的负载影响较大,尤其是从轻载到满载变化时,交叉调节的性能变差(通常>5%)。如果对未闭环的辅 ...…

查看全部问答>