STM32单片机—————按键的使用(轮询,中断模式)

STM32单片机—————按键的使用(轮询,中断模式)_第1张图片

原理分析

工作原理分析:

内部上拉、下拉;

轮询模式、中断模式
中断触发模式:水平触发:高电平/低电平沿触发:上升沿/下降沿

按键原理图如下

STM32单片机—————按键的使用(轮询,中断模式)_第2张图片

观察不难发现,控制按键的管脚为 PB12,PB13,PB14。

我们将上次写的流水的封装为一个函数,将它当做程序能启动的标志(存放于gpio.c文件中,注意看是在USER CODE BLEGIN 2 和USER CODE END 2之间,如果不在,软件重新编译以后将会删除该内容,一般在gpio.c文件的最后,再将该函数在gpio.h中声明)

STM32单片机—————按键的使用(轮询,中断模式)_第3张图片

用在main函数中

STM32单片机—————按键的使用(轮询,中断模式)_第4张图片

轮询模式

轮询模式是指处理器一直全速运行,不断地查询是否有需要处理的数据包。这种方式的优点是实时性好,但缺点是会浪费处理能力和不节能

配置管脚

将PB12,PB13,PB14设置为输入模式(GPIO-input,左键即可出现选择),并将其改名,方便后期自己知道,按CTRL+s(S)自动生成代码

STM32单片机—————按键的使用(轮询,中断模式)_第5张图片

在gpio.c中

STM32单片机—————按键的使用(轮询,中断模式)_第6张图片

主函数添加代码

STM32单片机—————按键的使用(轮询,中断模式)_第7张图片

你会发现第一个if里的read..函数里的第一个参数和下面的不一样,但是他们是一个意思,都是监听某一个端口。我们写的程序的意思是,如果按下pb13,就会亮蓝灯,以此类推。

写好代码之后,编译,发现没有问题,即可烧录

烧录之后,按下Reset,程序的led灯会依次亮三个灯,表示程序启动成功,然后灭了,等到我们按PB12,PB13,PB14的时候就会有对应的灯亮起。

缺点:当你按下某一个按键的时候,另外的按键在按下会不起作用,如你按下了PB12,那么此时绿色的灯正在亮,你按PB13时,蓝色的灯将不会亮

中断模式

单片机中的中断模式是一种特殊的程序执行方式,它可以在程序执行的任何时候被触发,使得程序暂停执行,转而去执行中断服务程序。中断模式可以提高单片机的响应速度和处理能力,常用于处理实时性要求较高的任务。

管脚配置

STM32单片机—————按键的使用(轮询,中断模式)_第8张图片

配置中断优先级

未配置如下图

STM32单片机—————按键的使用(轮询,中断模式)_第9张图片

已配置如下图,若不配置优先级,则会使程序卡于中断时间那一部分,通俗的解释是时间的优先级低于中断的优先级时,时间无法到达下一秒,灯也就会一直亮着,感兴趣的可以去自己搜索了解或者私聊笔者。

将10到15的优先级改为大于0即可,0的优先级最高,以此类推。

STM32单片机—————按键的使用(轮询,中断模式)_第10张图片

配置完成后CTRL+s生成代码

寻找中断处理程序

STM32单片机—————按键的使用(轮询,中断模式)_第11张图片

按住CTRL键,点击右下角的两个函数中的其中一个,就会跳转到对应的处理函数内容

STM32单片机—————按键的使用(轮询,中断模式)_第12张图片

 HAL_GPIO_EXTI_Callback(GPIO_Pin)函数就是我们中断后的处理函数,你会发现其下面也有一个一模一样的函数,但是前面有__weak,代表如果用户重新编写了函数就用用户的函数,否则就用该函数。

在gpio.c文件中重新编写该函数

STM32单片机—————按键的使用(轮询,中断模式)_第13张图片

记得将主函数里的删除或者用if 0的形式,效果才能更加直观(本人有改按键名字)

STM32单片机—————按键的使用(轮询,中断模式)_第14张图片

编译,烧录,就会发现程序成功。且和之前的不太一样

STM32单片机—————按键的使用(轮询,中断模式)_第15张图片

你可能感兴趣的:(STM32单片机学习笔记,单片机,stm32,嵌入式硬件)