目录
3.GPIO的工作模式(8种)
3.1 输入模式 - 浮空输入
3.2 输入模式 - 输入上拉
3.3 输入模式 - 输入下拉
3.4 输入模式 - 模拟输入
3.5 输出模式 - 开漏输出
3.6 输出模式 - 开漏复用功能
3.7 输出模式 - 推挽式输出
3.8 输出模式 - 推挽式复用功能
4.推挽输出和开漏输出的区别简述
4.1 推挽输出
4.2 开漏输出
1.前言
笔者在b站学习【正点原子】 手把手教你学STM32单片机教学视频 嵌入式 之 F103-基于新战舰V3/精英/MINI板 的时候,发现up主所述的GPIO工作原理较为详细。在此,我将 STM32中文参考手册(免费的官网就能下载,还有人在CSDN收费???) 与 up主【正点原子官方】的视频中所描述的GPIO工作原理,做一个书面化的整理(仅用于学习,错误之处还请大家指正)。
首先,在此介绍一个简单的概念,即 电平 通常用高低来描述,电压 通常用大小描述。
2.I/O端口位的基本结构
3.GPIO的工作模式(8种)
GPIO的8种工作模式: 包括 4种 输入模式 和 4种 输出模式
◆ 4种输入模式:
① 输入浮空 GPIO_Mode_IN_FLOATING
② 输入上拉 GPIO_Mode_IPU
③ 输入下拉 GPIO_Mode_IPD
④ 模拟输入 GPIO_Mode_AIN
◆ 4种输出模式:
① 开漏输出 GPIO_Mode_Out_OD
② 开漏复用功能 GPIO_Mode_AF_OD
③ 推挽式输出 GPIO_Mode_Out_PP
④ 推挽式复用功能 GPIO_Mode_AF_PP
3.1 输入模式 - 浮空输入
如图中黄色阴影部分所示 ,表示在此模式下由 ①~④ 的电路为通路。首先,由 ① I/O端口 输入电平(高或低),经过两只保护二极管后,到达 ② TTL施密特触发器(此时两个开关为断开状态)。其次,电平再由 ② TTL施密特触发器 将电平直接传送到 ③ 输入数据寄存器 中。最后,再通过 ③ 输入数据寄存器 传送至 ④ CPU 中。此时 ④ CPU 便可通过 ③ 输入数据寄存器 等读取到 ① I/O端口 处的高或低电平的情况。
简言之,浮空模式下CPU可以读取到外部输入的高或低电平。
3.2 输入模式 - 输入上拉
浮空模式 和 输入上拉模式 的主要区别在于, 输入上拉模式 中上拉电阻(连接VDD)的开关闭合(图二中处于黄色区域的上拉电阻的开关闭合),上拉电阻的大小约为 30~50kΩ。
3.3 输入模式 - 输入下拉
同理 ,输入下拉模式 和 浮空模式 、 输入上拉模式 的主要区别在于 输入下拉模式 中下拉电阻(连接VSS)的开关闭合(图二中处于黄色区域的下拉电阻的开关闭合)。
3.4 输入模式 - 模拟输入
如图中黄色阴影部分所示 ,此模式下 输入上拉 和 输入下拉 失效。该模式可将 外部电压(0~3.3V)转换为 电平(AD转换)。
3.5 输出模式 - 开漏输出
如图中黄色阴影部分所示 ,首先由 ① CPU 向 位设置/清除寄存器 中写入 1/0,然后 它 将电平的高低映射到 输出数据寄存器 中。随后再到 ② 输出控制电路 中, 若 ② 输出控制电路 接收到 1(高电平),则 ③ N-MOS管 截止。此时 ④ I/O端口 处的电平不是通过接收到 1(高电平)的 ② 输出控制电路 和截止的 ③ N-MOS管 来控制的,而是通过外部的 “上拉” 或 “下拉” 来决定(图五中未画出)。若 ② 输出控制电路 接收到 0(低电平),则 ③ N-MOS管 导通,此时 ④ I/O端口 处的电平被 ③ N-MOS管 拉低为低电平。
在输出状态下,④ I/O端口 的电平还可通过 ④ I/O端口 → ⑥ 输入数据寄存器 → ⑦ CPU读取 的线路读取(此状态在 ② 输出控制电路 接收到高电平“1”时启用)。
3.6 输出模式 - 开漏复用功能
开漏复用功能 和 开漏输出 的区别在于,开漏复用功能 的 ② 输出控制电路 处的电平来源不同(开漏复用功能 由 ① 复用功能输出 提供,来自“片上外设模块”,即“外设”)。
同 开漏输出 相同的是,若 开漏复用功能 中的 ② 输出控制电路 接收到 1(高电平),则 ③ N-MOS管 截止。此时 ④ I/O端口 处的电平不是通过接收到 1(高电平)的 ② 输出控制电路 和截止的 ③ N-MOS管 来控制的,而是通过外部的 “上拉” 或 “下拉” 来决定(图六中未画出)。若 ② 输出控制电路 接收到 0(低电平),则 ③ N-MOS管 导通,此时 ④ I/O端口 处的电平被 ③ N-MOS管 拉低为低电平。
3.7 输出模式 - 推挽式输出
推挽式输出 的控制输出寄存器和 开漏输出 是相同的。但 推挽式输出 中的 ② 输出控制电路 接收到 1(高电平)时,③ P-MOS管 导通、③ N-MOS管 截止,此时1(高电平)将通过 ③ P-MOS管 传输至 ④ I/O端口 并将1(高电平)输出。相反 推挽式输出 中的 ② 输出控制电路 接收到 0(低电平)时,③ P-MOS管 截止、③ N-MOS管 导通,此时0(低电平)将通过③ N-MOS管传输至 ④ I/O端口 并将0(低电平)输出。
在输出状态下,④ I/O端口 的电平也可通过 ④ I/O端口 → ⑥ 输入数据寄存器 → ⑦ CPU读取 的线路读取。
3.8 输出模式 - 推挽式复用功能
推挽式输出 和 推挽式复用功能 的主要区别在于,推挽式输出 的 ② 输出控制电路 处的电平来源不同(推挽式复用功能 由 ① 复用功能输出 提供,来自“片上外设模块”,即“外设”)。
4.推挽输出和开漏输出的区别简述
4.1推挽输出:
可以输出强高低电平,连接数字器件。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
4.2开漏输出:
只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。