STM32G431RBT6按键中断
时间: 2025-02-03 17:12:53 浏览: 34
STM32G431RBT6 按键中断配置
对于STM32G431RBT6单片机而言,在实现按键中断功能时,通常涉及初始化GPIO端口、设置外部中断线以及编写相应的中断服务程序(ISR)[^2]。
GPIO与EXTI(External Interrupt Line)初始化
为了响应按键触发的中断请求,需先指定哪个GPIO引脚作为按键输入,并将其连接到特定的外部中断线上。这一步骤可通过调用HAL_GPIO_Init()
完成GPIO模式设定,再利用HAL_NVIC_SetPriority()
和HAL_NVIC_EnableIRQ()
来配置优先级并使能对应中断向量[^3]。
// 初始化按键所在的GPIO引脚
static void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启PA端口时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 配置PA0为浮空输入 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发中断
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
编写中断服务例程 (ISR)
一旦检测到按键按下产生的边沿变化信号,则会自动跳转执行预先安排好的ISR。此函数负责处理实际业务逻辑,比如更新全局变量标志位或是启动其他任务流程[^1]。
void EXTI0_IRQHandler(void)
{
if (__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_0))
{
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_0); // 清除中断标志
static uint8_t count = 0;
// 延迟消抖处理
HAL_Delay(50);
if (!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)) // 再次确认按键状态
{
count++;
// 这里可以根据count做不同的事情...
printf("Button pressed %d times.\r\n", count);
}
}
/* Clear the EXTI line pending bit */
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
}
上述代码展示了如何针对STM32G4系列微控制器中的某个具体型号(G431),构建一套完整的按键中断机制。值得注意的是,这里采用了硬件去抖动的方式——即依靠内部寄存器清除操作配合软件延时相结合的方法来过滤掉可能存在的噪声干扰。
相关推荐


















