stm32标准库和HAL库的对比学习2.《学习GPIO的读取和按键输入》
·
本人是大一的学生,学习了一段时间的stm32,此系列博客为个人的学习笔记,方便个人复习,如有错误或问题,非常非常欢迎大家来大力指正。
GPIO数据的读取:
GPIO的数据读取分两种,一种是读取输入数据寄存器的数据,获取外部输入的信息。第二种是读取输出数据寄存器的数据,看看单片机向外部输出什么东西。
1.标准库的按键输入初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_Initstructure.GPIO_Pin=GPIO_Pin_1;
GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_Initstructure);
这个代码是将GPIOB_pin1口定义为上拉输入。
可以看到和之前输出的引脚定义是很像的,只不过是GPIO_Mode定义从推挽改为了上拉输入。其他引脚属性的解释看上一篇文章。
而数据读取的有四种:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
ReadOutputData和ReadOutputDataBit是读取输出寄存器,bit是读一个pin的一个数据,没有bit是读取输出寄存器的全部数据(16位)
ReadOutputData和ReadOutputDataBit是读取输入寄存器,bit是读一个pin的一个数据,没有bit是读取输出寄存器的全部数据(16位)
判断方式是
GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) ==0//检测到低电平
GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) ==1//检测到高电平
2.HAL库的按键输入初始化

选择GPIO_Input

GPIO Pull-up/Pull-down对应 GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPU;设置上下拉输入
,用以下语句判断
HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)==0//输入低电平
HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)==1//输入高电平
3.HAL和标准库实现按键控制小灯的对比(按下点亮,松开熄灭)
需要自己写的部分
标准库
定义:
void key_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_Initstructure.GPIO_Pin=GPIO_Pin_10;
GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_Initstructure);
//GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
while(1)
{
if (GPIO_ReadIutputDataBit(GPIOB, GPIO_Pin_10) == 0)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
else
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
}
HAL库:
while(1)
{
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)==0)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
}
else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)==1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
}
}
void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)//反转引脚的电平
也可以用上面反转电平
更多推荐
所有评论(0)