stm32的8种GPIO输入输出模式区别

GPIO的8种输入与输出

一.四种输入模式

1.GPIO_Mode_IN_FLOATING(浮空输入) 2. GPIO_Mode_IPU(上拉输入) 3. GPIO_Mode_IPD(下拉输入) 4. GPIO_Mode_AIN(模拟输入)

(1).浮空输入 我的理解是此种模式下,io口的高低电平是不确定的,完全是由外部电平决定。从网上了解到该种模式多用于外部按键检测和ADC输入用,这两种我都还没用过。但回想一下,我在暑假用正点原子的mini开发板做两个呼吸灯交替实验的的时候,用到了此种模式,查找中文参考手册可知,mini开发板的LED1对应的io口PD2并没有与之相对应的pwm输出通道,此时就把PD2设置为浮空输入模式,通过杜邦线与另一个可以产生pwm波的io口连接起来。仔细想来,应该就是由于浮空模式下io口高低电平的不确定性,它就由与它相连的io口输出的电平所决定。 (2).上拉输入 上拉输入简单来说就是内部接入了一个上拉电阻,在没有外界输入时,表现为高电平;有外界输入时,电压信号进入芯片后见过施密特触发器转化成0、1信号,读取此时的电平为高或为低。一般来说,当正常状态下为高电平时可配置为该模式。以正点原子的mini开发板上的两个普通按键为例,他们被按下时低电平有效,未被按下时为高电平,所以在io口的初始化中,将io口配置为上拉输入模式。 (3)下拉输入 下拉输入与上拉输入类似,是内部接入了一个下拉电阻。无外界输入时,表现为低电平;有外界输入时,电压信号进入芯片后见过施密特触发器转化成0、1信号,读取此时的电平为高或为低。同样以正点原子的mini开发板上的WK-UP按键为例,未被按下时表现为低电平,被按下时为高电平,所以在io口的初始化中,将io口配置为下拉输入模式。 (4)模拟输入 前三种输入模式,输入的均为数字信号,而模拟输入输入的信号是未被处理过的信号,简单来说就是最原汁原味的,信号产生的时候是什么样子最后还是什么样子。此种模式常用于ADC转换。

二.四种输出模式

1.GPIO_Mode_Out_OD (开漏输出) 2.GPIO_Mode_Out_PP (推挽输出) 3.GPIO_Mode_AF_OD (复用开漏输出) 4. GPIO_Mode_AF_PP(复用推挽输出) (1)开漏输出 正常状态下只能输出低电平**(无法直接输出高电平),如果要输出高电平则需要外接上拉电阻。此种输出模式的优点就是可以通过改变外接上拉电阻的大小来改变传输电平。一般用于匹配电平。 开漏输出还有一个特性:线与。即很多开漏模式引脚连接在一起,只有当所有引脚都输出1时,才能够被上拉电阻拉到高电平。若有一个引脚为低电平,则所有引脚相当于接地。 (2).推挽输出 简单来说就是芯片写1,io口输出高电平,芯片写0,io口输出低电平。(输出高低电平由芯片控制) -IO输出0-接GND,- IO输出1 -接VCC (3).复用开漏输出 用于io口的第二功能(作为非普通io口使用)**其他方面与开漏输出相同

此处简单介绍一下什么是io口的复用功能 stm32 的cpu的内置外设(pwmTIMADC…)都需要有外接io口才能使用,而stm32 的总的管脚数目是有限的,所以有的io口即作为普通io口,又作为内置外设的io口使用,有的时候好几个内置外设共用一个io口,这就是管脚的复用功能

例如原理图上一个管脚是如下标注的 PA2/USART2_TX/ADC123_IN2/TIM5_CH3/TIM2_CH3

简单来说就是这个管脚除了作为普通的PA2之外,还复用为了USART2ADC…的管脚

普通管脚就是GPIO,复用管脚(非普通管脚)就是AFIO, 特别注意,IO口做复用管脚使用时一定要使能AFIO时钟

(4).复用推挽输出 用于io口的第二功能**(作为非普通io口使用)**其他方面与推挽输出相同。

下面附上常用的内置外设的io口复用模式的配置

本人小白一个,文中如有错误还请见谅。

经验分享 程序员 微信小程序 职场和发展