STM32F042的GPIOB引脚4触发中断示例代码求询(非HAL库)
STM32F042 GPIOB引脚4 边沿触发中断示例代码(非HAL库)
以下是基于STM32标准外设库的实现代码,完全适配STM32F042芯片:
1. 头文件引用
#include "stm32f0xx.h"
2. GPIO与中断初始化函数
void GPIO_EXTI_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; // 1. 使能GPIOB与SYSCFG时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); // 2. 配置GPIOB引脚4为上拉输入模式(可根据实际需求改为浮空/下拉) GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStruct); // 3. 将EXTI4中断线映射到GPIOB引脚4 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource4); // 4. 配置EXTI中断参数 EXTI_InitStruct.EXTI_Line = EXTI_Line4; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; // 双边沿触发,可改为Rising/Falling EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); // 5. 配置NVIC中断优先级 NVIC_InitStruct.NVIC_IRQChannel = EXTI4_15_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0; // 优先级可根据系统需求调整 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); }
3. 中断服务函数
void EXTI4_15_IRQHandler(void) { // 判定是否为EXTI4触发的中断 if(EXTI_GetITStatus(EXTI_Line4) != RESET) { // -------------------------- // 在此添加你的中断处理逻辑 // 例如:状态记录、外设控制等 // -------------------------- // 必须清除中断标志位,否则会持续触发中断 EXTI_ClearITPendingBit(EXTI_Line4); } }
关键注意点
- 时钟配置:STM32F0需要单独使能SYSCFG时钟,这是与F1系列的核心差异之一。
- EXTI映射:通过
SYSCFG_EXTILineConfig完成引脚到EXTI线的绑定,PB4固定对应EXTI_Line4。 - 中断服务函数复用:STM32F0中EXTI4至EXTI15共用同一个中断入口,必须通过状态判断锁定触发源。
- 标志位清除:中断处理完成后必须清除对应EXTI线的挂起标志,否则中断会反复触发。
内容的提问来源于stack exchange,提问作者user14665305
相关产品推荐
相关产品推荐

