STM32
直播中

肖耳朵

12年用户 557经验值
私信 关注
[问答]

STM32CubeMx外部中断配置的过程是怎样的?

STM32CubeMx外部中断配置的过程是怎样的?

回帖(1)

何羽衣

2021-11-16 10:35:44
  本文开发环境:
  

  • MCU型号:STM32F051R8T6
  • IDE环境: MDK 5.25
  • 代码生成工具:STM32CubeMx 5.2.0
  • HAL库版本:v1.9.0(STM32Cube MCU Package for STM32F0 Series)

  本文内容:
  

  • STM32CubeMx 配置外部中断

外部中断简介

这里的外部指的是单片机以外,所以通过IO的输入来获取中断,典型的外部中断有按键和一些传感器工作状态的输出等。外部中断有事件和中断两种类型,简单来说中断类型是将中断递给NVIC,让CPU去即响应这种中断。而事件模式则是递给其他的外设处理,参考博客:《EXTI中断和事件的区别》《STM32的“外部中断”和“事件”区别和理解》
初始化IO口为外部中断

通用初始化

通用初始化指的是系统时钟(RCC)的配置,调试口(SW/JTAG)使能等等,每一个工程都需要的配置,详见:STM32CubeMx 初始化和读/写 IO口操作
外部中断配置

本文使用的开发板PA0连接了一个按键在PA0引脚处,所以以PA0为例演示外部中断的配置:


  • 将IO口配置为中断模式,在PA0引脚处右键,弹出的选项菜单中选择“GPIO_EXTI0”,如下图所示:




  • 配置IO的中断,本文将PA0口配置为外部中断模式,上拉输入,双边沿触发,具体操作如下:




  • 配置NVIC,注意这里有2步,就是NVIC中断使能后,还需要在 “Code generation” 中选择生成代码,具体操作如下:





(这一步可能是非必须的)





示例程序

当我们配置好外部中断以后,一旦发生外部中断,程序就会调用外部中断回调函数,所以我们需要在回调函数中写入代码,如下图所示:
..
... ...
#include "usart.h"
... ...
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
        if(GPIO_Pin == GPIO_PIN_0)
        {
                uint8_t str[7] = "EXTI0rn";
                HAL_UART_Transmit(&huart1,str,7,0x200);
        }
}
这里使用了串口来验证程序是否进入了中断,回调函数是不需要用户声明的,CubeMx工程已经做了相关操作,直接重写即可,这段代码可以添加在mian.c函数中,也可以添加在 gpio.c 中或其他文件中。
下载验证

程序编写完成以后,就可以编译下载,验证功能:





注意,由于是上下边缘触发,所以按下和抬起,都会触发一次中断,由于本例程没有做按键消抖,所以有时候会发现按下一次,触发几次的情况。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分