文章目录
- 前言
- 一、EXTI功能框图
- 二、使用方法
- 1.EXTI_InitTypeDef 初始化结构体
- 2.实现步骤
- 三、代码实现
- 1.EXTI .C文件
- 2.EXTI .H文件
- 2.MAIN.C
前言
EXTI: External interrupt / event controller
外部中断/事件控制器
提示:以下是本篇文章正文内容
一、EXTI功能框图
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020121114275321.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hvbmdsaXdvbmc=,size_16,color_FFFFFF,t_70)
二、使用方法
1.EXTI_InitTypeDef 初始化结构体
1-EXTI_Line:用于产生中断/事件线
2-EXTI_Mode : EXTI模式(中断/事件)
3-EXTI_Trigger:触发(上/下/上下)
4-EXTI_LineCmd:使能或者失能(IMR/EMR)
2.实现步骤
1-初始化要连接到EXTI的GPIO
2-初始化EXTI用于产生中断/事件
3-初始化NVIC,用于处理中断
4-编写中断服务函数
5-main函数
三、代码实现
1.EXTI .C文件
#include "bsp_exti.h"
static void EXTI_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void EXIT_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_NVIC_Config();
RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = KEY1_INT_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStruct.EXTI_Line = EXTI_Line0;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
}
2.EXTI .H文件
#ifndef __BSP_EXTI_H
#define __BSP_EXTI_H
#include "stm32f10x.h"
#define KEY1_INT_GPIO_PIN GPIO_Pin_0
#define KEY1_INT_GPIO_PORT GPIOA
#define KEY1_INT_GPIO_CLK RCC_APB2Periph_GPIOA
void EXIT_Key_Config(void);
#endif
2.MAIN.C
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_exti.h"
void Delay( uint32_t count )
{
for(; count!=0; count--);
}
int main(void)
{
LED_GPIO_Config();
EXIT_Key_Config();
while(1)
{
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)