1.按键扫描实验
实验内容:通过 FS-STM32F407 载有 4 个按键(KEY3、KEY4、KEY5、KEY6),控制 4 个 LED 灯的点亮和关闭状态。编写按键程序,实现 FS-STM32F407 开发平台上的按键控制 LED 灯亮灭实验。调试编译好程序后, 将程序下载到 FS-STM32F407 ,按复位键观察实验现象。
开发板有四个key 分别与 PI9 ,PF11, PC13, PA0 四个管脚连接
管脚配置如图
时钟配置如图:
点击生成工程按钮
关键代码:
在GPIO.h中添加 对管脚的定义
/* USER CODE BEGIN Includes */
#define KEY3 HAL_GPIO_ReadPin(GPIOI,GPIO_PIN_9) //PI9
#define KEY4 HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_11) //PF11
#define KEY5 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) //PC13
#define KEY6 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) //PA0
/* USER CODE END Includes */
/* USER CODE BEGIN Private defines */
uint8_t KEY_Scan(uint8_t); //按键扫描函数
在 gpio.c 中添加函数的实现代码,
uint8_t KEY_Scan(uint8_t mode)
{
static uint8_t key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY3==0||KEY4==0||KEY5==0||KEY6==0))
{
HAL_Delay(10);//去抖动
key_up=0;
if(KEY3==0)return 3;
else if(KEY4==0)return 4;
else if(KEY5==0)return 5;
else if(KEY6==0)return 6;
}else if(KEY3==1&&KEY4==1&&KEY5==1&&KEY6==1)key_up=1;
return 0;// 无按键按下
}
build ---> load ---> test.
本实验下载完毕测试发现一个问题,管脚和按键、led灯的顺序并不是对应的。经过实验发现有如下对应关系
Key=6 (GPIOA,GPIO_PIN_0) PA0 对应实验板的KEY4 GPIOF,GPIO_PIN_10 PF10 对应led1
Key=5 (GPIOC,GPIO_PIN_13) PC13 对应实验板的KEY3 GPIOF,GPIO_PIN_9 PF9 对应led2
Key=4 (GPIOF,GPIO_PIN_11) PF11 对应实验板的KEY2 GPIOF,GPIO_PIN_8 PF8 对应led3
Key=3
接下来有三个可能出问题的地方,第一可能是板子的led4这个灯坏了,第二可能是key4绑定的管脚不对,第三可能是led4灯绑定的管脚不对。
首先拿第二块实验板测试。
经过实验发现,第二块实验班的led4灯也是不亮的,那说明不是实验器材损坏
第二部检查是否是key4灯绑定不对:
啊这。。一个一个管脚试比较麻烦,我有个办法就是编一个程序一劳永逸,打开所有管脚,测试输出信号,可以借鉴一下
------------------------------------更新-----------------------------------
朝实验板的开发人员要了一份原理图,使用正确的管脚设置终于正常了
可以看到使用的是PE2接口