网站页面设计尺寸,在建设银行网站申请完信用卡,重庆景点简笔画,土木在线一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器#xff0c;其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中#xff0c;有一些比较特殊的中断#xff1a; 中断编号13 EXTI… 一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中有一些比较特殊的中断 中断编号13 EXTI0EXTI线0中断 中断编号14 EXTI1EXTI线1中断 中断编号15 EXTI2EXTI线2中断 中断编号16 EXTI3EXTI线3中断 中断编号17 EXTI4EXTI线4中断 中断编号30 EXTI9_5EXTI线[9:5]中断 中断编号47 EXTI15_10EXTI线[15:10]中断 中断编号8 PVD连到EXTI的电源电压检测(PVD)中断 中断编号48 RTCAlarm连到EXTI线16的RTC闹钟时间 中断编号49 USB唤醒连到EXTI的线17的USB待机唤醒事件 对于STM32F107来说还有一个连到EXTI线18的以太网唤醒事件 对于STM32f103来说有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。 1.1.1 EXTI线与IO映射关系4 EXTI线0~15对应外部IO口的输入中断。STM32F103供给IO口使用的中断线只有16个但是 STM32F103的IO口 却远远不止16 个所以STM32把GPIO管脚GPIOx.0~GPIOx.15(xA,B,C,D,E,F,G)分别对应中断线0~15。 这样子每个中断线对应了最多9个IO口以线0为例它对应了GPIOA0、GPIOB0、 GPIOC0、GPIOD0、GPIOE0、GPIOF0和 GPIOG0。而中断线每次只能连接到1个IO口上 这样就需要通过配置决定对应的中断线配置到哪个GPIO上了。 GPIO和中断线映射关系是在寄存器AFIO_EXTICR1 ~ AFIO_EXTICR4中配置的。 1.1.2 框图 其中按照控制功能划分共分为4个部分有两条主线 一条是由输入线到NVIC中断控制器一条是由输入线到脉冲发生器。 其中 输入线是线路的信息输入端它可以通过配置寄存器设置为任何一个GPIO口或者是一些外设的事件。输入线一般都是存在电平变化的信号;边沿检测电路(标号1)上升沿触发选择寄存器和下降沿触发选择寄存器。边沿检测电路以输入线作为信号输入端如果检测到有边沿跳变就输出有效信号1就输出有效信号1到标号2部分电路否则输入无效信号0。边沿跳变的标准在于对两个触发选择寄存器的设置;或门电路(标号2)它的两个信号输入端分别是软件中断事件寄存器和边沿检测电路的输入信号。或门电路只要输入端有信号1就会输出1所以就会输出信号1到标号3电路和标号4电路与门电路(标号3)两个信号输入端分别是中断屏蔽寄存器和标号2电路信号- 如果中断屏蔽寄存器设置为0时不管从标号2电路输出的信号特性如何最终标号3电路输出的信号都是0如果中断屏蔽寄存器设置为1时最终标号3电路输出的信号才由标号2电路输出信号决定 与门电路(标号4)输入端来自标号2电路以及来自于事件屏蔽寄存器。可以简单的控制事件屏蔽寄存器来实现是否产生事件的目的。标号4电路输出有效信号1就会使脉冲发生器电路产生一个脉冲而无效信号就不会使其产生脉冲信号。脉冲信号产生可以给其他外设电路使用例如定时器模拟数字转换器等这样的脉冲信号一般用来触发TIM或者ADC开始转换。 1.2 功能说明 1.2.1 硬件中断选择 要产生中断必须先配置好并使能中断线 根据需要的边沿检测设置2个触发寄存器(EXTI_RTSR和EXTI_FTSR)同时在中断屏蔽寄存器(EXTI_IMR)的相应位写1允许中断请求配置对应到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位使得20个中断线中的请求可以被正确地响应当外部中断线上发生了期待的边沿时将产生一个中断请求对应的挂起位(EXTI_PR)也随之被置1在挂起寄存器(EXTI_PR)的对应位写1将清除该中断请求。 1.2.2 硬件事件选择 如果需要产生事件必须先配置好并使能事件线 根据需要的边沿检测通过设置2个触发寄存器(EXTI_RTSR和EXTI_FTSR)同时在事件屏蔽寄存器(EXTI_EMR)的相应位写1允许事件请求 当事件线上发生了需要的边沿时将产生一个事件请求脉冲对应的挂起位(EXTI_PR)不被置1。 1.2.3 软件中断/事件的选择 通过在软件中断/事件寄存器写1也可以通过软件产生中断/事件请求 配置20个中断/事件线屏蔽位(EXTI_IMR EXTI_EMR)设置软件中断寄存器的请求位(EXTI_SWIER)。 二、EXTI相关寄存器 在前面的介绍中所涉及的寄存器共有7个 上升沿触发选择寄存器(EXTI_RTSR)下降沿触发选择寄存器(EXTI_FTSR)挂起寄存器(EXTI_PR)软件中断事件寄存器(EXTI_SWIER)中断屏蔽寄存器(EXTI_IMR)事件屏蔽寄存器(EXTI_EMR)外部中断配置寄存器 (AFIO_EXTICRx)。 2.1 上升沿触发选择寄存器(EXTI_RTSR) 该寄存器主要用于控制输入线进来的输入信号上升沿时是否在边沿检测电路被检测出20位共控制20条EXTI线 2.2 下降沿触发选择寄存器(EXTI_FTSR) 该寄存器主要用于控制输入线进来的输入信号下升沿时是否在边沿检测电路被检测出20位共控制20条EXTI线 2.3 挂起寄存器(EXTI_PR) 该寄存器的作用主要有两个 检测外部中断线上是否发生了选择的边沿事件如果发生了该位置1并将信号传递给与门电路进而进入NVIC中在该位手动(软件)写入1可以清除之前中断信号的1主要作用是进入中断后清除中断位防止多次进入中断。 2.4 软件中断事件寄存器(EXTI_SWIER) 2.5 中断屏蔽寄存器(EXTI_IMR) 该寄存器的主要作用只有一个就是是否允许来自输入线上的中断信号进入NVIC中断控制器。 2.6 事件屏蔽寄存器(EXTI_EMR) 该寄存器的主要作用只有一个就是是否允许来自输入线线上的事件进入脉冲发生器。 2.7 外部中断配置寄存器 (AFIO_EXTICRx) AFIO_EXTICR1寄存器配置EXTI0到EXTI3线包含的外部中断的引脚包括PAx到PGx x0到3。 AFIO_EXTICR2寄存器配置EXTI4到EXTI7线 AFIO_EXTICR3寄存器配置EXTI8到EXTI11线 AFIO_EXTICR4寄存器配置EXTI12到EXTI15线 特别注意配置AFIO寄存器之前需要使能AFIO的时钟。 2.7.1 AFIO_EXTICR1 2.7.2 AFIO_EXTICR2 2.7.3 AFIO_EXTICR3 2.7.4 AFIO_EXTICR4 三、外部中断源码 3.1 外部中断的初始化步骤 EXTI中断配置流程如下 (1) GPIO口初始化 外设时钟配置通过配置RCC_APB2ENR寄存器使能GPIO时钟GPIO配置设置GPIO工作模式为上拉/下拉输入模式、浮空输入模式即配置GPIOx_CRL、GPIOx_CRH寄存器 (2) EXTI外部中断配置 AFIO时钟配置通过配置RCC_APB2ENR寄存器使能AFIO时钟设置GPIO与EXTI映射关系通过AFIO_EXTICRx寄存器配置IO对应的EXTI输入线设置EXTI屏蔽、上升沿、下降沿即设置EXTI_EMR、EXTI_RTSR、EXTI_FTSR寄存器 (3) 设置NVIC; 参考《STM32F103嵌套向量中断控制器》设置中断优先级分组、设置响应优先级和抢断优先级、使能相应中断位 (34) 中断处理函数 设置中断服务函数(包括清除中断标志)。 3.2 源码实现 3.2.1 GPIO口初始化 首先调用gpio_init函数进行GPIO初始化具体参考《STM32F103 GPIO和串口配置》。 比如配置GPIOC5为上拉输入 gpio_init(PC5,GPI_UP,HIGH); // PC5接按键KEY0 3.2.2 外部中断配置函数 typedef enum //外部中断触发方式
{FALLING 0x01,RISING 0x02,LEVEL 0x03
}TRIGGER_MODE;/********************************************************************************************************* * Description:外部中断配置函数* 决定中断线配置到哪个GPIO口 * AFIO-EXTICR[0~3] 每个寄存器的低16位每4位决定1路中断线 * 0000:PAx 0001:PBx 0010:PCx0011:PDx 0100:PEx 0101:PFx* Parameter:portx_pinx形如PA0PA1................TRIGGER_Mode: 0x01 下降沿触发 0x02 上升沿触发0x03 任意电平触发* Example : Ex_NVIC_Congig(PA8,0x01); PA8下降沿触发 *********************************************************************************************************/void Ex_NVIC_Congig(PORTx_PINx portx_pinx,TRIGGER_MODE trigger_mode){u8 address; //外部中断触发寄存器编号选择u8 offset; //外部中断触发寄存器偏移位选择u8 portxportx_pinx/16; //端口号u8 pinxportx_pinx%16; //引脚号 address pinx/4;offset (pinx%4)*4;RCC-APB2ENR | 10; //使能I/O复用时钟AFIO-EXTICR[address]|portxoffset; //EXTI.BITx映射到GPIOx.BITx
// EXTI-PR | 1pinx; //清除线x上的中断标志位 EXTI-IMR | 1pinx; //开放来自线x上的中断请求EXTI-EMR | 1pinx; //开放来自线x上的事件请求if(trigger_mode0x01)EXTI-FTSR | 1pinx; //设置线x上下降沿触发if(trigger_mode0x02)EXTI-RTSR | 1pinx; //设置线x上上降沿触发} 比如配置GPIOC5为下降沿触发 Ex_NVIC_Congig(PC5,FALLING); // 按键KEY0按下触发 高电平-低电平 3.2.3 NVIC中断优先级初始化 调用STM32_NVIC_Init函数初始化PC5中断优先级具体参考《STM32F103嵌套向量中断控制器》 GPIOC5对应的EXTI线[9:5]这里设置EXTI9_5_IRQn中断优先级分组2抢占优先级为2响应优先级为2 STM32_NVIC_Init(2,EXTI9_5_IRQn,2,2); 3.2.4 中断处理函数 这里依然以EXTI9_5_IRQn中断为例对应的中断处理函数为EXTI9_5_IRQHandler /*********************************************************************************************************************
* Function Name : EXTI9_5_IRQHandler
* Description : This function handles External lines 9 to 5 interrupt request.
* Input : None
* Output : None
* Return : None
*************************************************************************************************************************/
void EXTI9_5_IRQHandler(void)
{if( EXTI-PR 15 ) //来自中断线5上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 15; //清中断线5上的中断标志} if( EXTI-PR 16 ) //来自中断线6上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 16; //清中断线6上的中断标志}if( EXTI-PR 17 ) //来自中断线7上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 17; //清中断线7上的中断标志 }if( EXTI-PR 18 ) //来自中断线8上的中断{//**********************自定义用户任务****************************//usart_sendStr(USART_1, 坏人);//*****************************************************************//EXTI-PR 18; //清中断线8上的中断标志 }if( EXTI-PR 19 ) //来自中断线9上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 19; //清中断线9上的中断标志 }
} 3.3 实现功能 这里我们就利用手头开发板的独立按键kKEY0来控制LED1灯的亮灭 其中 KEY0连接STM32f103的GPIOC5按键无上拉电阻需要在GPIOC5上设为上拉状态提供一个确定电平 按键按下时GPIOC5输出低电平当按键未按下时GPIOC5应为高电平 LED1连接STM32f103的GPIOA8引脚低电平点亮 我们要实现的功能也很简单即按下KEY0点亮LED1源码实现包括以下两个步骤 配置GPIOA8通用推挽输出最大速度50MHz配置GPIOC对应的EXTI线[9:5]外部中断下降沿触发 3.3.1 main函数实现 int main()
{ u32 i0;STM32_Clock_Init(9); //系统时钟初始化 while(RTC_Init()); //RTC初始化 STM32_NVIC_Init(2,USART1_IRQn,0,1); //串口中断优先级初始化其中包括中断使能usart_init(USART_1,115200); //串口1初始化波特率115200 映射到PA9 PA10// LED1初始化gpio_init(PA8,GPO_SpeedMax_50,HIGH); //PA8接入LED1 // 按键KEY0初始化 gpio_init(PC5,GPI_UP,HIGH); //PC5接按键KEY0Ex_NVIC_Congig(PC5,FALLING); //按键KEY0按下触发 高电平-低电平STM32_NVIC_Init(2,EXTI9_5_IRQn,2,2); //EXTI线[9:5]中断优先级初始化其中包括中断使能while(1){ delay_ms(100);PAout(8) 1; // 熄灭LED1}
} 3.3.2 EXTI9_5_IRQHandler函数实现 /*********************************************************************************************************************
* Function Name : EXTI9_5_IRQHandler
* Description : This function handles External lines 9 to 5 interrupt request.
* Input : None
* Output : None
* Return : None
*************************************************************************************************************************/
void EXTI9_5_IRQHandler(void)
{if( EXTI-PR 15 ) //来自中断线5上的中断{//**********************自定义用户任务****************************//PAout(8) 0; // 点亮LED1//*****************************************************************//EXTI-PR 15; //清中断线5上的中断标志} if( EXTI-PR 16 ) //来自中断线6上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 16; //清中断线6上的中断标志}if( EXTI-PR 17 ) //来自中断线7上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 17; //清中断线7上的中断标志 }if( EXTI-PR 18 ) //来自中断线8上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 18; //清中断线8上的中断标志 }if( EXTI-PR 19 ) //来自中断线9上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI-PR 19; //清中断线9上的中断标志 }} 四、源码下载 源码下载路径stm32f103。 参考文章 [1] Mini2440裸机开发之中断控制器 [2] STM32--中断使用 [3] 《STM32F10xxx Cortex-M3编程手册》
文章转载自: http://www.morning.zrgx.cn.gov.cn.zrgx.cn http://www.morning.qxxj.cn.gov.cn.qxxj.cn http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn http://www.morning.rkjz.cn.gov.cn.rkjz.cn http://www.morning.rwlns.cn.gov.cn.rwlns.cn http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn http://www.morning.nyqzz.cn.gov.cn.nyqzz.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.twwts.com.gov.cn.twwts.com http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn http://www.morning.kjyfq.cn.gov.cn.kjyfq.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.hjrjr.cn.gov.cn.hjrjr.cn http://www.morning.txzqf.cn.gov.cn.txzqf.cn http://www.morning.rgnp.cn.gov.cn.rgnp.cn http://www.morning.kyjpg.cn.gov.cn.kyjpg.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.rqqlp.cn.gov.cn.rqqlp.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.kmkpm.cn.gov.cn.kmkpm.cn http://www.morning.zknxh.cn.gov.cn.zknxh.cn http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn http://www.morning.kjksn.cn.gov.cn.kjksn.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn http://www.morning.hxbps.cn.gov.cn.hxbps.cn http://www.morning.rhchr.cn.gov.cn.rhchr.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.kxqfz.cn.gov.cn.kxqfz.cn http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.bmbnc.cn.gov.cn.bmbnc.cn http://www.morning.wxwall.com.gov.cn.wxwall.com http://www.morning.lxbml.cn.gov.cn.lxbml.cn http://www.morning.mglqf.cn.gov.cn.mglqf.cn http://www.morning.mnwmj.cn.gov.cn.mnwmj.cn http://www.morning.txlxr.cn.gov.cn.txlxr.cn http://www.morning.bhdyr.cn.gov.cn.bhdyr.cn http://www.morning.rcmwl.cn.gov.cn.rcmwl.cn http://www.morning.gnzsd.cn.gov.cn.gnzsd.cn http://www.morning.bylzr.cn.gov.cn.bylzr.cn http://www.morning.mfjfh.cn.gov.cn.mfjfh.cn http://www.morning.ywqsk.cn.gov.cn.ywqsk.cn http://www.morning.rykgh.cn.gov.cn.rykgh.cn http://www.morning.pluimers.cn.gov.cn.pluimers.cn http://www.morning.byshd.cn.gov.cn.byshd.cn http://www.morning.xgzwj.cn.gov.cn.xgzwj.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn http://www.morning.ksgjy.cn.gov.cn.ksgjy.cn http://www.morning.mtqqx.cn.gov.cn.mtqqx.cn http://www.morning.ltrms.cn.gov.cn.ltrms.cn http://www.morning.mjtgt.cn.gov.cn.mjtgt.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.ljygq.cn.gov.cn.ljygq.cn http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn http://www.morning.ampingdu.com.gov.cn.ampingdu.com http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.glnxd.cn.gov.cn.glnxd.cn http://www.morning.ffbl.cn.gov.cn.ffbl.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.wptdg.cn.gov.cn.wptdg.cn http://www.morning.bxhch.cn.gov.cn.bxhch.cn http://www.morning.nydgg.cn.gov.cn.nydgg.cn http://www.morning.feites.com.gov.cn.feites.com http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.sgcdr.com.gov.cn.sgcdr.com http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn