STM32 GPIO 寄存器
本文最后更新于:2020年12月31日 下午
本篇文章来了解下 stm32 的 gpio 寄存器,STM32的GPIO共有11个寄存器,下面来详细介绍:
每个通用 I/O 端口都有一下寄存器
- 4 个 32 位配置寄存器(
GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR) - 2个32位数据寄存器(
GPIOx_IDR和GPIOx_ODR) - 1个32位置位/复位寄存器(
GPIOx_BSRR) - 1个16位复位寄存器(
GPIOx_BRR) - 1个32位锁定寄存器(
GPIOx_LCKR) - 2 个 32 位复用功能选择寄存器(
GPIOx_AFRH和GPIOx_AFRL)
GPIO 主要特性
- 受控
I/O多达 16 个 - 输出状态:推挽或开漏 + 上拉/下拉
- 从输出数据寄存器 (
GPIOx_ODR) 或外设(复用功能输出)输出数据 - 可为每个
I/O选择不同的速度 - 输入状态:浮空、上拉/下拉、模拟
- 将数据输入到输入数据寄存器 (
GPIOx_IDR) 或外设(复用功能输入) - 置位和复位寄存器 (
GPIOx_BSRR),对GPIOx_ODR具有按位写权限 - 锁定机制 (
GPIOx_LCKR),可冻结I/O配置 - 模拟功能
- 复用功能输入/输出选择寄存器(一个
I/O最多可具有 16 个复用功能) - 快速翻转,每次翻转最快只需要两个时钟周期
- 引脚复用非常灵活,允许将
I/O引脚用作GPIO或多种外设功能中的一种
每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访问)。
GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。
GPIO 功能描述
根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口 位分别配置为多种模式:
- 输入浮空
- 输入上拉
- 输入下拉
- 模拟功能
- 具有上拉或下拉功能的开漏输出
- 具有上拉或下拉功能的推挽输出
- 具有上拉或下拉功能的复用功能推挽
- 具有上拉或下拉功能的复用功能开漏
下图给出了一个I/O端口位的基本结构。

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寄 存器都用于选择上拉/下拉。GPIOx_PUPDR寄存器都用于选择上拉/下拉
I/O 端口数据寄存器
每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR 和 GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!