在前面的文章中提到了面试题中有问到GPIO口的分类,那接下来介绍一下GPIO口各个模式的功能和使用场景。
八种工作模式:
一、四种输入模式
1、上拉输入:默认高电平,相当于IO口接了上拉电阻,在无输入的情况下,保持高电平。
2、下拉输入:默认低电平,相当于IO口接了下拉电阻,在无输入的情况下,保持低电平。
3、浮空输入:浮空输入状态下,IO口为高阻态,即对外表现不是低电平也不是高电平。IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下(该引脚没有接任何的电路),读取该端口的电平是不确定的。
4、模拟输入:输入信号不经过施密特触发器(就是一个迟滞比较器)直接接入,接入到片上外设ADC,输入信号为模拟量而非数字量。下拉输入、上拉输入、浮空输入都是输出数字量。
二、四种输出模式
1、推挽输出:既可以输出高电平也可以输出低电平,一般的IO口输出控制都是用推挽输出。
2、开漏输出:开漏输出和推挽输出的区别在于,开漏输出时内部输出高电平的P-MOS管是断开的,也就是开漏输出不具备高电平的输出能力,只有低电平的输出能力。使用开漏输出一般在IO口外部上拉高电平,这样的设计只要也是为了在实现“线与”结构的时候,内部IO口不会烧掉。
3、复用推挽输出:IO口输出不由输出数字寄存器决定,而是由复用之后的片上外设输出。其他的内容和推挽输出无差别。
4、复用开漏输出:IO口输出不由输出数字寄存器决定,而是由复用之后的片上外设输出。其他的内容和开漏输出无差别。
工作模式的使用场景举例
1、浮空输入:串口通信中的RX。
2、上拉输入:按键检测,按键默认上拉。
3、下拉输入:按键检测,按键默认下拉。
4、模拟输入:ADC检测,默认状态下设置为模拟输入从而达到低功耗的目的。
5、开漏输出:实现"线与"功能,如模拟I2C的SCL和SDA。
6、推挽输出:一般情况下的IO口驱动。
7、复用推挽输出:和推挽输出一样,但是电平来自片上外设,比如PWM等。
8、复用开漏输出:和开漏输出一样,但是电平来自片上外设,比如硬件I2C等。
面试题
一、stm32中GPIO默认的状态?
stm32复位之后GPIO默认是浮空状态,高阻态。这个设计是为了芯片的低功耗设计的。
当然除了默认状态,也可以设置为模拟输入,也是为了芯片的低功耗。