STM32 GPIO功能概述(一)

本文详细介绍了STM32的GPIO功能,包括GPIO的定义、特性、端口和引脚、工作模式以及寄存器配置。通过实例展示了如何使用指针访问和配置GPIO寄存器,包括GPIO的输入、输出、模拟和复用模式。此外,还讲解了如何通过结构体指针简化寄存器操作,以便更高效地控制GPIO。
摘要由CSDN通过智能技术生成

图片来自 成电应电科协

一. GPIO定义

GPIO是通用输入/输出(General Purpose l/O)的简称,主要用于工业现场需要用到数字量输入/输出的场合,例如:

  1. 输出功能:继电器、LED、蜂鸣器等的控制
  2. 输入功能:传感器状态、高低电平等信息的读取
  3. 复用功能:片内外设的对外接口
  4. 时序模拟:模拟SPI、12C和UART等常用接口的时序

二. GPIO的特性

  1. 多种工作模式: 输出/输入/复用/模拟
  2. 灵活的复用模式
  3. 5V电压容限
  4. 外部中断功能

三. 端口和引脚

两个概念

端口(PORT)

独立的外设子模块,包括多个引脚,通过多个硬件寄存器控制引脚GPIO模块由端口GPIOA、GPIOB、GPIOC等多个独立的子模块构成
例如:端口GPIOA包括PAO~PA15这16个引脚,通过10个硬件寄存器控制引脚工作

引脚(PIN)

对应微控制器的一个管脚,归属于端口,由端口寄存器的对应位控制
PAO对应STM32F411RET6芯片的14脚,属于端口GPIOA,输出电平由端口GPIOA的输出数据寄存器GPIOA_ODR的第0位决定
在这里插入图片描述总结:一个端口默认包含16个引脚,但是不同型号的STM32微控制器所包含的端口数量及各端口包含的引脚数量各不相同,具体信息可以查询芯片的数据手册

在这里插入图片描述

四. GPIO模块的电路结构

在这里插入图片描述

五. GPIO工作模式

在这里插入图片描述

1. GPIO工作模式——输入模式

请添加图片描述
①输出驱动器关闭

②施密特触发器打开,

③可以获取引脚状态通过寄存器使能上/下拉电阻:浮空/上拉/下拉输入

④引脚电平状态将存入输入数据寄存器

2. GPIO工作模式——输出模式

请添加图片描述①输出驱动器打开

②施密特触发器打开

③通过寄存器使能上拉/下拉电阻

④通过输入数据寄存器获取引脚状态

GPIO工作模式——输出模式——推挽输出

在这里插入图片描述

GPIO工作模式——输出模式——开漏输出

在这里插入图片描述

3. GPIO工作模式——模拟模式

在这里插入图片描述
在这里插入图片描述

4. GPIO工作模式——复用模式

在这里插入图片描述

①输出驱动器打开

②施密特触发器打开

③通过寄存器使能上拉/下拉电阻

④通过输入数据寄存器获取引脚状态

六. 端口寄存器

请添加图片描述
每一个端口都包括这10个寄存器,其中x表示端口号,取值从A~K

模式寄存器GPIOx_MODER

请添加图片描述

输出类型寄存器GPIOx_OTYPER

请添加图片描述

输出速度寄存器GPIOx_OSPEEDR

在这里插入图片描述

上拉/下拉寄存器GPIOx_PUPDR

在这里插入图片描述

输入数据寄存器GPIOx_IDR

在这里插入图片描述

输出数据寄存器GPIOx_ODR

在这里插入图片描述

注意事项: 输出数据寄存器GPIOx_ODR

  1. 设置某一个引脚的输出电平时,只修改该引脚对应的位,而不要修改其他的位
  2. 设置输出数据寄存器的某一个位为1,并不代表该位对应的引脚一定输出高电平。 有可能该引脚在外围电路的作用下拉到了低电平。 因此应该通过读取输入数据寄存器GPIOx_IDR来获取引脚的真实电平情况

置位/复位寄存器GPIOx_BSRR

在这里插入图片描述

使用举例

在这里插入图片描述

结论: 设置多个引脚输出高/低电平时,使用置位/复位寄存器更加简单

七. 利用指针访问单个寄存器

寄存器地址

在这里插入图片描述

地址转换方法

在这里插入图片描述

地址转换过程

在这里插入图片描述

指针基类型

请添加图片描述

演示例程

驱动指示灯

  1. 例程目标
    基于寄存器的程序开发方式
  2. 例程内容
    控制开发板的用户指示灯LD2连续闪烁

新建工程

在这里插入图片描述

注: 选择自己使用的芯片型号

在这里插入图片描述

编程代码

在这里插入图片描述

程序编译,下载

在这里插入图片描述

八. 利用结构体指针访问寄存器组

寄存器组

请添加图片描述

tepedef 定义别名

在这里插入图片描述

__IOunint32_tGPIO_TypeDef
更能突出变量的硬件特性更能表明数据类型所占的位数代替结构体模板

区别

在这里插入图片描述

寄存器组定义

在这里插入图片描述

芯片头文件

在这里插入图片描述

编程代码

在这里插入图片描述在这里插入图片描述在这里插入图片描述

GPIOx->BSRR|=1<<5; // 01 左移 5 位,即低16位控制对应5引脚写入1;此次操作实现配置端口5输出高电平

GPIOC->MODER|=1<<(5*2); // 01 左移 5 * 2=10位,即配置位11、10置为01;此次操作实现配置端口5为输出模式

while(delay–) //就是Delay 这个数不断的递减。当Delay==0 时,循环结束。

在这里插入图片描述

简化寄存器配置过程

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有余地 EliasJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值