一、寄存器
是一种内存单元
是程序与硬件电路连接的桥梁,存储着芯片中特定功能电路的开关信息
可以通过程序,来改变芯片中某功能电路的开关 或 对寄存器数据进行读取,来获取芯片中某段功能电路的当前状态
(控制单片机,实际上就是控制寄存器)
二、GPIO内部结构图
保护二极管作用:
当有静电等瞬间电压波动进入I/O引脚时,将波动电压引入电源或GND吸收
三、GPIO输出模式
(1).推挽输出
P-MOS 与 N-MOS 协同工作
推挽输出具有一定的电压与电流驱动能力,可以直接驱动一些适合的元件工作,但只能输出固定电压3.3V
I/O口输出高电平时
P-MOS导通,N-MOS断开,I/O引脚与VDD连接,输出3.3V
I/O口输出低电平时
N-MOS导通,P-MOS断开,I/O引脚与VSS连接,输出0V
(2).开漏输出
只有 N-MOS 工作,P-MOS 一直处于断开状态,小灯另一端接所需的任意电压
注意:
使用5V容忍I/O,否则若输入电压大于3.3V时,保护二极管长期导通,将5V引入电源中,造成损坏
I/O口输出低电平时
N-MOS导通,I/O引脚与VSS连接,电压差形成,电流产生,小灯亮起
I/O口输出高电平时
N-MOS断开,整个I/O内部处于高阻态(断路)
(3).推挽与开漏区别
(4).复用推挽与复用开漏
芯片内部与片上外设同时控制会导致输出控制模块不知听谁的,STM32增加了复用功能
四、GPIO输入模式
(1).上拉输入
上拉电阻启用,下拉电阻关闭,I/O口无操作时,电平被拉高,GPIO口读取到的电平为高电平;当I/O口被输入电压时,电流跳过上拉电阻,通过施密特触发器判断读取到的电平为高电平还是低电平
(2).下拉输入
下拉电阻启用,上拉电阻关闭,I/O口无操作时,电平被拉低,GPIO口读取到的电平为低电平;当I/O口被输入电压时,电流跳过下拉电阻,通过施密特触发器判断读取到的电平为高电平还是低电平
(3).浮空输入
上拉、下拉电阻都不启用,内部处于高阻态,可以通过再外部接上拉或下拉电阻,实现与前面两种输入模式相同的效果,以按键为例:
(4).施密特触发器
由于现实中电压多以连续变换,可以规定一个参考电压,如:1.65V,高于此电压的就算高电平,低于此电压的就算低电平,使用比较器即可实现此效果
但若输入电压中噪声太多,再参考电压附近徘徊,则会导致高低电平快速变化,无法准确测得当前电平,使用施密特触发器,可以产生两个参考电压,当输入电压高于高参考电压则输出高电平,当输入电压低于低参考电压则输出低电平,在两者之间则维持原本的电平信号不变
(5).模拟输入
前面的上拉、下拉、浮空输入都读取高低电平,也就是数字信号。因而被称为“数字输入”
而模拟输入却是读取输入电压的具体数值,因而其在施密特触发器前便产生了分支,将电压引入了模拟输入相关的片上外设(如ADC)
六、作者寄语
本笔记根据keysking大佬的b站视频教程整理,视频链接附上:
【开漏? 推挽? 都是些什么鬼? 动画帮你一网打尽】【STM32教程-2023】第5集 关于STM32 GPIO内部的那些事_哔哩哔哩_bilibili