如何使用STM32Cube HAL管理多个EXTI
如何使用STM32Cube HAL1管理多个EXTI。引言在嵌入式系统中,将多个GPIO用作外部中断(EXTI)源是非常常见的。但是如何在应用程序代码中管理它们呢?这正是正在发生的事情。。。
如何使用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.步骤
-
打开STM32CubIDE
-
为板上的STM32G081RBT6创建一个新项目

-
为项目命名

-
配置EXTI
我们还将添加一个用户标签“JOY_SEL”。要做到这一点,我们将从pinout视图在此处搜索PA0:

左键单击PA0并选择GPIO_EXTI0

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

现在点击GPIO

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

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

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

-
生成代码
-
添加代码来管理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*/
-
构建项目,进入调试模式并运行代码

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

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

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

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