
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 ![]() |
【下载有礼】STM32 Finder华为应用商店正式上线!移动选型工具助力开发效率升级
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命