原理分析
工作原理分析:
内部上拉、下拉;
轮询模式、中断模式
中断触发模式:水平触发:高电平/低电平沿触发:上升沿/下降沿
按键原理图如下
观察不难发现,控制按键的管脚为 PB12,PB13,PB14。
我们将上次写的流水的封装为一个函数,将它当做程序能启动的标志(存放于gpio.c文件中,注意看是在USER CODE BLEGIN 2 和USER CODE END 2之间,如果不在,软件重新编译以后将会删除该内容,一般在gpio.c文件的最后,再将该函数在gpio.h中声明)
用在main函数中
轮询模式
轮询模式是指处理器一直全速运行,不断地查询是否有需要处理的数据包。这种方式的优点是实时性好,但缺点是会浪费处理能力和不节能
配置管脚
将PB12,PB13,PB14设置为输入模式(GPIO-input,左键即可出现选择),并将其改名,方便后期自己知道,按CTRL+s(S)自动生成代码
在gpio.c中
主函数添加代码
你会发现第一个if里的read..函数里的第一个参数和下面的不一样,但是他们是一个意思,都是监听某一个端口。我们写的程序的意思是,如果按下pb13,就会亮蓝灯,以此类推。
写好代码之后,编译,发现没有问题,即可烧录
烧录之后,按下Reset,程序的led灯会依次亮三个灯,表示程序启动成功,然后灭了,等到我们按PB12,PB13,PB14的时候就会有对应的灯亮起。
缺点:当你按下某一个按键的时候,另外的按键在按下会不起作用,如你按下了PB12,那么此时绿色的灯正在亮,你按PB13时,蓝色的灯将不会亮
中断模式
单片机中的中断模式是一种特殊的程序执行方式,它可以在程序执行的任何时候被触发,使得程序暂停执行,转而去执行中断服务程序。中断模式可以提高单片机的响应速度和处理能力,常用于处理实时性要求较高的任务。
管脚配置
配置中断优先级
未配置如下图
已配置如下图,若不配置优先级,则会使程序卡于中断时间那一部分,通俗的解释是时间的优先级低于中断的优先级时,时间无法到达下一秒,灯也就会一直亮着,感兴趣的可以去自己搜索了解或者私聊笔者。
将10到15的优先级改为大于0即可,0的优先级最高,以此类推。
配置完成后CTRL+s生成代码
寻找中断处理程序
按住CTRL键,点击右下角的两个函数中的其中一个,就会跳转到对应的处理函数内容
HAL_GPIO_EXTI_Callback(GPIO_Pin)函数就是我们中断后的处理函数,你会发现其下面也有一个一模一样的函数,但是前面有__weak,代表如果用户重新编写了函数就用用户的函数,否则就用该函数。
在gpio.c文件中重新编写该函数
记得将主函数里的删除或者用if 0的形式,效果才能更加直观(本人有改按键名字)
编译,烧录,就会发现程序成功。且和之前的不太一样