STM32的GPIO的输入,输出与开漏,推挽,上拉,下拉的关系
输入输出的模式类别网上的资料有很多,我在这不多详写,主要写是GPIO 的管脚选用不同的模式,会对输出输入的电压造成什么影响
1.先看看输出
首先明确一点,开漏和推挽只是输出的两种模式,输入中没有这个选项。
使用STM32CubeMx对应生成MDK代码,编译下载后,咱们看看这几种模式选择中的输出电压到底是多少?(下表的实际电压为万用表测量!!!)
通过上图可以看出
- 推挽输出的可以输出高电平,低电平,开漏输出加上拉电阻才能输出高电平
- 输出中上拉电阻不足以让管脚输出3.3v的电压。
- 推挽输出中配置为输出高,下拉和上拉对输出电平无影响
- 开漏输出中必须配置上拉电阻和配置输出高才能输出高电平
2.再看看输入
输入选项配置中只有上拉和下拉
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串口外部也没加上拉电阻,这电平有点不太对
有知道的小伙伴可评论告诉我,十分感谢
后面三个管脚可以看出,输入模式的上拉可以让单片机判断为高电平