STM32F103外部中断(按键中断)

STM32F103外部中断(按键中断)

  • 前言
  • 一、外部中断解析
  • 二、外部中断编写
    • 1.步骤
    • 2.代码

前言

了解外部中断

一、外部中断解析

简要解释
STM32F103外部中断(按键中断)_第1张图片
STM32F103外部中断(按键中断)_第2张图片
从图中我们可以知道每一个IO口可以映射到相应的中断。

二、外部中断编写

1.步骤

外部中断的一般配置步骤:
初始化I0口为输入。
GPIO Init();开启1O口复用时钟。RCC APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
设置10口与中断线的映射关系。
void GPIO_ EXTILineConfigO;初始化线上中断,设置触发条件等。
EXTI_Init();
配置中断分组(NVIC),并使能中断。
NVIC_Init();
编写中断服务函数。
EXTlx_IRQHandler();
清除中断标志位
EXTIL ClearlTPendingBit();

2.代码

#include "EXTI.h"


/*
按键KEY_UP上拉,KEY0,KEY1下拉
KEY_UP  PA0
KEY0    PE4
KEY1    PE3
*/


void EXTIx_Init(void)
{
	//开启复用IO口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	
	//初始化io输入函数,这里我们可以用按键作为输入
  KEY_Init();   //调用已经配制好的按键函数
	
	//设置IO口与中断线的映射
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
	
	//初始化线上中断,设置触发条件
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line = EXTI_Line4 ;  //PE4选择线4
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//选择中断还是事件触发模式
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//选择下降沿
	EXTI_Init(&EXTI_InitStructure);
	
	//配置中断函分组(NVIC),并使能
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //因为选择中断优先级为2,所以只能选0-3;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_Init(&NVIC_InitStructure);
	
}
	

void EXTI4_IRQHandler(void)
{
	//编写中断服务函数
	delay_ms(10);     //延时,防抖动
	if(KEY0 == 0)   //判断是否按下
	{
		LED0 = !LED0;
		
	}
	
	//清除终端标志位
	EXTI_ClearFlag(EXTI_Line4);
	
	
}

你可能感兴趣的:(stm32)