华大电子MCU-CIU32F011x3通用输入输出
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 口状态
• 在推挽模式时,读输出数据寄存器时可得到一次写的值
沈阳芯硕科技有限公司是华大电子专业代理商,有技术问题可咨询芯虎论坛