【STM32开发】GPIO最全解析及应用实例
目录
【1】GPIO概述
GPIO的基本概念
GPIO的应用
【2】GPIO功能描述
1.IO功能框图
2.知识补充
3.功能详述
浮空输入
上拉输入
下拉输入
模拟输入
推挽输出
开漏输出
复用开漏输出和复用推挽输出
【3】GPIO常用寄存器
相关寄存器介绍
4个32位配置寄存器
2个32位数据寄存器
1个32位 置位/复位寄存器
2个32位 复用功能配置寄存器
常用寄存器详述
GPIO端口模式寄存器(GPIOx_MODER)(x=A...D,F)
GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)
GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)
GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)
GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)
GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)
GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)
【4】GPIO实验:点亮LED灯
实验步骤
1.观察开发板
2.分析原理图
3.分析寄存器
4.编写代码
5.编译下载
6.运行测试
结语
【1】GPIO概述
GPIO的基本概念
GPIO,即通用输入输出接口,是一种在数字电子系统中常见的接口类型。GPIO接口既可以作为输入引脚接收来自外部设备的电信号,也可以作为输出引脚向外部设备发送电信号。其“通用”二字意味着GPIO接口具有高度的灵活性,可以根据需要配置为输入或输出模式,实现与外部设备的通信和控制。
GPIO的应用
GPIO在嵌入式系统中的应用极为广泛,包括但不限于以下几个方面:
- 设备控制:通过GPIO控制LED灯、数码管、继电器等外部设备的开关状态。
- 数据采集:读取按键、光照传感器、ADC(模拟数字转换器)等外部设备的输入信号。
- 通信接口:GPIO可以作为串口(如USART)、I2C、SPI等通信协议的数据收发管脚,实现与外部设备的通信。
- 复用功能:在某些情况下,GPIO引脚可以被配置为特定外设的接口,如定时器的外部触发输入等。
【2】GPIO功能描述
查看技术手册的图 第8章通用IO
1.IO功能框图
2.知识补充
这里对图中涉及的一些知识点做简要说明,以帮助初学者能够读懂功能框图。
1.模拟信号和数字信号的区别?
模拟信号:连续变化的值,例如读取到的连续的电压值、温度、压力等。
数字信号:离散的数值,通常可以用“0”和“1”两种状态来表示。
2. 施密特触发器的作用
由于外部输入的信号,可能会出现脉冲等噪声的影响,为了让信号更加清晰,所以就设置了TTL施密特触发器来进行整形。
3.VCC、VDD和VSS说明
VCC:接入电路的电压
VDD:器件内部的工作电压,通常VCC>VDD
VSS:电路公共接地端电压
3.功能详述
浮空输入
IO--TTL施密特触发器--输入寄存器--读
通俗讲就是让管脚什么都不接,悬空着。
此时VDD和VSS所在路径的两个开关同时断开。因为没有上拉和下拉,所以当IO口没有接输入的时候,此时的电平状态会是一个不确定的值,完全由外部输入决定。
一般实际运用时,引脚不建议悬空,易受干扰。
优势:
这一种输入模式的电平会完全取决于外部电路而与内部电路无关。
缺点:
在没有外部电路接入的时候,IO脚浮空会使得电平不确定
应用:
该模式是STM32复位之后的默认模式,一般用作对开关按键的读取或用于标准的通讯协议,比如IIC、USART的等。
上拉输入
IO--上拉电阻--TTL施密特触发器--输入寄存器--读
上拉就是把电位拉高。此时如果I/O口断开不接外设,输入端的电平会保持在高电平。
上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平
上拉:当我们闭合上拉电阻的开关,断开下拉电阻的开关的时候,也就是此时为上拉通路导通。
优势:输入的电平不会因上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在高电平。
下拉输入
IO--下拉电阻--TTL施密特触发器--输入寄存器--读
下拉就是把电位拉低。与上拉原理相似。
下拉输入就是信号进入芯片后加了一个下拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为低电平;
优势:输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在低电平。
模拟输入
IO----模拟
信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。
应用:当 GPIO 引脚用于 ADC 采集电压的输入通道时,则需要选择“模拟输入”功能,因为经过施密特触发器后信号只有 0、1 两种状态,所以 ADC 外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。
推挽输出
输出寄存器上的’0’激活 N-MOS,而输出寄存器上的’1’将激活 P-MOS,具备输出高低电平的能力。
当上面的MOS管导通时,GPIO输出高电平1,称为“推”,
当下面MOS管导通时,GPIO输出低电平0,称为“挽”。
高低电平值由芯片内部的电源决定。
开漏输出
输出寄存器上的’0’激活 N-MOS,使得输出接地。
输出寄存器上的’1’将端口置于高阻状态 (P-MOS从不被激活)。
所以引脚既不输出高电平,也不输出低电平。
即:写0输出低电平,写1输出高阻态(High Impedance)
无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。
可以利用改变上拉电源的电压来适应所需,进而提高外部电路的驱动能力。
复用开漏输出和复用推挽输出
复用推挽和复用开漏其实很简单,如果不想用单片机内部来输出控制,那么可以进行复用,将输出转移到其他外设上面,由外设的信号驱动输出缓冲器。
【3】GPIO常用寄存器
相关寄存器介绍
4个32位配置寄存器
GPIOx_MODER:模式寄存器,用于配置GPIO引脚的工作模式(输入、输出、复用、模拟等)。
GPIOx_OTYPER:输出类型寄存器,用于配置GPIO引脚为输出时的类型(推挽输出或开漏输出)。
GPIOx_OSPEEDR:输出速度寄存器,用于配置GPIO引脚输出信号的速度。
GPIOx_PUPDR:上拉/下拉寄存器,用于配置GPIO引脚的上拉或下拉电阻。
2个32位数据寄存器
GPIOx_IDR:输入数据寄存器,只读,用于读取GPIO引脚当前的输入电平状态。
GPIOx_ODR:输出数据寄存器,用于设置GPIO引脚当前的输出电平状态。
1个32位 置位/复位寄存器
GPIOx_BSRR :可以直接置位或复位,对其他位没影响
2个32位 复用功能配置寄存器
GPIOx_AFRH 复用功能高位寄存器(8-16)
GPIOx_AFRL 复用功能低位寄存器 (0-7)
常用寄存器详述
GPIO端口模式寄存器(GPIOx_MODER)(x=A...D,F)
偏移地址:0x00
复位值:
0xEBFF FFFF 端口A
0xFFFF FFFF 其他口
GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)
偏移地址:0x04
复位值: 0x0000 0000
GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)
偏移地址:0x08
复位值: 0x0000 0000
GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)
偏移地址:0x0C
复位值:
0x2400 0000 端口A
0x0000 0000 其它端口
GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)
偏移地址:0x10
复位值: 0x0000 XXXX (X 表明不定 )
GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)
偏移地址:0x14
复位值: 0x0000 0000
GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)
偏移地址:0x18
复位值:0x0000 0000
【4】GPIO实验:点亮LED灯
实验步骤
1.观察开发板
查看LED灯的丝印
2.分析原理图
找到控制LED灯的引脚编号,并通过分析电路,确定输出高/低电平信号来点亮LED。
3.分析寄存器
1)使能GPIOB端口时钟
RCC->IOPENR |= 1<<1; //使能GPIOB端口时钟
2)配置GPIO模式
将PB1引脚配置为输出模式
3)配置输出类型
将PB1配置为推挽输出模式
4)配置输出数据寄存器
让PB1输出低电平信号
方式一:配置置位复位寄存器
方式二:配置输出数据寄存器
4.编写代码
5.编译下载
6.运行测试
下载完代码后,按下单片机复位键重新上电,观察LED状态。
结语
STM32的GPIO接口功能强大、配置灵活,是嵌入式系统开发中不可或缺的一部分。通过合理配置GPIO引脚的工作模式、输出类型、速度等参数,可以实现与外部设备的有效通信和控制。本文详细介绍了GPIO的概念、应用、功能及相关寄存器,并给出了一个简单的开发示例,希望能为开发者在STM32 GPIO开发过程中提供一些帮助。
创作不易,如果感觉这篇文章对你有帮助,记得点赞收藏。