手把手从0到1教你做STM32+FreeRTOS智能家居--第4篇之按键中断

一、硬件设计

按键KEY1连接PB6,KEY2连接PC3。

二、软件设计

通过原理图知道按键通过一个上拉电阻接到3.3V,按键没有被按下时,GPIO输入口检测到为高电平,按键被按下时GPIO口检测到为低电平。

接下来配置STM32Cubemx,将GPIO配置为下降沿触发模式,选择Pull-up(上拉),UserLabal填Keyx方便后期维护代码,然后点击生成代码即可。

 生成代码后,stm32f1xx_it.c中可以看到对应的中断处理代码,HAL_GPIO_EXTI_IRQHandler()函数中调用了一个中断回调函数HAL_GPIO_EXTI_Callback,通过其中的注释可知道,我们可以通过在自己的用户文件中重新定义此函数,来处理我们的中断触发事件。

void EXTI3_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI3_IRQn 0 */

  /* USER CODE END EXTI3_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(Key2_Pin);
  /* USER CODE BEGIN EXTI3_IRQn 1 */

  /* USER CODE END EXTI3_IRQn 1 */
}

/**
  * @brief  EXTI line detection callbacks.
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

所以,我们可以在main.c中重新对此函数进行定义,来实现我们自己的应用。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == Key1_Pin)
	{
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
	}
	if(GPIO_Pin == Key2_Pin)
	{
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);

	}
}

三、实验效果

按键控制LED亮灭。

STM32按键控制LED

结尾:

对这个项目感兴趣的小伙伴,完全可以根据本项目的文章教程,一步步自己搭建属于自己的STM32-FreeRTOS智能家居项目,如果需要完整资料完整硬件的可私信我(有偿):原理图、STM32源码、Android app源码、操作教程。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值