[开发工具] 基于小华半导体MCU的GPIO中断应用示例

[复制链接]
 楼主| 童雨竹 发表于 2024-10-4 08:21 | 显示全部楼层 |阅读模式
GPIO, IO, MCU, gp, pi
在这篇文章中,我将分享如何使用小华半导体的MCU实现GPIO中断的基本应用。GPIO中断在嵌入式系统中非常常见,用来处理外部信号触发的事件,比如按键、传感器信号等。

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

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

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

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

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

  1. void MX_GPIO_Init(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStruct = {0};

  4.     /* GPIOA时钟使能 */
  5.     __HAL_RCC_GPIOA_CLK_ENABLE();

  6.     /* 配置PA0为输入模式 */
  7.     GPIO_InitStruct.Pin = GPIO_PIN_0;
  8.     GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  9.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  10.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  11.    
  12.     /* 使能中断 */
  13.     HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
  14.     HAL_NVIC_EnableIRQ(EXTI0_IRQn);
  15. }

运行效果:当按下连接到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 | 显示全部楼层
中断回调函数中必须清除中断标志,以防止中断持续触发。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

5870

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

155

主题

5870

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部