童雨竹 发表于 2024-10-4 08:21

基于小华半导体MCU的GPIO中断应用示例

在这篇文章中,我将分享如何使用小华半导体的MCU实现GPIO中断的基本应用。GPIO中断在嵌入式系统中非常常见,用来处理外部信号触发的事件,比如按键、传感器信号等。

硬件准备:
[*]小华半导体MCU开发板
[*]一个简单的按键电路

实现功能:按下按键后触发GPIO中断,MCU会执行中断处理程序,并在LED灯上反映出按键状态的变化。

代码实现:
首先,我们需要配置GPIO为输入模式,并使能中断功能。以PA0为例,我们使用CubeMX来生成初始代码,然后在Keil中添加自定义中断处理函数。
1. 配置GPIO引脚在CubeMX中,将PA0配置为GPIO输入,并开启EXTI中断功能。
2. 添加中断回调函数生成代码后,我们在 stm32f1xx_it.c 文件中找到 EXTI0_IRQHandler,这是PA0的中断服务函数,我们将代码填入其中:
void EXTI0_IRQHandler(void)
{
    /* 检查是否是PA0引脚触发的中断 */
    if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET)
    {
      /* 清除中断标志 */
      __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
      
      /* 在中断中处理按键按下的事件,点亮LED */
      HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    }
}

3. 主函数配置在主函数中,我们需要初始化GPIO和中断功能,确保系统能够正确响应按键事件。
int main(void)
{
    HAL_Init();
    SystemClock_Config();
   
    /* 初始化所有外设,包括GPIO */
    MX_GPIO_Init();
   
    while (1)
    {
      /* 主循环,其他功能可以在这里实现 */
    }
}

4. GPIO初始化代码在 MX_GPIO_Init 函数中,我们需要设置PA0为输入模式,并使能中断:

void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIOA时钟使能 */
    __HAL_RCC_GPIOA_CLK_ENABLE();

    /* 配置PA0为输入模式 */
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    /* 使能中断 */
    HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

运行效果:当按下连接到PA0的按键时,MCU会捕捉到上升沿信号并触发中断,执行中断处理程序,反转LED的状态。如果按下按键,LED将从熄灭变为点亮,再次按下时,LED将熄灭。

总结:
这是一段简单的GPIO中断处理的示例代码,通过使用小华半导体MCU,我们可以方便地实现外部信号的捕捉并作出相应的响应。希望这篇文章能帮助大家更好地理解如何使用GPIO中断,实际应用中可以进一步扩展到按键消抖或多功能输入设备中。

如果有任何问题或需要帮助,欢迎留言讨论!

公羊子丹 发表于 2024-10-4 08:22

这篇文章挺实用的,按键中断的处理在项目里很常见,学到了!

周半梅 发表于 2024-10-4 08:22

这个示例很清晰,正好我也在用小华的MCU,刚好拿来试试!

帛灿灿 发表于 2024-10-4 08:22

看完感觉中断处理比我想的简单多了,之前一直不太敢用中断。

万图 发表于 2024-10-4 08:23

刚开始学中断的时候头疼,现在看你写的代码明白多了,感谢!

Wordsworth 发表于 2024-10-4 08:23

小华的MCU还是挺不错的,性价比高,功能也很全。

Bblythe 发表于 2024-10-4 08:23

这个LED反转功能挺有趣的,可以扩展一下,做个小灯控系统。

Pulitzer 发表于 2024-10-4 08:23

有没有试过加个按键消抖功能?有时候按键会有抖动问题。

Uriah 发表于 2024-10-4 08:24

感谢分享,代码写得很干净明了,适合新手理解!

Clyde011 发表于 2024-10-4 08:24

我也在用小华MCU,不过我是用的SPI通信,看看能不能结合你的例子。

高级安全大使 发表于 2025-1-31 11:57

按键中断的处理在项目里很常见

地瓜patch 发表于 2025-2-28 22:17

好资料学习了

gaobq 发表于 2025-3-20 22:50

难道都瞎了眼吗?这不是STM32的,怎么挂到小华这里,还被收藏点赞了

lxs0026 发表于 2025-3-31 12:43

中断回调函数中必须清除中断标志,以防止中断持续触发。
页: [1]
查看完整版本: 基于小华半导体MCU的GPIO中断应用示例