GPIO(General-purpose input/output),通用型输入输出。简单理解就是我们可以控制输入输出的STM32引脚,统称为GPIO。
GPIO存在的意义就是用程序控制或读取它们的输出或输入。
GPIO的特点:
不同型号,IO口的数量可能不一样。
快速翻转。最快可以达到每
2个时钟周期翻转一次。(STM32F1系列最快可以达到50MHz的翻转速度)。指的是在输出模式下高低电平的切换每个IO都可以作为外部中断。
支持8种工作模式。
GPIO的工作模式:
GPIO端口的每个位(引脚)可以由软件分别配置成8种模式,当然对同一个引脚同一时间只能处于某一种模式中。
输入浮空(Input floating):可以检测外部信号的‘1’和‘0’
输入上拉(Input pull-up):空闲状态输入一个‘1’
输入下拉(Input-pull-down):空闲状态输入一个‘0’
模拟输入(Analog):输入模拟信号,和 ADC(模数转换器) 配合使用
通用开漏输出(Output open-drain):
- 输出数据寄存器输出逻辑‘0’ (不能主动输出高电平,需依赖外部上拉)
通用推挽式输出(Output push-pull):
- 输出数据寄存器输出逻辑 ‘1’和‘0’(可主动驱动高/低电平)
推挽式复用功能(Alternate function push-pull):
- 片上外设输出逻辑‘1’和‘0’
- 外设可直接控制高低电平,无需外部电路(上下拉),适合高速信号(如SPI时钟线、UART_TX)
开漏复用功能(Alternate function open-drain):
- 片上外设输出逻辑 ‘0’
- 输出‘1’,需外接上拉电阻,适合总线通信(如I2C)、电平转换或“线与”逻辑。
- 每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问。
- 输出模式下可以控制端口输出高电平低电平,用于驱动LED,蜂鸣器等,如果是大功率器件(比如电机),还需要加上驱动器(小电流控制大电流)。
- 输入模式下可以读取端口的高低电平,用于读取外接按键,外接模拟信号的输入,ADC电压采集,模拟通信协议接受数据等。
与GPIO相关的7个寄存器:(重要)
- 每个GPIO端口有7个相关的寄存器:
- 2个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)。(重要)
- 2个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)。(重要)
- 1个32位置位/清除寄存器(GPIOx_BSRR)。
- 1个16位清除寄存器(GPIOx_BRR)。
- 1个32位锁定寄存器(GPIOx_LCKR)。