打印
[应用相关]

I2C 通信简介

[复制链接]
280|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢动作|  楼主 | 2024-11-21 01:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2C(Inter-Integrated Circuit)是一种广泛使用的串行通信协议,适用于连接多个设备(包括传感器)。I2C 总线使用两根线:SCL(时钟线) 和 SDA(数据线),支持多主机和多从机通信。

常见的 I2C 温湿度传感器,如 DHT22 或 SHT30,以及其他各种传感器都支持 I2C 接口。

硬件设计
I2C 引脚配置:
STM32F030F4P6 的 I2C 支持在 PA9 (SCL) 和 PA10 (SDA) 引脚上进行连接(对于其他型号的 STM32,I2C 引脚可能不同)。
传感器连接:
I2C 传感器通常包括电源(VCC)、地(GND)、数据(SDA)和时钟(SCL)引脚。

使用特权

评论回复
沙发
慢动作|  楼主 | 2024-11-21 01:02 | 只看该作者
代码示例
假设使用 SHT30(I2C 温湿度传感器)与 STM32F030F4P6 进行连接:

1. 初始化 I2C 接口
在 STM32CubeMX 中启用 I2C 外设,选择 I2C1,然后生成代码。生成的代码会包含 I2C 外设初始化函数。

使用特权

评论回复
板凳
慢动作|  楼主 | 2024-11-21 01:02 | 只看该作者
2. 配置 SHT30 传感器
以下代码展示如何配置和读取 SHT30 传感器的数据。

c
复制代码
#include "stm32f0xx_hal.h"

/* I2C 句柄 */
extern I2C_HandleTypeDef hi2c1;

/* SHT30 设备地址 */
#define SHT30_ADDR 0x44 << 1  // SHT30 I2C 地址(Shift 1 位)

/* 读取 SHT30 温湿度数据 */
HAL_StatusTypeDef SHT30_ReadTemperatureHumidity(float* temperature, float* humidity)
{
    uint8_t data[6];
    HAL_StatusTypeDef status;

    // 请求数据(读取温湿度)
    uint8_t command[2] = {0x2C, 0x06}; // 命令:测量温湿度
    status = HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADDR, command, 2, HAL_MAX_DELAY);
    if (status != HAL_OK) return status;

    // 延时等待数据准备好
    HAL_Delay(50);

    // 读取 6 字节数据(温度和湿度数据)
    status = HAL_I2C_Master_Receive(&hi2c1, SHT30_ADDR, data, 6, HAL_MAX_DELAY);
    if (status != HAL_OK) return status;

    // 解析温湿度数据
    uint16_t raw_temperature = (data[0] << 8) | data[1];
    uint16_t raw_humidity = (data[3] << 8) | data[4];

    // 温度转换公式
    *temperature = -45 + (175 * (float)raw_temperature / 65535);
    // 湿度转换公式
    *humidity = 100 * (float)raw_humidity / 65535;

    return HAL_OK;
}

使用特权

评论回复
地板
慢动作|  楼主 | 2024-11-21 01:02 | 只看该作者
在主程序中调用:
c
复制代码
float temperature = 0.0f, humidity = 0.0f;

while (1)
{
    if (SHT30_ReadTemperatureHumidity(&temperature, &humidity) == HAL_OK)
    {
        // 打印温湿度数据
        printf("Temperature: %.2f C, Humidity: %.2f %%\n", temperature, humidity);
    }
    HAL_Delay(1000);  // 每秒读取一次
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

719

帖子

0

粉丝