STM32之外部中断EXTI

STM32之外部中断EXTI

ID:38223050

大小:147.50 KB

页数:3页

时间:2019-05-28

STM32之外部中断EXTI_第1页
STM32之外部中断EXTI_第2页
STM32之外部中断EXTI_第3页
资源描述:

《STM32之外部中断EXTI》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、STM32之外部中断EXTISTM32中断控制线支持19个外部中断/事件请求,每个中断都有对应状态位和独立的触发与屏蔽设置。STM32F103的19个外部中断为:线0-15:对应GPIO口的输入中断。线16:连接到PVD输出(掉电检测,掉电时可立即保存重要数据作用)。线17:连接RTC闹钟事件。线18:连接到USB唤醒事件。每个IO口都可作为外部中断输入口的STM32的IO口远多于16个,而IO口使用的中断线只有16个。为此,GPIO管脚GPIOx.0~GPIOx.15(X=A,F,G)分别对应中断线0-15.这样每个中断线对应了7个IO口。如线

2、0对应着GPIOA.0,GPIOB.0,GPIOC.0,GPIOD.0,GPIOE.0,GPIOF.0,GPIOG.0但是每个中断线每次只能连接到1个IO口上。这样就需要通过相关的配置来决定对应的中断线被配置到哪个GPIO上了。GPIO和中断线的映射关系如下图:GPIO与中断映射配置通过函数来实现voidGPIO_EXTILineConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource )例如:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSou

3、rce2);即外部中断线2就和GPIOE映射起来了,显然是GPIOE.2与EXTI2中断线连接起来了。接着需设置中断触发方式:voidEXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)例如:EXTI_InitTypeDefEXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line4;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_T

4、rigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);以上例子设置了中断线line4的中断为下降沿触发。设置好了中断线和GPIO的映射关系,然后又设置好了中断的触发模式等参数。既然是外部中断,设计到中断我们当然需要设置NVCI的中断优先级。配置完中断优先级后,接着是编写中断服务函数。中断服务函数名字在MDK中事先有定义。但是不得不提的是,STM32的IO口外部中断只有6个,分别是:EXPORTEXT0_IRQHandleEXPORT

5、-----------------------中断线0对应的中断函数EXT1_IRQHandleEXPORT-----------------------中断线1对应的中断函数EXT2_IRQHandleEXPORT-----------------------中断线2对应的中断函数EXT3_IRQHandleEXPORT-----------------------中断线3对应的中断函数EXT4_IRQHandleEXPORT-----------------------中断线4对应的中断函数EXT9_5_IRQHandleEXPORT----

6、--------------------中断线5-9对应的中断函数EXT15_10_IRQHandle--------------------------------中断线10-15共用的中断函数编写中断服务函数经常需要使用两个函数。第一个是判断某个中断线上的中断是否发生(即标志位是否置位):ITStatusEXTI_GetITStatus(uint32_tEXTI_line);//放在中断服务函数开头,监测中断标志位第二个是清除某个中断线上的中断标志位(即清除标志位):voidEXTI_ClearITPendingBit(uint32_tEXT

7、I_Line);//放在函数的结尾常用外部中断服务函数的格式://格式一voidEXTI3_IRQHandler(void){If(EXTI_GetITStatus(EXTI_Line3)!-=RESET)//判断是否置位{Dosomething();//执行中断事件EXTI_ClearITPendingBit(EXTI_Line3);//清零LINE上标志位}}//========================================================//格式二voidEXTI3_IRQHandler(void){If(

8、EXTI_GetFlagStatus(EXTI_Line3)!-=RESET)//判断是否置位{Dosomething();//执行中断

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。