一、软件准备
可以看上一篇的软件准备
二、硬件准备
STM32F407霸天虎
DAP下载器
三、CubeMX配置
野火霸天虎用的主控芯片是STM32F407ZGT6
RCC选择外部高速时钟
Debug要选择Serial Wire,否则就只能烧录一次
按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开,使用按键时会产生(如下图)中的带波纹信号,需要用软件消抖处理滤波,不方便输入检测。霸天虎开发板连接的按键带硬件消抖功能,见原理图,它利用电容充放电的延时,消除了波纹,从而简化软件的处理,软件只需要直接检测引脚的电平即可。
根据原理图可知,按键1在PA0,按键2在PC13,这些按键在没有被按下的时候,GPIO 引脚的输入状态为低电平 (按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为高电平 (按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。
配置Key1,Key2的GPIO模式为输入模式(浮空输入),无需上下拉
根据原理图可以知道,开发板的LED引脚在PF6,7,8上,除此之外还有一个PC3的蓝色LED灯,都为低电平点亮
本次实验只用到了红灯,所以只需要配置PF6就可以了
转跳到时钟树配置,STM32F407ZGT6的最大时钟频率是168MHz,开发板的外部晶振为 25MHz,我们填入 25;通道选择 LSE;PLLM 选择为/25;倍频系数 N 选择为 x336;系统时钟选择 PLLCLK;系统时钟设定为 168Mz;APB1 分频系数选择为/4 即 PCLK1 位42MHz;APB2 分频系数选择为/2 即 PCLK2 位 84MHz。
根据自己的项目名称命名,IDE选择MDK-ARM
配置完成后点击Generate Code,再点击OpenProject即可从keil软件中打开该工程
四、keil编程
由于我们的Debug用的是DAP,如图下选择Debug和下载配置
main函数
由于本开发板按键使用了硬件消抖,所以不需要软件消抖,否则需要10ms左右的延时来进行软件消抖。
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/*等待KEY1按键按下*/
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == RESET)
{
/*等待KEY1按键释放*/
while(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == RESET)
{
/*灭灯*/
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_RESET);
}
}
/*等待KEY2按键按下*/
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == RESET)
{
/*等待KEY2按键释放*/
while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == RESET)
{
/*亮灯*/
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
}
}
}
/* USER CODE END 3 */
HAL_GPIO_WritePin函数作用是将写入指定的GPIO电平
HAL_GPIO_ReadPin的函数作用是读取GPIO的输入电平
五、实验效果
编译烧录后即可,板上效果:板上红灯默认开启,按下KEY1灭灯,按下KEY2亮灯。