华大电子MCU-CIU32F011x3、CIU32F031x5通用输入输出

本文详细介绍了通用输入输出(GPIO)模块的功能特点及其配置方式。包括GPIO端口的多种工作模式如输入浮空、输入上拉等,以及如何通过软件独立配置每个端口的状态。还介绍了单独位操作、复用功能配置等内容。
AI助手已提取文章相关产品:
  1. 通用输入输出(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. 模块框图
    在这里插入图片描述

您可能感兴趣的与本文相关内容

要使用 CIU32F031 芯片实现 I2C 通信的模拟,通常采用软件模拟的方式,因为该芯片可能没有额外的硬件 I2C 接口可供使用,或者用户希望灵活控制通信过程。以下是实现模拟 I2C 通信的基本方法和步骤: ### 1. 选择 GPIO 引脚模拟 SDA 和 SCL 信号 CIU32F031 提供了丰富的 GPIO 资源,可以选择两个 GPIO 引脚分别作为 I2C 的 SDA(数据线)和 SCL(时钟线)。这两个引脚需要支持开漏输出和上拉功能,以符合 I2C 总线协议的要求。 ### 2. 初始化 GPIO 引脚 将选定的 GPIO 配置为开漏输出模式,并启用内部上拉电阻,或者外部加上拉电阻,确保总线在空闲时保持高电平。 ### 3. 实现 I2C 协议的基本时序 根据 I2C 协议标准,模拟 I2C 需要实现以下基本操作函数: - **起始条件(START)**:SDA 从高变低,同时 SCL 为高电平。 - **停止条件(STOP)**:SDA 从低变高,同时 SCL 为高电平。 - **发送一个字节(Write Byte)**:逐位发送 8 位数据,高位在前。 - **接收一个字节(Read Byte)**:逐位读取 8 位数据,高位在前。 - **应答信号(ACK/NACK)**:接收方在第 9 个时钟周期拉低 SDA 表示应答(ACK),否则为非应答(NACK)。 ### 4. 控制延时以满足时序要求 由于是软件模拟,必须通过延时函数控制 SCL 的高低电平持续时间,以满足 I2C 的通信速率(如 100 kbps 或 400 kbps)。延时函数可以通过简单的循环实现。 ### 5. 示例代码 以下是一个基于 C 语言的简化模拟 I2C 驱动代码示例: ```c #include "ciu32f031.h" #define I2C_SCL_PIN GPIO_PIN_5 #define I2C_SDA_PIN GPIO_PIN_6 #define I2C_PORT GPIOA void I2C_Delay(void) { for (volatile int i = 0; i < 100; i++); } void I2C_Start(void) { I2C_SDA_HIGH(); I2C_SCL_HIGH(); I2C_Delay(); I2C_SDA_LOW(); I2C_Delay(); I2C_SCL_LOW(); I2C_Delay(); } void I2C_Stop(void) { I2C_SDA_LOW(); I2C_SCL_HIGH(); I2C_Delay(); I2C_SDA_HIGH(); I2C_Delay(); } void I2C_WriteByte(uint8_t byte) { for (uint8_t i = 0; i < 8; i++) { if (byte & 0x80) { I2C_SDA_HIGH(); } else { I2C_SDA_LOW(); } I2C_SCL_HIGH(); I2C_Delay(); I2C_SCL_LOW(); I2C_Delay(); byte <<= 1; } // 等待ACK I2C_SDA_HIGH(); I2C_SCL_HIGH(); I2C_Delay(); I2C_SCL_LOW(); } uint8_t I2C_ReadByte(void) { uint8_t byte = 0; I2C_SDA_HIGH(); for (uint8_t i = 0; i < 8; i++) { byte <<= 1; I2C_SCL_HIGH(); I2C_Delay(); if (I2C_SDA_READ()) { byte |= 0x01; } I2C_SCL_LOW(); I2C_Delay(); } // 发送NACK I2C_SDA_LOW(); I2C_SCL_HIGH(); I2C_Delay(); I2C_SCL_LOW(); return byte; } ``` ### 6. 调试与优化 - 使用逻辑分析仪或示波器检查 SDA 和 SCL 的波形是否符合 I2C 协议。 - 根据实际通信速率调整延时函数。 - 确保外设器件的地址和寄存器配置正确。 CIU32F031 的低功耗特性(运行功耗:50μA/MHz;休眠功耗:低至1μA)使其在电池供电设备中表现优异[^2]。因此,模拟 I2C 通信在智能家居、IoT 传感器等低功耗应用场景中具有较高的实用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值