蓝桥杯嵌入式CT117E-M4学习笔记07-按键&外部中断实验


前言

本次我们来学习开发板的按键以及外部中断实验

一、实验原理

1.根据原理图我们可以看到,开发板的四个按键一端10k的上拉电阻接入电源,另一端是直接接入GND的,因此当按键未按下时,IO口读取的状态为高电平,当按键按下后,IO口读取的状态则为低电平,因此我们有两种方式去判断按键是否按下↓

1.在主循环中,循环判断IO口的状态,当IO状态为低电平时,则表示按键被按下。
2.使用外部中断,配置下降沿触发,当按键被按下时,状态由高电平转换为低电平,此时外部中断被触发一次。

在这里插入图片描述
2. 外部中断是什么?

    首先我们要理解什么是中断。
想象一个场景:你在家里看书学习,这时候突然来电话了。你的做法是停止学习去接电话,电话打完再放下电话继续学习。这一个过程就体现了中断的思想。我们抽象一下,把自己想象成一个单片机系统,看书就是正在执行的主任务,如果没有外界干扰,这个系统会一直执行当前的主任务。而当外部有改变(电话响了)的时候,系统会第一时间响应,从主任务跳转到这个紧急任务中,这个突发的事件就是(外部)中断,而系统处理的紧急任务则是中断处理函数。当紧急任务(接电话)完毕之后,系统又会回到最初的主任务中。

这就是MCU的外部中断过程。

3. STM32的外部中断线

  • STM32的每个IO都可以作为外部中断输入。
  • STM32的中断控制器支持19个外部中断/事件请求:
        线0~15:对应外部IO口的输入中断
        线16:连接到PVD输出。
        线17:连接到RTC闹钟事件。
        线18:连接到USB唤醒事件。
        每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

4. STM32的外部中断线与IO口映像,如下图所示,由于所有不同分组的相同位号IO口对应同一条中断线,因此STM32最多只能有16个单独的外部IO中断(而开发板的B1和B4按键对应PB0和PA0两个同位号的IO,因此我们将按键B4设置为循环判断按下的方式,B1至B3按键使用外部中断方式)。

在这里插入图片描述

二、配置步骤

1.创建工程,配置时钟、MDK5配置等。

2.配置GPIO,先配置LED灯,然后将PB0-PB2设置为外部中断模式,PA0设置为输入模式。

在这里插入图片描述

3.将四个IO口配置上拉电阻,同时将PB0-PB2配置为下降沿触发中断,并为四个IO自定义名称为B1-B4

在这里插入图片描述

4.使能外部中断,为外部中断配置抢占优先级以及子优先级,然后点击右上角Generate Code生成Keil5代码。

在这里插入图片描述

三、循环判断按键按下

1.在main.c中输入相应的代码。

//判断B4按键状态 如果是低电平则表示按下了
if(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin) == GPIO_PIN_RESET){
	HAL_Delay(1);		//延时1ms消除抖动
	//再次判断是否按下
	if(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin) == GPIO_PIN_RESET){
		//翻转LED1 2 3的状态
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10);
		//等待松手
		while(HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin) == GPIO_PIN_RESET);
	}
}

在这里插入图片描述

2.实验现象,按下B4按键后,LED1-LED3状态翻转

在这里插入图片描述

四、外部中断判断按键按下

1.在main.c中重写外部中断回调函数,并判断是哪条中断线按下。

//外部中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
	//如果按键1按下
	if(GPIO_Pin == B1_Pin){
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_11);		//翻转LED4
	}
	//如果按键2按下
	if(GPIO_Pin == B2_Pin){
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_12);		//翻转LED5
	}
	//如果按键3按下
	if(GPIO_Pin == B3_Pin){
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);		//翻转LED6
	}
}

在这里插入图片描述

2.实验现象,按下B1 B2 B3时,对应的LED4 5 6状态翻转

在这里插入图片描述

总结

以上就是开发板的按键以及外部中断实验,如有错误,感谢指正。

鉴于官方开发板售价过高,本人自己制作了一款蓝桥杯嵌入式开发板,完全兼容官方的开发板,并且接下来会基于这款开发板进行学习和制作学习日志,到时候所拍实物图片会与官方开发板略有不同,如果有意向一起学习的同学也可以私聊我互相学习交流,ps: 找我低价买块开发板自己学习也是可以的 ~ 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

妍芯电子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值