2、GPIO通用输入输出口
2、GPIO通用输入输出口
一、GPIO简介
- GPIO ( General Purpose Input Output )通用输入输出口
- 可配置为 8 种输入输出模式
- 引脚电平: 0V~3.3V ,部分引脚可容忍 5V
- 输出模式下可控制端口输出高低电平,用以驱动 LED 、控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、 ADC 电压采集、模拟通信协议接收数据等
二、STM32 GPIO模式:
当使用STM32系列微控制器的GPIO引脚时,您可以根据您的应用需求选择不同的GPIO模式。以下是对每个模式的更详细介绍:
输入模式:
- 浮空输入(Floating Input):引脚未连接到任何电路。可以用于读取外部电平,但应注意,由于没有上拉或下拉电阻,引脚可能会受到噪声干扰。
- 上拉输入(Input Pull-Up):引脚通过内部上拉电阻连接到高电平。在没有外部连接时,引脚会保持高电平。通常用于按钮和开关的输入,以防止悬空电平。
- 下拉输入(Input Pull-Down):引脚通过内部下拉电阻连接到低电平。在没有外部连接时,引脚会保持低电平。与上拉输入类似,通常用于按钮和开关的输入。
输出模式:
- 通用推挽输出(General-Purpose Push-Pull Output):引脚可以输出高电平或低电平。用于驱动外部数字电路。
- 开漏输出(Open-Drain Output):引脚只能拉低,而不能拉高。通常需要外部上拉电阻来拉高电平。用于实现开漏输出,适用于一些总线通信协议如I2C和SPI。
- 复用开漏输出(Open-Drain Output with Alternate Function):类似于开漏输出,但引脚还可以配置为执行特定的备用功能,如UART通信、PWM输出等。
- 复用模式:
- 引脚可以配置为具有不同备用功能的引脚。这些备用功能可以通过相应的寄存器设置来选择,以满足特定的通信或控制需求。
- 模拟模式:
- GPIO引脚可以配置为模拟输入或模拟输出。模拟输入用于连接到模拟传感器或其他模拟电路,而模拟输出用于输出模拟信号。
- 中断模式:
- GPIO引脚可以配置为触发外部中断。当引脚状态变化时,可以触发中断服务程序,允许您在特定事件发生时立即响应。
- 高速模式:
- 高速模式允许GPIO引脚以更高的时钟频率工作,以适应特定的应用需求。这对于需要快速切换引脚状态的应用非常有用。
- 低功耗模式:
- 某些STM32系列支持低功耗模式,可以降低GPIO引脚的功耗,适用于需要长时间运行的电池供电应用。
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED,控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
1 | //Analog IN 模拟输入,这些引脚通常用于连接到模拟传感器或其他模拟电路。 |
三、GPIO常用寄存器
(1)端口配置低\高寄存器(GPIOx_CRL/GPIOx_CRH)(x=A…E)
端口配置寄存器共16位,但每4位数据表示1位,共需要64位,而STM32中每个寄存器都为32位,因此分为端口配置低寄存器和端口配置高寄存器。通过端口配置寄存器可以配置GPIO工作模式与端口输出速度。
注意:输出速度可以限制输出引脚的最大翻转速度,作用是降低功耗、提高稳定性,一般情况下配置为50MHz。
(2)端口输入数据寄存器(GPIOx_IDR)(x=A…E)
- 输入数据共16位,但寄存器共32位,因此寄存器高16位为空。
(3)端口输出数据寄存器(GPIOx_ODR)(x=A…E)
- 输出数据共16位,但寄存器共32位,因此寄存器高16位为空。
(4)端口位设置/清除寄存器(GPIOx_BERR)(x=A…E)
- 高16位用于位清除,低16位用于位设置。
- 高16位:为0不影响;为1清0;
- 低16为:为0不影响;为1置1。
(5)端口位清除寄存器(GPIOx_BER)(x=A…E)
- 高16位为空,低16位用于清除,方法同上。
(6)端口位配置锁定寄存器(GPIOx_LCKR)(x=A…E)
- 高15位为空,低17位用于锁定,较少使用。
四、操作STM32的GPIO步骤
1、使用RCC开启GPIO的时钟
1 | //第一个参数选择外设,第二个参数使能或失能 |
AHB外设时钟控制函数就是使能或者失能AHB外设时钟的
1 | /** |
2、使用GPIO_Init函数初始化GPIO
1 | //该函数用于将指定的GPIO外设复位为其默认状态。 |
3、使用输出或输入的函数控制GPIO
3.1、GPIO输出函数
1 | //GPIO的写入输出函数 |
3.2 输出函数控制GPIO示例
1 | void LED_Init(void) |
3.3、GPIO读取函数
1 | //GPIO的读取输入函数 |
3.4 输入函数控制GPIO示例
1 | void Key_Init(void) |
1、A15、B3、B4三个端口默认是JTAG调试端口,如果要当作普通端口,要进行一些相关的配置
2、有源蜂鸣器:内部自带振荡器,频率固定
无源蜂鸣器:不带振荡器,要提供震荡脉冲才能发生,可以发出不同频率的声音
3、推挽输出高低电平都有驱动能力
开漏输出高电平相当于高阻态,没有驱动能力,低电平有驱动能力
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ahoilc明的学习社区!
评论