11. 通用输入输出( GPIO) 11.1. 模块介绍 每组 GPIO 端口有四个 32 位配置寄存器 (GPIOx_MODE,GPIOx_OTYPE, GPIOx_OSPEED and GPIOx_PUPD) ,两个 32 位数据寄存器 (GPIOx_IDAT and GPIOx_ODAT) ,一个 32 位置位 / 复位寄存器 (GPIOx_BSR) 和一个 32 位翻转寄存器 (GPIOx_TGL) 。另外,所有 GPIO 有两个复用功能选择寄存器 (GPIOx_AFRH and GPIOx_AFRL) 。 注 : GPIOx 中的 x 表示 GPIO 组数。 11.2. 功能特点 • 输出状态:推挽或开漏 ( 上下拉) • 输出寄存器状态值 (GPIOx_ODAT) 或者复用功能输出 • 输入状态:浮空、上下拉、模拟 • 输入数据到数据寄存器 (GPIOx_IDAT) 或复用功能输入 • 独立置位 / 复位 / 翻转 IO 状态 (GPIOx_ BSR 、 GPIOx_TGL) • 模拟功能 • 复用功能 ( 开漏或推挽、上拉或下拉) 11.3. 功能说明 GPIO 的每一个端口可以通过软件独立配置成下面状态 • 输入浮空 • 输入上拉 • 输入下拉 • 模拟功能 • 开漏输出 ( 上拉或下拉) • 推挽输出 • 复用功能 ( 开漏或推挽、上拉或下拉) 11.3.1. 通用 IO ( GPIO ) 复位期间和刚复位后,复用功能未开启, IO 端口被配置成浮空输入模式。 当作为输出配置时,写到输出数据寄存器上的值( GPIOx_ ODAT )输出到相应的 IO 引脚。可以以推挽或开漏模式使用输出驱动器。 输入数据寄存器( GPIOx_ IDAT )在每个 APB 时钟周期捕捉 IO 引脚上的数据。所有 GPIO 引脚有一个内部弱上拉,当配置为输入时,它们可以被激活也可以被断开。 11.3.2. 单独的位操作 当对 GPIOx_ ODAT 的个别位编程时,软件不需要禁止中断:在单次 APB 写操作里,可以只更改一个或多个位。只需要通过对“置位 / 复位寄存器”( GPIOx_BSR )或“取反寄存器”( GPIOx_TGL )中想要更改的位写“ 1 ”来实现。没被选择的位将不被更改。 11.3.3. 复用功能( AF ) 芯片 IO 引脚通过多路选择器连接到片内外设,每个 IO 上同一时刻只能选通一个复用功能。每个 IO 引脚有一个 2 输入的多路选择器连接到复用功能( AF0~AF1 ),通过配置 GPIOx_AFRH/L 选择功能。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个 GPIO 脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。 11.3.4. 输入配置 当 IO 端口配置为输入时 • 输出缓存器被禁止 • 施密特触发输入被激活 • 根据输入配置(上拉、下拉或浮空)的不同,弱上拉和下拉电阻被连接 • 出现在 IO 脚上的数据在每个 APB 时钟被采样到输入数据寄存器 • 对输入数据寄存器的读访问可得到 IO 状态 11.3.5. 输出配置 当 IO 端口被配置为输出时 • 输出缓冲器被激活 开漏模式:输出寄存器上的“ 0 ”激活 N-MOS ,而输出寄存器上的“ 1 ”将端口置于高阻态( P-MOS 从不被激活)推挽模式:输出寄存器上的“ 0 ”激活 N-MOS ,而输出寄存器上的“ 1 ”将激活 P-MOS 。 • 施密特触发输入被激活 • 弱上拉和下拉电阻被禁止 • 出现在 IO 脚上的数据在每个 APB 时钟被采样到输入数据寄存器 • 在开漏模式时,对输入数据寄存器的读访问可得到 IO 状态 • 在推挽模式时,对输出数据寄存器的读访问得到最后一次写的值 11.3.6. 模拟输入配置 当 IO 端口被配置为模拟输入配置时 • 输出缓存器被禁止 • 禁止施密特触发输入,实现了每个模拟 IO 引脚上的零消耗。施密特触发输出值被强制为“ 0 ” • 弱上拉和下拉电阻被禁止 • 读取输入数据寄存器时数值为“ 0 ” 11.3.7. 复用功能配置 对 IO 端口进行编程作为复用功能时 • 在开漏或推挽式配置中,输出缓冲器被打开 • 内置外设的信号驱动输出缓冲器 ( 复用功能输出 ) • 施密特触发输入被激活 • 弱上拉和下拉电阻被禁止 • 在每个 APB 时钟周期,出现在 IO 脚上的数据被采样到输入数据寄存器 • 开漏模式时,读输入数据寄存器时可得到 IO 口状态 • 在推挽模式时,读输出数据寄存器时可得到最后一次写的值 11.4. 模块框图 沈阳芯硕科技有限公司是华大电子专业代理商,有技术问题可咨询芯虎论坛