[STM32L5] 【STM32L562 DK试用】3、GPIO的输入应用

[复制链接]
 楼主| Bymyself 发表于 2025-3-12 16:00 | 显示全部楼层 |阅读模式
<
       我们在实现了GPIO的输出控制后(实际上就是LED的控制),接下来我们看一看GPIO的输入,这个相对来说也是比较简单的。
       板子上目前有的可用按键实际上只有一个:
0d95bdf21d3c814129d0f584234821e6
       蓝色按键是咱们用户可以用的按键,另一个是复位按键,接下来看一下用户按键的原理图位置:
6926693a1985c3ccfd0a80798df14825
       按键默认是接地的,按下后状态是高电平,按键的采集一般有两种方式,一个是扫描,定时进行GPIO的状态采集,一种就是通过外部中断的方式,也就是GPIO的状态发生变化后后去一次,本次通过外部中断的方式进行按键采集,对应的引脚是PC13,。
       接下来咱们对之前的GPIO初始化工程进行增加按键的操作,打开STM32CubeMX的工程,找到PC13引脚,设置为外部中断模式:
ad88ccf6c64b7d97e792502d5b414cd9
       按下时接到高电平,所以选择上升沿出发比较合适:
d427c4a8d0c717980f498596988dc6f1
       注意开启对应的外部中断。
       接下来我们到程序里看一下,由于我们开启了外部中断,对于中断的处理都是通过回调函数来进行的,在stm32l5xx_it.c中可以看到PC13对应的外部中断为EXTI13_IRQHandler(void),里面的处理是调用HAL_GPIO_EXTI_IRQHandler(KEY_Pin);然后就是对应的上升和下降的处理,这里我们是处理的上升沿,对应的是HAL_GPIO_EXTI_Rising_Callback,我们需要重写处理程序:
  1. <p>void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)</p><p>{</p><p>  if(GPIO_Pin == GPIO_PIN_13)</p><p>  {/* KEY */</p><p>    HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);</p><p>    HAL_GPIO_TogglePin(LED_RED_GPIO_Port, LED_RED_Pin);</p><p>  }</p><p>}</p>

       在这里我们将上面的blink出发条件改为了按键一次翻转一次,效果如下:
4a836be577a892c02d757ea6411e6e85

您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

217

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部