文章目录
前言
准备参加蓝桥杯,做一些笔记和记录,分享出来供大家参考,如果表述,看法有误,或有更好的想法,请发表评论,我会加以改正。
这一章我总结了GPIO的输入,输出,和我做蓝桥杯大题的一些小技巧
一、STM32CudeMX的使用
使用cudemx新建一个工程
修改箭头处的信息,mcu的型号进行对应的选择,蓝桥杯的对应的g431如图设置。
推荐这样设置这样及保障了文件尽可能的小,也便于修改,然后点击生成文件即可
提示
自己的代码一定要写在begin和end之间,不然当你有使用cubemx初始化别的功能时会将你自己写的代码全部覆盖掉
二、GPIO
1.输出
初始化对应的引脚
打开这一初始化函数我们可以看到对应的初始化,使用cubemx相对于标准库来说将初始化做的更加方便和简单。
打开gpio.h文件找到需要使用到的函数
//此函数可以将对应引脚设置为高低电平
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinStatePinState);
//此函数可以反转引脚对应的高低电平
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
//例子
//设置pb0为低电平,高电平对应参数为GPIO_PIN_SET
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
//反转pb0的电平,高变低,低变高
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
2.输入
对应函数的使用
//读电平
HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
//读取pb0的电平,存入变量key
uint8_t key;
key=HAL_GPIO_ReadPin(GPIB,GPIO_Pin_0);
三.按键长短按的解决方法
//短按
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
//static uint8_t i=0;
HAL_Delay(10);//按键消抖
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
//所需要处理的内容
while((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0))
{
//HAL_Delay(10);
}
}
}
//长按
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
static uint8_t i=0;
HAL_Delay(10);//按键消抖
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
i++;
HAL_Delay(10);
if(i>80)//长按0.8s后执行
{
//长按所需要执行的代码
}
}
i=0;
}
}
最好宏定义按键,可以更加直观的对按键进行控制
#define key1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)