stm32g431外部中断
时间: 2025-01-18 11:59:29 浏览: 78
### STM32G431 外部中断配置及使用教程
#### 配置外部中断的基础准备
为了使STM32G431能够响应外部事件触发的中断请求,在实际编程前需完成一系列初始化工作。这包括但不限于设置GPIO端口模式、选择相应的EXTI线以及配置NVIC优先级等操作[^4]。
#### GPIO与EXTI关联设定
在`bsp_exti.c`文件中定义了如何将特定的GPIO引脚映射至对应的EXTI线上。对于STM32G431而言,每个GPIO组(A/B/C/D/E/F/G/H/I/J/K)都对应着一组固定的EXTI线路编号范围0~15。这意味着当希望某根引脚作为外部中断源时,该引脚所属的GPIO组决定了它能占用哪条EXTI线。例如,若要让PB0成为外部中断输入,则应将其连接到EXTI Line 0上[^5]。
```c
// bsp_exti.c中的部分代码片段展示
void EXTI_Config(void){
// 初始化GPIOB
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0; /* PB0 */
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
```
#### NVIC中断向量表注册
为了让CPU能够在检测到指定条件满足后执行预设的动作,还需要通过修改NVIC来开启相应级别的全局中断允许位并调整各路中断之间的相对重要程度。此过程同样可以在`bsp_exti.c`内实现:
```c
// 继续bsp_exti.c内的配置
__HAL_RCC_SYSCFG_CLK_ENABLE(); /* 开启SYSCFG时钟 */
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 1); /* 设置EXTI0中断优先级 */
HAL_NVIC_EnableIRQ(EXTI0_IRQn); /* 启用EXTI0中断 */
```
#### 编写ISR处理程序
最后一步是在项目工程里创建专门针对所选EXTI线号设计的服务例程(ISR),即每当发生预期类型的边沿变化或其他形式的变化时就会自动调用这段自定义逻辑来进行后续的数据读取或状态更新等工作。下面给出了一种简单的按键按下计数器实例化方式:
```c
/* main.c 或者其他合适位置 */
uint8_t keyPressCount = 0;
void EXTI0_IRQHandler(void){ /* 当PB0上有上升沿到来时进入此函数 */
if (__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_0)){
keyPressCount++;
printf("Key Pressed %d times.\r\n",keyPressCount);
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_0);// 清除标志位防止重复触发
}
}
```
以上就是围绕STM32G431展开的一套较为完整的外部中断配置流程介绍。值得注意的是,虽然上述例子仅展示了单一引脚的情况,但在实际开发过程中可以根据需求灵活扩展至多个不同的IO接口上去监听多样化的外界刺激信号。
阅读全文
相关推荐


















