当前位置:首页 > 单片机 > 单片机
[导读]一、背景有个需求,IO口检测上升沿,然后做相应的动作。在此记录STM32F103的外部中断结构及配置方法,以备下次快速上手使用。有许多不太明白,又是老司机(:-D)帮忙,真的是站在别人的肩膀上会让你看的更远,走的更

一、背景有个需求,IO口检测上升沿,然后做相应的动作。在此记录STM32F103的外部中断结构及配置方法,以备下次快速上手使用。有许多不太明白,又是老司机(:-D)帮忙,真的是站在别人的肩膀上会让你看的更远,走的更快,感谢老司机。二、正文STM32f103有68个可屏蔽中断。(但是,真正能用的其实远没有这么多,原因下面会详述。)有16个可编程的优先等级,优先等级的概念可详见我的另外一篇博客《STM32之NVIC(中断向量、优先级)简述》,链接:"http://www.cnblogs.com/ChYQ/p/5859974.html",接着看中断向量表,  如下图:

该中断向量表从高到低按照默认的中断优先级排序将所有可用的中断以表的形式列出来。仔细来看每一列代表的意义:"优先级":无需多言,默认的中断优先级次序。"优先级类型":即表明,这个对应的默认优先级是否可被配置更改,以使其优先级升高或者降低。"名称":外部中断名称简写"说明":通过这个我们就可以清楚知道前一列的"名称"代表的是哪个具体的外设中断。"地址":这个地址即当对应的外部中断来时,若是使能了该外部中断,则MCU会将PC指针跳转到该地址,编译器一般会在该地址内保存对应的中断处理函数指针,进而可进入到相应的中断处理函数做相应的处理。然后说说外部中断事件(EXTI),外部中断事件由20个(互联型)/19个产生事件/中断的边沿检测器组成,白话说,即GPIO口可检测到对应IO口的上升沿/下降沿/双边沿事件,进而产生相应中断。    接着看外部中断/时间框图,如下图:

从最右来看,输入线连接至GPIO口,检测外部引脚的电平信号,上升沿/下降沿触发器与软件中断事件触发器,经过"或"器件传入下一级,意味着,这两类信号可独立引起中断/事件。经过"或"后,信号出现了分支,信号一路进入请求挂起寄存器,若是中断屏蔽寄存器设置为允许该信号,则一起"与"使能对应的中断。另一路则是同事件屏蔽寄存器信号相"与",通过则产生对应的事件。说到这,中断和事件又有什么不同呢?中断既是正常理解的中断,中断信号通过后,会让MCU的PC值跳转到相应的中断入口,找到对应的中断处理函数,然后进行中断处理。事件则用来向其他外设模块发送脉冲事件,通知外设去做相应的事情,就以ADC接收到脉冲事件后自动  开始ADC转换为例进行说明。在ADC中,初始化ADC的结构体如下:typedefstruct{uint32_tADC_Mode;FunctionalStateADC_ScanConvMode;FunctionalStateADC_ContinuousConvMode;uint32_tADC_ExternalTrigConv;uint32_tADC_DataAlign;uint8_tADC_NbrOfChannel;}ADC_InitTypeDef;选项"ADC_ExternalTrigConv",即是设置ADC的触发启动方式,可配置为软件触发启动,当该值配置为"ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO"的时候,则ADC会在EXT产生脉冲事件的同时,开始自动触发ADC转换,与软件触发启动不同的是,这种方式是硬件自动完成,不需要软件参与。当然,不限定只能为EXT,还可以是定时器等等。最后说说上文提及的,为什么明明有68个可屏蔽中断,可实际却远没有这么多。上图提及,GPIO口通过连接到外部中断/事件线上来完成相应的中断请求,然后看看外部中断通用I/O口映像,如下图:

外部中断/事件线只有16个,IO口却有A~G(7)组,每组有16个引脚,从上图可看出,实际上一次性可用的外部中断/事件也只能有16个,并不是IO口有多少,就能有多少个外部中断/事件。    譬如说若是第一组PA0用了第一个中断/事件线,那么P(x)0就不能再被用作外部中断输入口了。(x  为B~G)。外部中断结构大致就介绍到此。接下来说说,结合库函数,如何让外部中断配置成功并工作。一一般步骤为:-->初始化对应IO口为输入;-->使能对应IO口时钟,并设定IO口与外部中断/事件线的联系;      注意:由于此处用了外部中断,所以对应的复用时钟要打开!       RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能GPIO时钟复用      //设定GPIO口与中断/事件线联系库函数voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource);"GPIO_PortSource":选择对应的GPIO口。"GPIO_PinSource":选择对应的外部中断/事件线。-->初始化外部中断/事件线,并配置触发模式(上边沿/下边沿/双边沿);voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct)结构体"EXTI_InitStruct"如下:typedefstruct{//外部中断/事件线是否被使能//"EXTI_Line0"->"EXTI_Line15"uint32_tEXTI_Line;//中断模式/事件模式EXTIMode_TypeDefEXTI_Mode;//触发模式(上边沿/下边沿/双边沿)EXTITrigger_TypeDefEXTI_Trigger;//"Enable"或"Disable"FunctionalStateEXTI_LineCmd;}EXTI_InitTypeDef;-->设置NVIC,并使能中断;详见NVIC博客,不再详述-->写中断处理函数。STM32F103外部中断函数共有6个:EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandlerEXTI15_10_IRQHandler外部中断"0"->"4"有独立的中断处理函数;外部中断"5"->"9"共用中断函数"EXTI9_5_IRQHandler";外部中断"10"->"15"共用中断函数"EXTI15_10_IRQHandler";中断函数示例如下:voidEXTI9_5_IRQHandler(void){//获取中断状态if(EXTI_GetITStatus(EXTI_IMR_MR8)!=RESET){//清除挂起位EXTI_ClearITPendingBit(EXTI_IMR_MR8);}}三、参考链接STM32externalinterrupthttp://www.programering.com/a/MDM4kzMwATg.html    STM32外部中断学习笔记    http://blog.csdn.net/zzwdkxx/article/details/9036679至此,记录完毕。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭