欢迎来到天天文库
浏览记录
ID:11855877
大小:42.00 KB
页数:7页
时间:2018-07-14
《stm32外部中断详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、STM32外部中断详解 2012-07-0221:59:24
2、 分类: 嵌入式相关
3、举报
4、字号 订阅 一、基本概念 ARMCoetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每
5、4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组第0组:所有4bit用于指定响应优先级;第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级;第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级;第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;第4组:所有4位用于指定抢占式优先级。 所谓抢占式优先级和响应优
6、先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。每一个中断源都必须定义2个优先级。有几点需要注意的是:1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先
7、级分组所限定的范围,将可能得到意想不到的结果;2)抢占式优先级别相同的中断源之间没有嵌套关系;3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。二、 GPIO外部中断 STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB
8、1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0–EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。 对于中断的控制,STM32有一个专用的管理机构:NVIC。三、程序实现 其实上面那些基本概念和知识只是对STM32的中断系统有一个大概的认识,用程序说话将会更能够加深如何使用中断。使用外部中断的基本步骤如下:1. 设置好相应的时钟;2. 设置相应的中断;3. IO口初始化;4. 把相应的IO口
9、设置为中断线路(要在设置外部中断之前)并初始化;5. 在选择的中断通道的响应函数中中断函数。 假设有三个按键,用按键来触发相应的中断。K1/K2/K3连接的是PC5/PC2/PC3,因此我将用EXTI5/EXTI2/EXTI3三个外部中断。PB5/PD6/PD3分别连接了三个LED灯。中断的效果是按下按键,相应的LED灯将会被点亮。1. 设置相应的时钟 首先需要打开GPIOB、GPIOC和GPIOE(因为按键另外一端连接的是PE口)。然后由于是要用于触发中断,所以还需要打开GPIO复用的时钟。相应的函
10、数在GPIO的学习笔记中有了详细了解释。详细代码如下:voidRCC_cfg(){ //打开PEPDPCPB端口时钟,并且打开复用时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE
11、RCC_APB2Periph_GPIOC
12、RCC_APB2Periph_GPIOD
13、RCC_APB2Periph_GPIOB
14、RCC_APB2Periph_AFIO,ENABLE);} 设置相应的时钟所需要的RCC函数在stm32f10x_rcc.c中,所以要在工程中添加此文件。 2. 设置好相应
15、的中断设置相应的中断实际上就是设置NVIC,在STM32的固件库中有一个结构体NVIC_InitTypeDe
此文档下载收益归作者所有