OpenHarmony API-I2cInit()设置 I2C 波特率 作者:马育民 • 2025-10-07 22:58 • 阅读:10005 # 介绍 设置 I2C 波特率,能够与外部 I2C 设备(如 OLED 屏幕、传感器等)正常通信 ### 头文件 ``` base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_i2c.h ``` ``` #include "wifiiot_i2c.h" ``` ### 定义 ``` /** * @brief Initializes an I2C device with a specified baud rate. * * * * @param id Indicates the I2C device ID. * @param baudrate Indicates the I2C baud rate. * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful; * returns an error code defined in {@link wifiiot_errno.h} otherwise. * @since 1.0 * @version 1.0 */ unsigned int I2cInit(WifiIotI2cIdx id, unsigned int baudrate); ``` **参数解释:** - **第一个参数:`WIFI_IOT_I2C_IDX_0`** - 表示要初始化的I2C总线编号(ID)。 - Hi3861开发板通常集成了多路I2C硬件接口,`WIFI_IOT_I2C_IDX_0` 特指第0路I2C总线(最常用的默认总线)。 - 若开发板有多个I2C接口,可能还有 `WIFI_IOT_I2C_IDX_1` 等,需根据硬件接线选择对应编号。 - **第二个参数:`(400*1000)`** - 表示I2C总线的通信速率,单位为 **波特率**。 - `400*1000` 即 **400,000 bps(400kbps)**,是I2C通信的常用高速率模式(另一种常见速率是100kbps)。 - 速率需与外部I2C设备(如OLED)支持的速率匹配: - 若设备仅支持100kbps,此处需改为 `100*1000`,否则会通信失败。 - 400kbps适用于大多数现代I2C设备(包括主流OLED模块),通信速度更快。 **返回值:** - 成功:返回 `WIFI_IOT_SUCCESS`(通常定义为 `0` )。 - 失败:返回错误码 以上都定义在 `wifiiot_errno.h` 中,如I2C总线未初始化、通信超时等 # 说明 ### 函数的核心作用 1. **初始化硬件寄存器**:配置I2C总线的时钟源、数据引脚(SDA)和时钟引脚(SCL)的电气属性(如拉电阻、输出模式等)。 2. **设置通信速率**:通过配置I2C控制器的分频器,使SCL(时钟线)的频率符合指定速率(400kbps),确保与外部设备的时钟同步。 3. **使能I2C功能**:激活I2C控制器,使其处于可收发数据的状态,为后续 `I2cWrite`/`I2cRead` 等通信操作做好准备。 ### 使用场景与注意事项 - **必须在通信前调用**:使用 `I2cWrite` 向OLED发送指令/数据前,必须先调用 `I2cInit` 初始化对应总线,否则会导致通信失败(返回错误码)。 - **速率匹配**:若OLED模块的 datasheet 明确要求100kbps,需将参数改为 `100*1000`,否则可能出现数据传输错误(乱码或无响应)。 - **单总线只需初始化一次**:同一I2C总线(如`WIFI_IOT_I2C_IDX_0`)在程序运行中只需初始化一次,无需重复调用。 ### 例子 ``` I2cInit(WIFI_IOT_I2C_IDX_0, 400*1000); ``` 作用是**将Hi3861的第0路I2C总线初始化为400kbps的通信速率**,使其能够与OLED等I2C设备建立正确的通信链路,是所有I2C外设操作的前置步骤。 原文出处:http://malaoshi.top/show_1GW203IxGs6t.html