您的位置:首页 > 其它

【实验三】外部中断实验

2016-01-21 21:52 399 查看
一、实验目的

1)了解STM32外部中断相关知识;

2)使用STM32外部中断,实现两个LED灯亮灭;

二、STM32外部中断简介

1)STM32F103系列有60个可屏蔽中断;支持19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

STM32F103 的19 个外部中断为:

线 0~15:对应外部 IO 口的输入中断。

线 16:连接到 PVD 输出。

线 17:连接到 RTC 闹钟事件。

线 18:连接到 USB 唤醒事件。

中断线对应为:



2)外部中断函数:

EXPORT EXTI0_IRQHandler

EXPORT EXTI2_IRQHandler

EXPORT EXTI4_IRQHandler

EXPORT EXTI15_10_IRQHandler

EXPORT EXTI9_5_IRQHandler

EXPORT EXTI1_IRQHandler

EXPORT EXTI3_IRQHandler

中断线 0-4 每个中断线对应一个中断函数, 中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,中断线 10-15 共用中断函数 EXTI15_10_IRQHandler。

在编写中断服务函数的时候会经常使用到两个函数, 第一个函数是判断某个中断线上的中断是否发生(标志位是否置位):

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

这个函数一般使用在中断服务函数的开头判断中断是否发生。 另一个函数是清除某个中断线上的中断标志位:

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

这个函数一般应用在中断服务函数结束之前, 清除中断标志位。

3)IO口外部中的一般步骤

1) 初始化 IO 口为输入。

2) 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。

3) 初始化线上中断, 设置触发条件等。

4) 配置中断分组( NVIC),并使能中断。

5) 编写中断服务函数。

三、硬件设计

LED灯、按键。

四、软件设计

exti.c 主要涉及初始化以及中断函数的实现

//外部中断0服务程序
void EXTIX_Init(void)
{

EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

KEY_Init();	 //	按键端口初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能复用功能时钟

<span style="white-space:pre">	</span>//GPIOE.2 中断线以及中断初始化配置   下降沿触发
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

EXTI_InitStructure.EXTI_Line=EXTI_Line2;	//KEY2
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);	 	//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			//使能按键WK_UP所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
NVIC_Init(&NVIC_InitStructure); 						//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);  	  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

}
中断函数实现:功能的实现也主要是在中断函数中实现

void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY3==1)	  //按键KEY3
{
LED0=!LED0;
}
EXTI_ClearITPendingBit(EXTI_Line0);  //清除LINE0上的中断标志位
}


五、实验结果

成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: