STM32Cubemx——外部中断

文章目录

  • 前言
  • 一、使用工具
  • 二、前置知识
    • 2.功能分析
  • 3.STM32Cubemx配置
    • 1.新建工程
    • 2.选择时钟源及配置时钟树
    • 3.选择调试方式
    • 4.配置LED
    • 5.配置按键中断
    • 6.开启外部中断
    • 7.生成工程
  • 4.Keil编写功能函数
    • 1.找到外部中断回调函数
    • 2.在中断回调函数内编写服务函数
    • 3.编译并烧录代码
  • 4.工程下载地址


前言

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


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

一、使用工具

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

二、前置知识

查看核心板原理图
STM32Cubemx——外部中断_第1张图片
按键两端分别连接PA0,和GND。
当按键被按下时,单片机PA0口被拉低,为低电平。
STM32Cubemx——外部中断_第2张图片
LED正极接3.3V电压,负极接PC13,当PC13输出低电平时LED点亮。

2.功能分析

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

3.STM32Cubemx配置

1.新建工程

STM32Cubemx——外部中断_第3张图片
选择相应单片机型号

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

STM32Cubemx——外部中断_第4张图片
STM32Cubemx——外部中断_第5张图片

3.选择调试方式

STM32Cubemx——外部中断_第6张图片
时基选择SysTick(使用操作系统要选TIM)

4.配置LED

STM32Cubemx——外部中断_第7张图片
配置PC13口为输出模式,默认输出高电平,重定义为LED,及LED熄灭。

5.配置按键中断

STM32Cubemx——外部中断_第8张图片
选择PA0口为外部中断
STM32Cubemx——外部中断_第9张图片
配置引脚为低电平触发,默认上拉,引脚重定义为KEY

6.开启外部中断

STM32Cubemx——外部中断_第10张图片
在EXTI lin0 interrupt 后打上对勾。

7.生成工程

STM32Cubemx——外部中断_第11张图片
STM32Cubemx——外部中断_第12张图片
点击生成工程并打开。

4.Keil编写功能函数

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

STM32Cubemx——外部中断_第13张图片
将此函数在主函数内重新定义,_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.编译并烧录代码

STM32Cubemx——外部中断_第14张图片
第一次按下按键,LED点亮,之后每按下一次,LED状态翻转一次。

4.工程下载地址

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

你可能感兴趣的:(stm32,单片机,嵌入式)