|
一、代码实现流程
打开CubeMx→新建工程→搜索芯片→在右边点击芯片→保存工程→点击RCC配置时钟→设置成Crystal→然后在Clock Configuration中设置为HSE、72→然后点击SYS→在Debug那里选择Senal Wire→然后配置IO口(输入输出还有名字)→然后再GPIO中查看自己所设置的东西→然后在对应位置敲代码
二、代码实现过程总结
①用到按键一班都会涉及消抖还有状态标志位,使用轮询计数可以更好地利用内部资源
②ctrl+k进行所选代码整体注释,Ctrl+shift+k进行整体取消注释
③一定要在系统规定我们写代码的地方写,不然下次生成还得再写一遍
④对于什么时候设置成输入输出,我的理解就是你要用某个引脚控制一个东西,比如说你想控制小灯,那这个引脚就得设置成输出。如果想知道某个引脚是高电平还是低电平,就设置成输入,比如我想知道按键所连的IO口的状态。
⑤对于上拉还是下拉,这是针对于输入而言,输出没有上下拉的概念,按键按下检测到低电平就是上拉输入,按键按下检测到高电平就是下拉输入。
⑥读取或者写入GPIO函数在GPIO库中,而按键名称定义在main.h里面
三、代码
while (1)
{
switch(step)
{
case 0:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET )//判断按键是否按下
{
count++;
if(count>=10000)//真的按下了
{
count = 0;//按键按下也要重新开始
//printf("按键按下了\n");
step = 1;//标志
flag = !flag;//按键标志状态
}
}
else//抖动状态
{
count = 0;
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//判断按键是否释放
{
//printf("按键已经释放\n");
step = 0;
}
}
break;
}
if(flag==0)
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);//灯亮
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);//灯亮
}
else
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//灯灭
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);//灯灭
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
|
|