STM32·

STM32篇——外部中断

ronger

ronger

3370 1

1. 前期准备

安装好STM32CubeMX

安装好Clion

2. 创建项目

使用KEY2对应的引脚PC13作为外部中断的输入源,按下按键来模拟外部中断。在《串口通信》项目基础上,设置外部中断引脚PC13如下图所示。

按键没按下时,PC13引脚为低电平0V,按键按下时,PC13为高电平3.3V。因此,按键按下的过程为从0V跳到3.3V,即在PC13引脚产生了一个上升沿,如上图3所示,中断检测设置为上升沿触发。当KEY2按下时,单片机便能捕捉到该动作,从而可以进行相应的处理。

使能中断如下所示。

3. 编辑代码

系统自动生成的初始化代码如下:

//初始化代码位于main.c的MX_GPIO_Init(void)函数中
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

当单片机捕捉到中断(即按下KEY2的动作)后,进入外部中断处理函数:

void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */
  /* USER CODE END EXTI15_10_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(Exti13_Pin);
  /* USER CODE BEGIN EXTI15_10_IRQn 1 */
  /* USER CODE END EXTI15_10_IRQn 1 */
}

上面函数由系统自动生成,位于stm32f1xx_it.c文件中,函数中进一步调用HAL_GPIO_EXTI_IRQHandler(Exti13_Pin),具体定义如下:

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
  }
}

上述函数中,首先清除中断标志位,然后调用HAL_GPIO_EXTI_Callback(GPIO_Pin),如下:

__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
   */
}

也就是说,真正的中断处理在HAL_GPIO_EXTI_Callback()函数中进行,因此,我门只需要在该函数中添加代码即可。如上图所示,函数前面有__weak字样,我们可以在main.c文件中重新定义该函数,并添加中断处理代码,接收到中断后,系统将自动跳转到重定义函数中执行。

main.c中重写函数如下:

//重写GPIO中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    //翻转LED0
    HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
    //打印中断处理信息
    printf("ExTi13 interrput!\r\n");
}

如上代码所示,当检测到按键KEY2按下时,翻转LED0,并通过串口打印信息。

4. 编译下载

将程序下载至开发板,并将开发板连接至PC,打开串口调试助手RYCOM,并设置为:115200+8+N+1,接收结果如下。

5. 小结

本章学习了使用KEY2模拟外部中断,并进行了中断处理。

所属系列

从当前文章继续阅读它所在合集中的前后内容。

关于我和 Hugh 学嵌入式开发这件事 —— STM32 篇 第 5 / 17 篇
查看合集

> 本作品集内教程基于 [Hugh](https://rymcu.com/user/hugh) 的创作基础上进行修订发布 关于我和 Hugh 学嵌入式开发这件事

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 1

登录 后参与评论

评论 1

15603828292
1560382829210月16日 20:10

123123