4.把相应的IO口设置为中断线路
由于GPIO并不是专用的中断引脚,因此在用GPIO来触发外部中断的时候需要设置将GPIO相应的引脚和中断线连接起来,具体代码如下:
- void EXTI_cfg()
- {
- EXTI_InitTypeDef EXTI_InitStructure;
- //清空中断标志
- EXTI_ClearITPendingBit(EXTI_Line2);
- EXTI_ClearITPendingBit(EXTI_Line3);
- EXTI_ClearITPendingBit(EXTI_Line5);
- //选择中断管脚PC.2 PC.3 PC.5
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
- EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line5; //选择中断线路2 3 5
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求,非事件请求
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //设置中断触发方式为上下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中断使能
- EXTI_Init(&EXTI_InitStructure);
- }
复制代码
EXTI_cfg中需要调用到的函数都在stm32f10x_exti.c。
5.写中断响应函数
STM32不像C51单片机那样,可以用过interrupt关键字来定义中断响应函数,STM32的中断响应函数接口存在中断向量表中,是由启动代码给出的。默认的中断响应函数在stm32f10x_it.c中。因此我们需要把这个文件加入到工程中来。
在这个文件中,我们发现,很多函数都是只有一个函数名,并没有函数体。我们找到EXTI2_IRQHandler()这个函数,这就是EXTI2中断响应的函数。我的目标是将LED灯点亮,所以函数体其实很简单:
- void EXTI2_IRQHandler(void)
- {
- //点亮LED灯
- GPIO_SetBits(GPIOD,GPIO_Pin_6);
- //清空中断标志位,防止持续进入中断
- EXTI_ClearITPendingBit(EXTI_Line2);
- }
- void EXTI3_IRQHandler(void)
- {
- GPIO_SetBits(GPIOD,GPIO_Pin_3);
- EXTI_ClearITPendingBit(EXTI_Line3);
- }
- void EXTI9_5_IRQHandler(void)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_5);
- EXTI_ClearITPendingBit(EXTI_Line5);
- }
复制代码
由于EXTI5-9是共用一个中断响应函数,因此所有的EXTI5 – EXTI9的响应函数都写在这个里面。
6.写主函数
- #include "stm32f10x_lib.h"
- void RCC_cfg();
- void IO_cfg();
- void EXTI_cfg();
- void NVIC_cfg();
- int main()
- {
- RCC_cfg();
- IO_cfg();
- NVIC_cfg();
- EXTI_cfg();
- while(1);
- }
复制代码
main函数前是函数声明,main函数函数体中都是调用初始化配置函数,然后进入死循环,等待中断响应。
以上就是STM32外部中断的介绍,功能可以不用管,知道该配置哪些东西就够了。ok,基础知识学习完了吧!那么就可以买个具体模块来试试了。这里用的是四路数字触摸感应传感器模块。
下面是该模块的简要描述:
一、模块描述
该传感器模块是四路触摸感应模块,基于TTP224芯片。通过触摸数字(1、2、3、4),可以起到控制外围硬件电路的作用。手按数字开关,对应的灯(D1、D2、D3、D4)会亮,对应的四个输出口(OUT1、OUT2、OUT3、OUT4)中的一个会输出高电平。
模块参数:
1、板载TTP224电容式4键触摸感应IC
2、板载4路电平状态指示灯
3、工作电压:2.4V-5.5V
4、模块可以设置输出模式、键输出模式、最长输出时间和快速/低功耗选择
5、PCB板子尺寸:35(mm)x29(mm)
二、硬件调试
(1) 硬件实物图展示如下图:
(2) 模块原理图接口展示如图:
(3) 管脚实际连接表
单片机---->kepler11---->传感器模块,连接表
三、软件调试
本工程实现的功能是通过触摸传感器模块中的数字触发引脚的外部中断,从而控制核心板上LED灯闪烁以及K11开发板上的继电器。本案例基于光轮电子公司TreeOS软件开发架构运行,具体软件工程还请关注光轮电子公司TreeOS驱动库文件。
以下是工程图: