【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

相关文章

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析