GPIO是什么
GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
STM32芯片的GPIO被分成很多组,每组有16个引脚,如型号为STM32F103ZET6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOG共7组GPIO,芯片一共144个引脚,其中GPIO就占了一大部分,所有的GPlO引脚都有基本的输入输出功能。
最基本的输出功能是由STM32控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入到LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。
最基本的输入功能是检测外部输入电平,如把GPIO引脚连接到按键,通过电平高低区分按键是否被按下。
点亮PB0 LED:
GPIO功能框图
根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式:
输入浮空
输入上拉
输入下拉
模拟输入
开漏输出
推挽式输出
推挽式复用功能
开漏复用功能
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问),GPIOx-BSRR和GPIOxBRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访间之间产生IRQ时不会发生危险。
图上除了I/O引脚我们能在芯片外部看到,其余部分都在芯片内部
1:保护模块:当I/O引脚输入正电压大于VDD,电流就会流向VDD不会流进芯片内部,从而保护电路(远大于VDD时二极管会烧坏,因此不能将引脚直接接电极,要用电机驱动),反之输入负电压超过VSS时,电流就会从VSS往外流。
2:推挽、开漏或关闭:用以下两个寄存器配置,每4个位控制一个GPIO,配置输入输出的各种模式(右上的上拉下拉开关也是用这个寄存器设置的:10)。
简化电路图:
当INT输入为1,取反后为0,上方的Ug
当INT输入为0,取反后为1,上方的Ug=Us,VDD3.3V电流流向Ug,VDD与OUT断开;下方的Ug>Us,GND与OUT导通,OUT电流流向GND。
可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定。
推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候另外一个截止,优点开关效率效率高,电流大,驱动能力强。
输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电平时,负载电流流向芯片,叫拉电流,即挽。
开漏输出一般只能输出低电平,想输出高电平要另外加上拉电阻,而且此时NMOS处于截止状态(当INT为1时)
输出高电平时,VDD如果是3.3V,OUT就输出3.3V,VDD如果是5V,OUT就输出5V
只能输出低电平,不能输出高电平。
如果要输出高电平,则需要外接上拉。
开漏输出具有"线与"功能,一个为低,全部为低,多用于I2C和SMBUS总线。
3:输出数据寄存器:用以下寄存器配置,可以直接设置ODR,也可以先设置BSRR,最后ODR会被更改。
(右上的上拉下拉开关也是用这个BSRR寄存器设置的)
4:复用功能输出:用外设输出时(例如串口),第3部分就没用了。
5:输入数据寄存器:读出引脚数据
6:复用功能输入:外设引脚输入。
7:模拟输入:ADC采集,不经过肖特基触发器
GPIO输出初始化顺序
1、选定具体的GPIO
2、配置GPIO工作模式(CRL和CRH寄存器)
3、控制GPIO输出高低电平(ODR,BRR和BSRR)
点亮B0 LED
|