void exti_init(void){
// 定义用于初始化GPIO、EXTI和NVIC的结构体变量
GPIO_InitTypeDef shake_init;
EXTI_InitTypeDef exti_init;
NVIC_InitTypeDef nvic_init;
// 开启GPIOA和AFIO(复用功能输入输出)的时钟,因为我们将要使用GPIOA的引脚,并且可 能需要配置复用功能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// 配置GPIOA的PIN1连接到EXTI Line1
// 这是必需的,因为EXTI不直接连接到GPIO引脚,而是连接到GPIO端口上的特定线路
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
// 配置NVIC的优先级分组为2
// 这将中断优先级分为抢占优先级和子优先级,具体分组方式取决于NVIC_PriorityGroup_2的 定 义
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// 配置GPIOA的PIN1
// 设置该引脚为输入下拉模式(GPIO_Mode_IPD),速度为10MHz
shake_init.GPIO_Pin = GPIO_Pin_1;
shake_init.GPIO_Speed = GPIO_Speed_10MHz;
shake_init.GPIO_Mode = GPIO_Mode_IPD; // 下拉模式
GPIO_Init(GPIOA, &shake_init); // 应用上述配置到GPIOA
// 配置EXTI Line1
// 设置EXTI Line1为中断模式,触发方式为下降沿触发,并启用该线路
exti_init.EXTI_Mode = EXTI_Mode_Interrupt;
exti_init.EXTI_Line = EXTI_Line1;
exti_init.EXTI_LineCmd = ENABLE;
exti_init.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&exti_init); // 应用上述配置到EXTI
// 配置NVIC以响应EXTI1中断
// 启用EXTI1中断,设置其抢占优先级和子优先级
nvic_init.NVIC_IRQChannelCmd = ENABLE;
nvic_init.NVIC_IRQChannel = EXTI1_IRQn; // 指定中断通道为EXTI1中断
nvic_init.NVIC_IRQChannelPreemptionPriority = 1; // 设置抢占优先级
nvic_init.NVIC_IRQChannelSubPriority = 1; // 设置子优先级
NVIC_Init(&nvic_init); // 应用上述配置到NVIC
}
09-01
987
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-18