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

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平陆成江,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值