STM32的GPIO的输入,输出与开漏,推挽,上拉,下拉的关系

STM32的GPIO的输入,输出与开漏,推挽,上拉,下拉的关系

输入输出的模式类别网上的资料有很多,我在这不多详写,主要写是GPIO 的管脚选用不同的模式,会对输出输入的电压造成什么影响

1.先看看输出

首先明确一点,开漏和推挽只是输出的两种模式,输入中没有这个选项。

STM32的GPIO的输入,输出与开漏,推挽,上拉,下拉的关系_第1张图片
使用STM32CubeMx对应生成MDK代码,编译下载后,咱们看看这几种模式选择中的输出电压到底是多少?(下表的实际电压为万用表测量!!!)
STM32的GPIO的输入,输出与开漏,推挽,上拉,下拉的关系_第2张图片
通过上图可以看出

  1. 推挽输出的可以输出高电平,低电平,开漏输出加上拉电阻才能输出高电平
  2. 输出中上拉电阻不足以让管脚输出3.3v的电压。
  3. 推挽输出中配置为输出高,下拉和上拉对输出电平无影响
  4. 开漏输出中必须配置上拉电阻和配置输出高才能输出高电平

2.再看看输入

输入选项配置中只有上拉和下拉
STM32的GPIO的输入,输出与开漏,推挽,上拉,下拉的关系_第3张图片

	  printf("U5_RX = %d ",HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_2));
	  printf("U5_TX = %d ",HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12));
	  printf("U6_RX = %d ",HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7));
	  printf("U6_TX = %d ",HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6));	

 	  printf("F11 = %d ",HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_11));
	  printf("F13 = %d ",HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_13));
 	  printf("F15 = %d\r\n",HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_15));

U5_RX = 1 U5_TX = 1 U6_RX = 1 U6_TX = 0 F11 = 0 F13 = 1 F15 = 0

前4个管脚是用作串口的,但是我测试时感觉读取的电平不符合逻辑,这两个串口只是普通的ttl串口外部也没加上拉电阻,这电平有点不太对
有知道的小伙伴可评论告诉我,十分感谢

后面三个管脚可以看出,输入模式的上拉可以让单片机判断为高电平

你可能感兴趣的:(STM32,单片机,stm32,gpio)