外部中断概述

外部中断库函数设置


手把手用外部中断写按键实验
#ifndef __EXTI_H
#define __EXTI_H
#include "sys.h"
void EXTIX_Init(void);
#endif
#include "stm32F4xx.h"
#include "exti.h"
#include "key.h"
#include "delay.h"
#include "led.h"
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 初始化SYSCF外部中断时钟
RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_SYSCFG,ENABLE);
// 初始化AHB1时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE,ENABLE);
// 初始化按键
KEY_Init();
// 设置IO口与中断线的映射关系
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
// 初始化外部中断
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
// 配置中断分组并使能
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI4_IRQHandler(void)
{
delay_ms(10);
// 按键按下
if(KEY0 == 0)
{
LED0 = !LED0;
LED1 = !LED1;
}
// 清除中断标志位
EXTI_ClearITPendingBit(EXTI_Line4);
}
#include "stm32f4xx.h"
#include "beep.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
LED_Init();
BEEP_Init();
EXTIX_Init();
LED1 = 0;
while(1)
{
printf("OK\r\n");
delay_ms(10);
}
}
本文介绍了STM32单片机的外部中断概念,详细讲解了外部中断的库函数设置,并通过实例演示如何利用外部中断实现按键实验,为嵌入式硬件开发提供实践指导。

5145

被折叠的 条评论
为什么被折叠?



