作为嵌入式开发的入门, GPIO的操作是最基本的,对GPIO的操作,就像以前学C语言一样,控制GPIO输出点亮LED,就向使用printf在显示屏上输出“hello world”一样,而与之对应的 ,则是通过GPIO采集电平信号,这个有点类似scanf了。前次评测,已经测试了通过GPIO控制LED的闪烁,这次将通过按键,结合LED的控制,实现对LED的亮灭控制,测试GPIO的输入检测功能。 STM32CubeIDE是一款集成度很高的开发环境,在本次的评测中,将展示如何通过它实现对外设的配置,以及方便快捷的代码生成,只需要做很少的工作,就可以实现应用程序的开发,这也是我后续评测的主要方式。 硬件分析和针脚配置 可以看到,首先有两个针脚可以接收该按键的型号,PA0和PC13,但是PA0没有用焊锡连起来,因此本次测试没法使用它,按一般的PA0针脚作用,估计这个是留着做唤醒测试时使用的。按键没有按下情况下,PC13是悬空 的,按下以后与高电平接通。 接下来回到STM32CubeIDE中,在针脚配置中,设置PC13的配置: 如果和前面一样,新建的项目是选择对应的开发板方式打开的话,可以看到这里PC13已经为我们配置好了,而且还是使用的EXIT13的外部中断等,这里我们暂时用不上,先将其配置为普通的GPIO输入(GPIO_Input),如下图: 然后生成代码,并在main.c中修改代码: 然后编译,下载,测试可以看到,按下蓝色按键,LED点亮,松开蓝色按键以后,LED熄灭。 当然,我们还可以做成检测到按键按一下就翻转一次LED灯的亮灭的程序,这个过程就把以前的什么按键消抖技巧都可以加上。但是,这并不是一个很好的方法,更多的则是使用中断方式。 回到刚开始的配置,将PC13模式变为GPIO_EXTI13,中断方式配置为上升沿中断即可: 勾选EXIT中断使能: 在头文件stm32u5xx_hal_gpio.h中定义了,已经三个中断处理函数:
可以看到它清除中断标志,并调用了上升沿或者下降沿的回调函数,而这两个函数是定义为__weak的,因此可以被用户定义的函数覆盖,由于我们使用的是上升沿,在main.c中重写:
并将前面main函数中的轮询代码给删除掉。 最后编译,下载,然后测试,按键按下一次LED的亮灭状态就翻转一下,如果测试会发现有时候按下没有效果, 这是因为仍然存在抖动的问题,所以更好的方式是使用下降沿,因为在松手的时候,触点弹开出现抖动的现象要好一些。 可以看到,整个过程中只是需要一些配置工作,并不需要写太多的代码。 |
STM32U5 系列使用 LPBAM 进行功耗优化
【STM32U545】实现CAN数据收发
【我的STM32U5 项目秀】+04-MPU6050在STM32U5上的移植
实战经验 | 基于 STM32U5 创建 USBx_CustomHID 通信
STM32U5 x E-BIKE,记录你的骑行多巴胺
基于STM32U5系列TIMER+DMA+DAC应用经验分享
实战经验 | 基于 STM32U5 片内温度传感器正确测算温度
【文末有礼】新款STM32U5:让便携产品拥有惊艳图效
STM32的CAN FD位定时设置注意事项
【STM32U599】5.聊聊手表菜单
学习学习