本人是大一的学生,学习了一段时间的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)//反转引脚的电平

也可以用上面反转电平

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐