GPIO的模式大概分为两种“输出模式”和“输入模式”,下面将着重以上两点对GPIO的功能展开介绍
输出模式
一、开漏输出
二、推挽输出
三、GPIO的复用功能
输入模式
一、输入浮空
二、输入上拉
三、输入下拉
四、模拟输入
首先介绍什么是推挽输出
如图,在输出驱动器的方框内部存在两个三级管P-MOS管和N-MOS管,在推挽输出过程中寄存器会控制这两个MOS管进行输出。若要GPIO引脚输出高电平,则要进行编程控制寄存器输出逻辑1,此时P-MOS管接通VDD,N-MOS管截止,IO口输出高电平;若要输出低电平,则要控制寄存器输出逻辑0,此时P-MOS管截止,N-MOS管接通GND,IO口输出低电平
推挽输出的优点:
1、输出高低电平与电源电压基本没有压差
2、高低电平驱动能力强,IO口的驱动电流可达20mA
3、电平切换速度快
切记,推挽输出不支持线与,若线与可能会导致单片机损坏。
下面介绍开漏输出模式
还是上图,在开漏输出时P-MOS管是不会导通的,变化的只有N-MOS管。当N-MOS管导通时,IO口连接GND,输出为低电平;当N-MOS管截止时,整条支路处于高阻态。单单开漏模式是无法输出高电平的,只有加上一个上拉电阻,才可输出高电平,此时IO口的输出取决于上拉电阻,当N-MOS管接通时输出为低电平,截止时输出为高电平。
开漏输出的优点是:
1、可实现电平转换,输出电平取决于上拉电阻电源
2、可以实现IO口的线与(简单来说就是多个IO口控制一个元器件,当有一个IO口接地时,元器件就停止工作了)
缺点:
1、高电平驱动能力较差
2、电平的切换速率取决于上拉电阻,电阻越小,切换速率越快
GPIO的复用功能又是怎么回事呢?
复用功能是连接着单片机的内部外设,如PWM,USART,I2C都是通过复用功能来实现的。
下面介绍输入模式
输入模式就没有输出模式那么晦涩难懂了
首先是上拉和下拉输入,如图当IO口处于上拉输入模式时VDD导通,而当IO口处于下拉模式时GND导通,此时单片机会读取IO口的电平状态以此来实现智能控制。
然后是输入浮空,字面意思,就是即不接高电平,也不接低电平。但一般实际运用时,引脚不建议悬空,易受干扰。浮空最大的特点就是电压的不确定性,它可能是0V,页可能是VCC,还可能是介于两者之间的某个值(最有可能) 浮空一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响。
模拟输入有是怎么回事呢?
模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的
以上便是对GPIO模式的全部讲解,最后拿STM来说一下GPIO的配置方法
基础配置
时钟树配置
输出模式设置
输入模式设置
常用函数
一、HAL_GPIO_ReadPin
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
读取IO口的电平状态,高电平返回值为1,反之则返回值为0
二、HAL_GPIO_WritePin
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
控制IO口的输出状态
三、HAL_GPIO_TogglePin
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
实现IO口电平的反转
四、HAL_GPIO_EXTI_IRQHandler
HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
中断回调函数,可以理解为中断函数具体要响应的动作。
以上便是我的个人见解,希望对大家有所帮助
这两个视频可能会给大家更好的理解
https://www.bilibili.com/video/BV1Pr4y1n74J?spm_id_from=333.880.my_history.page.click
https://www.bilibili.com/video/BV1zL411L7sj?spm_id_from=333.880.my_history.page.click
都讲的挺好的