STM32 GPIO 初学笔记

  • 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功能框图

每个GPI/O端口有两个32位配置寄存器(GPIOX-CRL,GPIOx-CRH),两个32位数据寄存器(GPIOxIDR和GPIOX-ODR),一个32位置位/复位寄存器(GPIOx-BSRR),一个16位复位寄存器(GPIOx-BRR)和一个32位锁定寄存器(GPIOX-LCKR).
根据数据手册中列出的每个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<Us,VDD3.3V(一般是3V3)电流流向OUT;下方的Ug=Us,GND与OUT断开。

 当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

 

原文地址:https://www.cnblogs.com/XIEjm/p/13218886.html