【STM32】GPIO概述
00. 目录
文章目录
- 00. 目录
- 01. GPIO简介
- 02. GPIO主要特性
- 03. GPIO功能描述
- 04. I/O引脚复用器和映射
- 05. I/O端口控制寄存器
- 06. I/O端口数据寄存器
- 07. I/O数据位操作
- 08. GPIO锁定机制
- 09. GPIO寄存器描述
- 9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A..I)
- 9.2 GPIO端口输出类型寄存器 (GPIOx_OTYPER) (x = A..I)
- 9.3 GPIO端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..I/)
- 9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I/)
- 9.5 GPIO端口输入数据寄存器 (GPIOx_IDR) (x = A..I)
- 9.6 GPIO端口输出数据寄存器 (GPIOx_ODR) (x = A..I)
- 9.7 GPIO端口置位/复位寄存器 (GPIOx_BSRR) (x = A..I)
- 9.8 GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A..I)
- 9.9 GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A..I)
- 10. 附录
01. GPIO简介
每个通用 I/O 端口包括 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2 个 32 位数据寄存器(GPIOx_IDR 和GPIOx_ODR)、1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、1 个 32 位锁定寄存器(GPIOx_LCKR) 和 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。
02. GPIO主要特性
● 受控 I/O 多达 16 个
● 输出状态:推挽或开漏 + 上拉/下拉
● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据
● 可为每个 I/O 选择不同的速度
● 输入状态:浮空、上拉/下拉、模拟
● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入)
● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限
● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置
● 模拟功能
● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)
● 快速翻转,每次翻转最快只需要两个时钟周期
● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种
03. GPIO功能描述
根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口位分别配置为多种模式:
● 输入浮空
● 输入上拉
● 输入下拉
● 模拟功能
● 具有上拉或下拉功能的开漏输出
● 具有上拉或下拉功能的推挽输出
● 具有上拉或下拉功能的复用功能推挽
● 具有上拉或下拉功能的复用功能开漏
04. I/O引脚复用器和映射
微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这可以确保共用同一个 I/O 引脚的外设之间不会发生冲突。
每个 I/O 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0 到 7)和 GPIOx_AFRH(针对引脚 8 到 15)寄存器对这些输入进行配置。
● 完成复位后,所有 I/O 都会连接到系统的复用功能 0 (AF0)。
● 外设的复用功能映射到 AF1 至 AF13。
● Cortex™-M4F EVENTOUT 映射到 AF15。
05. I/O端口控制寄存器
每个 GPIO 有 4 个 32 位存储器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达 16 个 I/O。
GPIOx_MODER 寄存器用于选择 I/O 方向(输入、输出、AF、模拟)。
GPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分别用于选择输出类型(推挽或开漏)和速度 (无论采用哪种 I/O 方向,都会直接将 I/O 速度引脚连接到相应的 GPIOx_OSPEEDR 寄存器位)。
无论采用哪种 I/O 方向,GPIOx_PUPDR 寄存器都用于选择上拉/下拉。
06. I/O端口数据寄存器
每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR 和GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。
07. I/O数据位操作
置位复位寄存器 (GPIOx_BSRR) 是一个 32 位寄存器,它允许应用程序在输出数据寄存器(GPIOx_ODR) 中对各个单独的数据位执行置位和复位操作。置位复位寄存器的大小是GPIOx_ODR 的二倍。
08. GPIO锁定机制
通过将特定的写序列应用到 GPIOx_LCKR 寄存器,可以冻结 GPIO 控制寄存器。冻结的寄存器包括 GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH。
要对 GPIOx_LCKR 寄存器执行写操作,必须应用特定的写/读序列。当正确的 LOCK 序列应用到此寄存器的第 16 位后,会使用 LCKR[15:0] 的值来锁定 I/O 的配置(在写序列期间,LCKR[15:0] 的值必须相同)。将 LOCK 序列应用到某个端口位后,在执行下一次复位之前,将无法对该端口位的值进行修改。每个 GPIOx_LCKR 位都会冻结控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH)中的对应位。
09. GPIO寄存器描述
9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A…I)
GPIO port mode register
偏移地址:0x00
复位值:
● 0xA800 0000(端口 A)
● 0x0000 0280(端口 B)
● 0x0000 0000(其它端口)
9.2 GPIO端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I)
GPIO port output type register
偏移地址:0x04
复位值:0x0000 0000
位 31:16 保留,必须保持复位值。
位 15:0 OTy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
这些位通过软件写入,用于配置 I/O 端口的输出类型。
0:输出推挽(复位状态)
1:输出开漏
9.3 GPIO端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)
GPIO port output speed register
偏移地址:0x08
复位值:
● 0x0000 00C0(端口 B)
● 0x0000 0000(其它端口)
9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/)
GPIO port pull-up/pull-down register
偏移地址:0x0C
复位值:
● 0x6400 0000(端口 A)
● 0x0000 0100(端口 B)
● 0x0000 0000(其它端口)
位 2y:2y+1 PUPDRy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
这些位通过软件写入,用于配置 I/O 上拉或下拉。
00:无上拉或下拉
01:上拉
10:下拉
11:保留
9.5 GPIO端口输入数据寄存器 (GPIOx_IDR) (x = A…I)
GPIO port input data register
偏移地址:0x10
复位值:0x0000 XXXX(其中 X 表示未定义)
9.6 GPIO端口输出数据寄存器 (GPIOx_ODR) (x = A…I)
GPIO port output data register
偏移地址:0x14
复位值:0x0000 0000
9.7 GPIO端口置位/复位寄存器 (GPIOx_BSRR) (x = A…I)
GPIO port bit set/reset register
偏移地址:0x18
复位值:0x0000 0000
9.8 GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)
GPIO alternate function low register
偏移地址:0x20
复位值:0x0000 0000
9.9 GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
GPIO alternate function high register
偏移地址:0x24
复位值:0x0000 0000
10. 附录
10.1 【STM32】STM32系列教程汇总
网址:【STM32】STM32系列教程汇总
10.2 参考文档
STM32F4xx英文参考手册
【STM32】GPIO概述相关推荐
- STM32 GPIO的原理、特性、选型和配置
目录 1.基本结构 2.4种输入模式 3.4种输出模式 4.GPIO选型和配置 1.基本结构 STM32 GPIO是通用输入/输出端口的英文简称,其可实现输入.输出.驱动.通信等功能,STM32的I/ ...
- STM32——GPIO(2)
STM32--GPIO 宗旨:技术的学习是有限的,分享的精神是无限的. /* GPIO_InitTypeDef结构体 */ typedef enum {GPIO_Speed_10MHz = 1, // ...
- STM32——GPIO(1)
STM32--GPIO 宗旨:技术的学习是有限的,分享的精神是无限的. [对单片机的操作就是控制IO口] 一.GPIO(通用输入输出口) 1.选定需要的引脚(对应哪一个IO口): 2.配置需要的功能( ...
- MSP430 GPIO概述 第六章
2.1 MSP430 GPIO概述 通用输入/输出接口(General Purpose Input/Output,简称GPIO)是单片机通过引脚来控制或者采集外部电路的接口,是单片机最基础的功能之一. ...
- STM32 GPIO BRR和BSRR寄存器
STM32 GPIO BRR和BSRR寄存器 使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态. 引脚的高.低电平控制,有3种方法(3个寄存器) 分别是通过G ...
- 关于STM32 GPIO配置基础概括
一.词汇表 1.介绍常用词的定义: 缩略词 包含定义 AMR 绝对最大额定值(ABSOLUTE MAXIMUM RATINGS 更多地人称为: ABS) GPIO 通用输入/输出 GP 通用 P 推挽 ...
- STM32 GPIO的配置寄存器(CRL、CRH)输入输出模式配置
STM32 GPIO的配置寄存器(CRL.CRH)输入输出模式配置 1.学会使用寄存器设定所需IO的方向,学会配置CRL.CRH 2.理解如下代码的含义 //IO方向设置 #define DS18B2 ...
- STM32 GPIO工作原理
STM32 GPIO工作原理 STM32引脚说明 STM32F103ZET6: 共有7组IO口,每组IO口有16个IO--共16X7=112个IO 编号为:GPIOA,GPIOB--GPIOG,从A到 ...
- STM32 GPIO LED和蜂鸣器实现【第四天】
STM32 GPIO LED实现 原理图 一 .STM32大小说明 二.STM32时钟分析 三.GPIO分析 1.注意点 四.寄存器地址查找 1.写出GPIOF外设的所有寄存器地址 五.LED灯开发 ...
- 判断STM32 GPIO输入口的输入状态(高电平或低电平)
判断STM32 GPIO输入口的输入状态(高电平或低电平) 以PE2和PE4为例: ① 判断单个端口是否为高电平: if(GPIOE->IDR& GPIO_IDR_IDR2) { 函数体 ...
最新文章
- c语言utc时间转换北京时间_C/C++标准库之转换UTC时间到local本地时间详解
- 使用 html 标签嵌入Silverlight程序的一点小问题
- python读取data_转载 “ 理想国@Data ”重拾Python(5):数据读取 博客
- python tensorflow教程推荐_TensorFlow教程和文章推荐大全 -DZone AI
- Boost正则表达式
- python字典嵌套实例
- cmd pc如何开多个微信_抖音打击刷赞刷粉,240多个百万粉丝大V被封;微信PC版再更新...
- Spring Boot 如何使用拦截器、过滤器、监听器?
- LINUX使用patchelf增加/修改rpath
- python cms应用生成_Django:之ORM、CMS和二维码生成
- [2019 icpc徐州] H.Yuuki and a problem 带修改的主席树(主席树+树状数组)
- 【业界思考】Sam Altman 山姆奥特曼:Idea Generation 创意产生——优秀的创始人对任何事情都有很多想法
- 优化了的过关键点的光滑曲线拟合算法
- 四轴码垛机器人DH模型运动学
- 【翻译】 Intel(R) 800 Series序列网卡 ice 驱动安装
- linux一键克隆,使用shell一键克隆虚拟机
- CCNP课堂练习一:详解交换机vlan的介绍及通过交换机从逻辑上划分区域配置
- 百度交易中台之钱包系统架构浅析
- 【系统分析师之路】2017年系统分析师上午综合知识历年真题
- 计算机文化基础多选,计算机文化基础多选题..pdf
热门文章
- iOS ARC环境下dealloc的使用
- 6-1 求链式表的表长
- deepin linux桌面设置,在Deepin Linux桌面创建快捷方式
- Java黑皮书课后题第2章:2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加
- 操作系统lab2实验总结——Part1
- 51nod 1486 大大走格子(DP+组合数学)
- ionic overflow:auto失效
- 【drp 11】使用Junit简单测试接口方法
- VS.net中快捷键收缩和展开代码段
- [转]sleep和wait有什么区别