GPIO介绍

本文详细介绍了STM32的GPIO口,包括其作用、STM32的GPIO口特性、输入输出模式、寄存器操作和访问方法。GPIO作为单片机与外界交互的关键,提供了丰富的功能,如普通输出、输入、模拟和复用功能。通过不同寄存器配置,可以实现对GPIO口的精细控制,如模式、速度、上拉/下拉等。同时,文章还讨论了寄存器地址偏移和访问方式,包括直接访问、宏定义和ST官方封装宏。
摘要由CSDN通过智能技术生成
  1. GPIO概述
    1.1 GPIO口作用
    1.2 STM32的GPIO口
    1.3 何谓寄存器
    1.4 STM32的GPIO口特征

  2. STM32的GPIO口框架
    2.1 普通输出功能
    2.2 普通输入功能
    2.2 模拟功能
    2.2 复用功能

  3. STM32的GPIO口相关寄存器

  4. 寄存器地址偏移问题

  5. 寄存器访问方法
    5.1直接地址访问
    5.2宏定义
    5.3ST官方封装宏

GPIO概述

本文章以STM32F401RE芯片为例

GPIO口作用

单片机与外界进行数据交流的窗口
数据交流:收 发 IO:接收信息 发送信息
IO也可以模拟各种时序(协议)

STM32的GPIO口

1.命名与数量

端口号+管脚号
端口:A~H(根据不同的芯片范围不同的)
管脚号:0~15 6*16=96 (一个端口最多有16个管脚)
例如:PH0 PH1 接晶振
数量:81个 有些端口不是16个管脚
在这里插入图片描述
在这里插入图片描述

2. 输入输出的四大模式

GPIO有接收数据与发送数据的功能
输入模式:外界到单片机 四种模式
上拉输入:接收的数字量(0 1) 具有上拉功能 空闲高
下拉输入:接收的数字量(0 1) 具有下拉功能 空闲低
浮空输入:按键判断
模拟输入:输入的模拟量
输出模式:单片机到外界 四种模式
通用推挽输出 通用开漏输出 复用推挽输出 复用开漏输出
通用:IO直接向外输出0/1
复用:除了IO以外的其他片上外设做数据输出时
推挽:既能输出0也能输出1
开漏:只能输出0 不能输出1 因为P-MOS管一直处于高阻态
上拉电阻 防止电流倒灌 防止电流损坏器件
线与功能-----》与门
什么时候用开漏:一些通信协议(IIC 单总线…)

何谓寄存器

1. 什么是寄存器

8/16/32位的整型存储空间

2.对寄存器的操作

在这里插入图片描述
对寄存器操作,由图可知,每种寄存器都有在芯片内存当中都占有一部分空间,跟C语言当中一样,想访问操作寄存器当中的数据,都得用解地址符号得到它的起始地址,在对其中所需的器件,外设等进行位操作。

3. 常见的寄存器及作用

数据寄存器、状态寄存器、控制寄存器……
数据寄存器:数据的收发
状态寄存器:描述外设的工作状态
控制寄存器:控制外设的模式与工作状态

STM32的GPIO口特征

● 受控 I/O 多达 16 个
● 输出状态:推挽或开漏 + 上拉/下拉
● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据
● 可为每个 I/O 选择不同的速度
● 输入状态:浮空、上拉/下拉、模拟
● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入)
● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限
● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置
● 模拟功能
● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)
● 快速翻转,每次翻转最快只需要两个时钟周期
● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种

STM32的GPIO口框架

在这里插入图片描述
保护二极管可调节输入的电压保持电压在芯片要求电压范围内

普通输出功能

在这里插入图片描述

普通输入功能

在这里插入图片描述

模拟功能

在这里插入图片描述
模拟输入与输出不会经过数据寄存器,和TTL施密特触发器,对于模拟功能而言,需要接收发送的是模拟信号,而数据寄存器和TTL施密特触发器接收发送的是数字信号

复用功能

在这里插入图片描述
由GPIO口输出模式可知,复用功能是用于除IO口以外的片上外设做数据输出使用的,这里的IO只是作为这些外设与芯片外进行数据输入输出的桥梁,应该用它们自身的数据寄存器,不经过IO的数据寄存器

STM32的GPIO口相关寄存器

GPIO 端口模式寄存器    (GPIOx_MODER)   (x = A…I)
GPIO 端口输出类型寄存器   (GPIOx_OTYPER)   (x = A…I)
GPIO 端口输出速度寄存器   (GPIOx_OSPEEDR)   (x = A…I/)
GPIO 端口上拉/下拉寄存器  (GPIOx_PUPDR)     (x = A…I/)
GPIO 端口输入数据寄存器   (GPIOx_IDR)    (x = A…I)
GPIO 端口输出数据寄存器   (GPIOx_ODR)     (x = A…I)
注:x为管脚号
看寄存器需要看什么:
复位值:初始值
功能说明

寄存器地址偏移问题

在这里插入图片描述
在这里插入图片描述
每个GPIO组之间相差1024字节(1k)
每个寄存器之间相差4字节(可查看芯片手册观察偏移值)

寄存器访问方法

直接地址访问

GPIOA_MODER    0x4002 0000
GPIOB_MODER    0x4002 0400
GPIOA_OTYPER   0x4002 0004
GPIOB_OTYPER   0x4002 0404

宏定义

#define GPIOA_MODER    *(unsigned int *) 0x4002 0000
#define GPIOB_MODER    *(unsigned int )  0x4002 0400
#define GPIOA_OTYPER    
(unsigned int )  0x4002 0004
#define GPIOB_OTYPER    
(unsigned int *) 0x4002 0404

ST官方封装宏

#define GPIOA        ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOA_BASE         (AHB1PERIPH_BASE + 0x0000)
#define AHB1PERIPH_BASE   (PERIPH_BASE + 0x00020000)
#define PERIPH_BASE               ((uint32_t)0x40000000)

GPIOA=0x40000000+0x00020000+0x0000=0x40020000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值