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

2024-09-03 21:12

本文主要是介绍【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在嵌入式系统中的应用极为广泛,包括但不限于以下几个方面:

  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开发过程中提供一些帮助。

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

这篇关于【STM32开发】GPIO最全解析及应用实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134058

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三