[原创] STM32F107VC金龙开发板 第二章EXTI

旺宝电子   2015-4-9 15:59 楼主
第二章 金龙107——EXTI 2.1 EXTI简介:
EXTI (External interrupt) 是指外部中断,通过 GPIO 检测输入脉冲,引起中断事件,打断原来的代码执行流程,进入到中断服务函数中进行处理,处理完后,再返回到中断之前的代码中执行。
对于互联型(107系列)产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
首先,我们来了解一下什么是中断向量表,Cortex 内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(exception)和中断(interrupt),并把它们用一个表管理起来,编号为 0~15 的称为内核异常,而 16 以上的则称为外部中断(外,相对内核而言),这个表就称为中断向量表。
2.2实验说明:
在本实验中,通过按键触发外部中断,改变标志位,实现不同LED闪烁
主要跳线帽:JP4JP7都接在2-3
2.3硬件描述:
该实验使用了按键S1S2,以及LED
图片6.png
2.4程序说明:
main函数中首先对系统时钟进行配置,和LED端口以及按键端口配置,接下来对中断进行初始化配置
按键端口配置时,要把按键所使用的端口配置为外部中断输入引脚。外部中断触发引脚需要说明的是STM32F107的所有引脚都可以被配置为外部中断输入引脚,但是在程序中一个外部中断通道上只能使用一个引脚,如果你对一个外部中断通道上配置了两个引脚,则前一个设置会被后面的设置所覆盖。
图片5.png
中断配置中,首先也是声明定义结构体,所使用到的函数可以到外设固件函数库中查看说明,详细了解函数的功能。其主要是配置其中断通道和中断优先级
图片4.png
在NVIC_Configuration(void)函数中调用了NVIC_PriorityGroupConfig()库函数,把 NVIC 中断优先级分组设置为第2 组。我们可以看到NVIC使用中断优先级分组的概念来管理中断优先级,其最大可以可以给多达256个中断向量分配优先级。NVIC又给每个中断赋予先占优先级和次占优先级,关于先占优先级和次占优先级关系的描述如下:
① 拥有较高先占优先级的中断可以打断较低先占优先级的中断。
② 若两个先占优先级的中断同时挂起,则优先执行次占优先级较高的中断
③ 若两个挂起的中断两个优先级都一致,则优先执行位于中断向量表中位置较高的中断。
④ 还有一点很重要,无论何时,次占优先级都不会造成中断嵌套,即是说中断嵌套完全是由先占优先级决定的。
接下来开始向 NVIC 初始化结构体写入参数 .NVIC_IRQChannel = EXTI15_10_IRQn,表示要配置的为 EXTI 15~10线的中断向量。这些可写入的参数可以在 stm32f10x.h 文件的 IRQn 类型定义中查找到。
然后配置先占优先级和次占优先级,因为这个工程简单,就直接把它设置
为最高级中断。填充完结构体,最后要调用 NVIC_Init() 函数来向寄存器写入参数。
接下来是外部中断的配置,配置相应的通道和相应的触发方式。
图片3.png
While中判断flag的这个标志位,实现不同的LED的闪烁。 图片2.png
当按键按下时,程序会自动跳入中断服务程序中,相应的中断服务程序在stm32f10x_it.c中,STM32的中断服务函数也是在启动函数中定义的,分配相应的地址。
我们使用中断函数的时候只需要在stm32f10x_it.c中找到相应的函数,并在里面编写你所需要的程序。
中断服务程序中,首先要判断中断源,然后清除中断标志位(在这里要说的是控制器的一部分中断标志位是由硬件清除的,也就是一旦进入中断,硬件会自动清除相应的中断标志位,不需要代码干预,但是还有一些中断是需要我们编写代码来清除相应的中断标志位。所以具体还要查看参考手册的相关部分),再执行中断处理程序。
图片1.png
我们在编写中断函数入口时要注意中断函数名的写法,其只有两种命名方法
1-> > EXTI0_IRQHandler ; EXTI Line 0
EXTI1_IRQHandler ; EXTI Line 1
EXTI2_IRQHandler ; EXTI Line 2
EXTI3_IRQHandler ; EXTI Line 3
EXTI4_IRQHandler ; EXTI Line 4
2-> > EXTI9_5_IRQHandler ; EXTI Line 9..5
从中断函数的命名可以看出,在中断线超过4之后都必须写成EXTI9_5_IRQHandlerEXTI15_10_IRQHandler,如果你把他写成EXTI5_IRQHandlerEXTI6_IRQHandler的话编译器不会报错,但是中断程序不能工作,如果你不知道,会让你搞半天也不知道问题出在哪
2.5实验现象:
下载程序,复位,程序运行,LD1闪烁;按下S1LD3闪烁,其它灭;按下S2LD4闪烁,其它灭。
本帖最后由 旺宝电子 于 2015-4-10 10:41 编辑
http://openmcu.taobao.com]77[/url]

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复