如何使用STM32Cube HAL管理多个EXTI

1.简介

在嵌入式系统中,将多个GPIO用作外部中断(EXTI)源是非常常见的。但是如何在应用程序代码中管理它们呢?这正是本文将要介绍的内容。


2.先决条件

  • 硬件
    • Micro USB电缆用于从主机为Nucleo板供电,并将代码加载到STM32中。
    • STM32G081B-评估
  • 软件:STM32CubeIDE
 

3.理论

假设我们想要管理一个至少有五个输出信号的操纵杆:左、右、下、上和选择。我们将在配置为EXTI的STM32G0上使用五个GPIO进行管理。我们将使用STM32G081-EVAL,其上有一个连接到STM32G081的五个GPIO的操纵杆。

我们将PA0、PC3、PC8、PC7和PC2配置为带下拉的EXTI,并将EXTI的极性配置为上升沿。然后我们将看到需要什么代码来管理这五个外部中断。

 

4.步骤 

  1. 打开STM32CubIDE

  2. 为板上的STM32G081RBT6创建一个新项目



 
  1. 为项目命名


 
  1. 配置EXTI

让我们从PA0开始。我们将把PA0配置为具有内部上拉功能的外部中断(EXTI)。
我们还将添加一个用户标签“JOY_SEL”。要做到这一点,我们将从pinout视图在此处搜索PA0:

左键单击PA0并选择GPIO_EXTI0

现在我们将启用内部上拉,添加用户标签,并将外部中断边缘的极性更改为下降边缘。要执行此操作,请单击此处的系统视图:

现在点击GPIO

添加以下配置:
  • 将触发检测更改为上升沿
  • 启用内部下拉
  • 添加用户标签


 
  1. 现在对其余GPIO重复相同的练习:PC3、PC8、PC7和PC2

完成后,您应该具有以下配置:

 
  1. 现在为所有使用的EXTI线路启用中断。

转到GPIO的NVIC选项卡并启用三个EXTI中断:

 
  1. 生成代码

保存项目,也将生成代码。
 
  1. 添加代码来管理main.c中的五个EXTI

声明一个变量,该变量将告知按下了哪个键
/*用户代码开始PV*/uint16_t按钮按下=重置;/*用户代码端PV*/

现在添加回拨功能以管理五个键:
/*用户代码开始4*/无效HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin){开关(GPIO_Pin){case JOY_DOWN_Pin:Button_Pressed=JOY_DOWN_Pin;break;case JOY_UP_Pin:Button_Pressed=JOY_UP_Pin;break,case JOY_SEL_Pin:Buton_Pressed=JOY_SEL_Pin;break:case JOY_RIGHT_Pin:Butta_Pressed=JOY_RIHT_Pin;break;case JOY_LEFT_Pin:Botton_Pressed=JOY_LEFT_Pin;broke;default:break;}/*用户代码END 4*/
 
  1. 构建项目,进入调试模式并运行代码


项目生成后,进入调试会话。

将变量Button_Pressed添加到Live Watch窗口。
运行代码:

现在,每次按下操纵手柄的不同键时,您都会看到Button_Pressed(按钮按下)更新。

 

5.链接

STM32CubeIDE-STM32集成开发环境-STMicroelectronics
STM32G081B-EVAL-带STM32G0081RB MCU的评估板-STMicroelectronics
STM32G081x基于Badadvanced Arm®的32位MCU-产品介绍
STM320x1基于Arm®的高级32位MCU-参考手册