exit.c文件的代码如下:
#include "exti.h"
#include "misc.h"
void EXTI_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE); //开启PE3的时钟,并开启复用时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //选择要使用的I/O引脚,此处选择PE3引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置引脚输入模式为浮空输入模式
GPIO_Init(GPIOE,&GPIO_InitStructure); //调用初始化库函数初始化GPIO端口
//初始化EXTI,外部中断
EXTI_ClearITPendingBit(EXTI_Line3); //清空外部中断3中断挂起,清空中断标志
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);//将PE3用作外部中断线路
EXTI_InitStructure.EXTI_Line = EXTI_Line3; //设置外部中断线3中断
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置为下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能该外部中断线
EXTI_Init(&EXTI_InitStructure);
//初始化NVIC,中断优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //选择中断优先级分组2
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //外部中断3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //设置响应优先级为1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //外部中断处理函数
NVIC_Init(&NVIC_InitStructure);
}
//外部中断处理函数
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3) != RESET)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)))); //PE5的电平状态翻转
EXTI_ClearITPendingBit(EXTI_Line3); //清除中断标志位
}
}
|
———————————————— 版权声明:本文为CSDN博主「辰小夏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_52411606/article/details/122711046
———————————————— 版权声明:本文为CSDN博主「辰小夏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_52411606/article/details/122711046