STM32Cubemx——外部中断

Posted 平陆成江,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32Cubemx——外部中断相关的知识,希望对你有一定的参考价值。


前言

本文将向大家详细演示STM32Cubemx配置GPIO外部中断实验,使用按键来翻转LED电平。


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用工具

STM32F103C8T6核心板
STM32Cubemx 版本6.0.1
Keil 版本 5.31
ST-Link

二、前置知识

查看核心板原理图
在这里插入图片描述
按键两端分别连接PA0,和GND。
当按键被按下时,单片机PA0口被拉低,为低电平。
在这里插入图片描述
LED正极接3.3V电压,负极接PC13,当PC13输出低电平时LED点亮。

2.功能分析

目的:当按键被按下时,LED状态翻转。
有两种方案:
1.不断扫描PA0口电平状态,当检测到低电平时,即按键被按下。
2.使用外部中断,当发生低电平时,进入中断函数,翻转PC13口输出电平。
显然第二种方案占用更少的资源。

3.STM32Cubemx配置

1.新建工程

在这里插入图片描述
选择相应单片机型号

2.选择时钟源及配置时钟树

在这里插入图片描述
在这里插入图片描述

3.选择调试方式

在这里插入图片描述
时基选择SysTick(使用操作系统要选TIM)

4.配置LED

在这里插入图片描述
配置PC13口为输出模式,默认输出高电平,重定义为LED,及LED熄灭。

5.配置按键中断

在这里插入图片描述
选择PA0口为外部中断
在这里插入图片描述
配置引脚为低电平触发,默认上拉,引脚重定义为KEY

6.开启外部中断

在这里插入图片描述
在EXTI lin0 interrupt 后打上对勾。

7.生成工程

在这里插入图片描述
在这里插入图片描述
点击生成工程并打开。

4.Keil编写功能函数

1.找到外部中断回调函数

在这里插入图片描述
将此函数在主函数内重新定义,_weak(弱定义)

2.在中断回调函数内编写服务函数

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
    if(GPIO_Pin == KEY_Pin)            //如果发生外部中断的是KEY_Pin
    {
        while(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET);//等待按键松开,避免LED状态重复翻转
        HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED状态
    }
  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
   */
}
/* USER CODE END 4 */

避免长时间按下按键不放开,可能导致阻塞,程序其他部分不能正常运行。

3.编译并烧录代码

在这里插入图片描述
第一次按下按键,LED点亮,之后每按下一次,LED状态翻转一次。

4.工程下载地址

链接:https://pan.baidu.com/s/1I9J6LnbX9t-x40EFy287MQ
提取码:vi2d

以上是关于STM32Cubemx——外部中断的主要内容,如果未能解决你的问题,请参考以下文章

stm32cubemx 外部中断

stm32cubemx 外部中断

STM32CubeMX之外部中断

STM32G070RBT6基于STM32CubeMX创建EXTI外部中断工程

STM32F103VET6基于STM32CubeMX利用EXTI外部中断测量PWM频率

STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程