【STM32开发】GPIO最全解析及应用实例

目录

【1】GPIO概述

GPIO的基本概念

GPIO的应用

【2】GPIO功能描述

1.IO功能框图

2.知识补充

3.功能详述

浮空输入

上拉输入

下拉输入

模拟输入

推挽输出

开漏输出

复用开漏输出和复用推挽输出

【3】GPIO常用寄存器

相关寄存器介绍

4个32位配置寄存器

2个32位数据寄存器

[1个32位 置位/复位寄存器](#1个32位 置位/复位寄存器)

[2个32位 复用功能配置寄存器](#2个32位 复用功能配置寄存器)

常用寄存器详述

GPIO端口模式寄存器(GPIOx_MODER)(x=A...D,F)

[GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)](#GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F))

[GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)](#GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F))

[GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)](#GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F))

[GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)](#GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F))

[GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)](#GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F))

[GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (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在嵌入式系统中的应用极为广泛,包括但不限于以下几个方面:

  1. 设备控制:通过GPIO控制LED灯、数码管、继电器等外部设备的开关状态。
  2. 数据采集:读取按键、光照传感器、ADC(模拟数字转换器)等外部设备的输入信号。
  3. 通信接口:GPIO可以作为串口(如USART)、I2C、SPI等通信协议的数据收发管脚,实现与外部设备的通信。
  4. 复用功能:在某些情况下,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。
这里我们以PB1引脚为例,假设让芯片的PB1引脚输出低电平信号即可点亮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开发过程中提供一些帮助。

创作不易,如果感觉这篇文章对你有帮助,记得点赞收藏。

相关推荐
森焱森4 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
小殷学长6 小时前
【单片机毕业设计17-基于stm32c8t6的智能倒车监测系统】
stm32·单片机·课程设计
TESmart碲视7 小时前
HKS201-M24 大师版 8K60Hz USB 3.0 适用于 2 台 PC 1台显示器 无缝切换 KVM 切换器
单片机·嵌入式硬件·物联网·游戏·计算机外设·电脑·智能硬件
花落已飘9 小时前
STM32中实现shell控制台(shell窗口输入实现)
stm32·单片机·嵌入式硬件
花落已飘9 小时前
STM32中实现shell控制台(命令解析实现)
stm32·shell
没有钱的钱仔9 小时前
STM32低功耗模式全面指南
css·stm32·css3
牵牛老人11 小时前
Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
stm32·单片机·qt
宇钶宇夕12 小时前
针对工业触摸屏维修的系统指南和资源获取途径
单片机·嵌入式硬件·自动化
和风化雨12 小时前
stm32的三种开发方式
stm32·单片机·嵌入式硬件
kanhao10013 小时前
三态逻辑详解:单片机GPIO、计算机总线系统举例
单片机·嵌入式硬件