这一章,我们将通过
ALIENTEK
阿波罗
STM32
开发板上载有的 4 个按钮(
KEY_UP
、
KEY0
、
KEY1
和
KEY2
),来控制板上的 2 个
LED
(
DS0
和
DS1
),其中
KEY_UP
控制
DS0
,
DS1
互斥点亮;
KEY2
控制
DS0
,按一次亮,再按一次灭;
KEY1
控制
DS1
,效果同
KEY2
;
KEY0
则同时控制
DS0
和
DS1
,按一次,他们的状态就翻转一次。
一、STM32F4 IO 口简介
这部分内容可参考STM32F4 | GPIO工作原理和配置。STM32F4
的 IO
口做输入使用的时候,是通过调用函数 HAL_GPIO_ReadPin ()
来读取 IO
口的状态的。
二、硬件设计
本实验用到的硬件资源有:
- 指示灯
DS0
、DS1
。 - 4 个按键:
KEY0
、KEY1
、KEY2
、和KEY_UP
。
在阿波罗 STM32
开发板上的按键 KEY0
连接在 PH3
上、KEY1
连接在 PH2
上、KEY2
连接在 PC13
上、KEY_UP
连接在 PA0
上。如图所示:
这里需要注意的是:KEY0
、KEY1
和 KEY2
是低电平有效的(按下是低电平),而 KEY_UP
是高电平有效的(按下是高电平),并且外部都没有上下拉电阻,所以,需要在 STM32F429
内部设置上下拉。输入模式配置如下:
PH3
:上拉输入PH2
:上拉输入PC13
:上拉输入PA0
:下拉输入
三、软件设计
我们直接复制上一个实验的工程模板,将复制过来的模板文件夹重新命名为“2-按键实验”。在HARDWARE->KEY
文件夹下面新建key.c
文件以及头文件 key.h
。
打开key.c
文件,代码如下:
#include "key.h"
#include "delay.h"
/*
函数名称:KEY_Init
函数功能:初始化按键输入实验所用到的IO口
输 入:无
输 出:无
*/
void KEY_Init(void)
{
//定义结构体变量
GPIO_InitTypeDef GPIO_Initure;
//使能按键对应IO口的时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
//初始化IO口;H2和H3是上拉输入,C13是上拉输入;A0是下拉输入
//初始化GPIOA
GPIO_Initure.Pin = GPIO_PIN_0; //PA0
GPIO_Initure.Mode = GPIO_MODE_INPUT; //输入
GPIO_Initure.Pull = GPIO_PULLDOWN; //下拉
GPIO_Initure.Speed = GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
//初始化GPIOC
GPIO_Initure.Pin = GPIO_PIN_13; //PC13
GPIO_Initure.Mode = GPIO_MODE_INPUT; //输入
GPIO_Initure.Pull = GPIO_PULLUP; //上拉
GPIO_Initure.Speed = GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOC