单片机外部中断应用实验
时间: 2023-08-20 08:08:38 浏览: 69
单片机外部中断是单片机的一个重要功能,它可以实现在某些特定的事件发生时,立即停止当前程序的运行,转而执行一个中断服务程序,处理完后再返回原程序。这样可以提高单片机的响应速度和处理效率,常用于实时控制、通讯等领域。
下面以STM32F103C8T6为例,介绍如何使用外部中断实现一个简单的应用。
实验目的:
通过按下按键触发外部中断,控制LED灯的亮灭。
实验器材:
- STM32F103C8T6开发板一块
- 杜邦线若干
- LED灯一个
- 220欧姆电阻一个
- 按键一个
实验步骤:
1.连线
将开发板上的PB12引脚与按键的一端相连,另一端与GND相连;将开发板上的PC13引脚通过220欧姆电阻与LED正极相连,LED负极与GND相连。
2.编写程序
在Keil中新建一个工程,编写如下代码:
```
#include "stm32f10x.h"
void EXTI15_10_IRQHandler(void) //中断服务程序
{
if(EXTI_GetITStatus(EXTI_Line12) == SET) //判断是否是PB12引脚触发的中断
{
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); //PC13引脚输出高电平,点亮LED
EXTI_ClearITPendingBit(EXTI_Line12); //清除中断标志位
}
}
void init(void) //初始化函数
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOB和GPIOC时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12引脚输入模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PC13引脚输出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能AFIO时钟
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12); //将PB12引脚映射到外部中断线12
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line12; //线12
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //外部中断15-10通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //响应优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int main(void)
{
init();
while(1);
}
```
3.编译下载
编译程序,下载到开发板上。
4.按下按键
按下按键,LED灯会亮起来,松开按键,LED灯熄灭。
实验原理:
外部中断由外部事件触发,当事件发生时,单片机会立即停止当前程序执行,跳转到中断服务程序中执行,处理完毕后再返回原程序继续执行。本次实验中,按下按键会触发PB12引脚的下降沿,从而触发外部中断线12,进入中断服务程序,将PC13引脚输出高电平,点亮LED。松开按键后,PC13引脚输出低电平,LED熄灭。
总结:
本次实验介绍了如何在STM32F103C8T6单片机上使用外部中断实现一个简单的应用。通过这个实验,可以了解到外部中断的原理和应用,以及如何在Keil中编写程序。