查看: 1648|回复: 2

【智能家居挑战赛】+ 智障小助手之驱动SHT30

[复制链接]
  • TA的每日心情
    慵懒
    2024-2-8 09:39
  • 签到天数: 217 天

    [LV.7]常住居民III

    92

    主题

    1112

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    7653

    热心会员

    最后登录
    2024-4-26
    发表于 2021-4-24 10:18:02 | 显示全部楼层 |阅读模式
    今天先来一篇使用RT1010驱动SHT30读取温湿度的程序。
    其中通信方式使用的是IIC,框图如下:
    QQ截图20210424100945.png
    其中命令是16位长度。

    比较核心的命令是数值查询。发送指令0x2C06,返回为6字节的数组:
    1[温度高八位]
    2[温度第八位]
    3[温度crc校验]
    4[湿度高八位]
    5[湿度第八位]
    6[湿度crc校验]


    手册也给出了温湿度单位转换方式。
    QQ截图20210424101044.png

    IO初始化部分
    1.   IOMUXC_SetPinMux(
    2.       IOMUXC_GPIO_01_LPI2C1_SDA,              /* GPIO_01 is configured as LPI2C1_SDA */
    3.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_01 */
    4.   IOMUXC_SetPinMux(
    5.       IOMUXC_GPIO_02_LPI2C1_SCL,              /* GPIO_02 is configured as LPI2C1_SCL */
    6.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_02 */
    7.   IOMUXC_SetPinConfig(
    8.       IOMUXC_GPIO_01_LPI2C1_SDA,              /* GPIO_01 PAD functional properties : */
    9.       0xD8B0U);                               /* Slew Rate Field: Slow Slew Rate
    10.                                                  Drive Strength Field: R0/6
    11.                                                  Speed Field: fast(150MHz)
    12.                                                  Open Drain Enable Field: Open Drain Enabled
    13.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    14.                                                  Pull / Keep Select Field: Keeper
    15.                                                  Pull Up / Down Config. Field: 22K Ohm Pull Up
    16.                                                  Hyst. Enable Field: Hysteresis Disabled */
    17.   IOMUXC_SetPinConfig(
    18.       IOMUXC_GPIO_02_LPI2C1_SCL,              /* GPIO_02 PAD functional properties : */
    19.       0xD8B0U);                               /* Slew Rate Field: Slow Slew Rate
    20.                                                  Drive Strength Field: R0/6
    21.                                                  Speed Field: fast(150MHz)
    22.                                                  Open Drain Enable Field: Open Drain Enabled
    23.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    24.                                                  Pull / Keep Select Field: Keeper
    25.                                                  Pull Up / Down Config. Field: 22K Ohm Pull Up
    26.                                                  Hyst. Enable Field: Hysteresis Disabled */
    复制代码

    IIC初始化部分
    1. const lpi2c_master_config_t ACCEL_I2C_masterConfig = {
    2.     .enableMaster            = true,
    3.     .enableDoze              = true,
    4.     .debugEnable             = false,
    5.     .ignoreAck               = false,
    6.     .pinConfig               = kLPI2C_2PinOpenDrain,
    7.     .baudRate_Hz             = 100000,
    8.     .busIdleTimeout_ns       = 0,
    9.     .pinLowTimeout_ns        = 0,
    10.     .sdaGlitchFilterWidth_ns = 0,
    11.     .sclGlitchFilterWidth_ns = 0,
    12.     .hostRequest             = {
    13.     .enable = false, .source = kLPI2C_HostRequestExternalPin, .polarity = kLPI2C_HostRequestPinActiveHigh}};
    14. lpi2c_master_handle_t ACCEL_I2C_masterHandle;

    15.         LPI2C_MasterInit(LPI2C1, &ACCEL_I2C_masterConfig, 60000000UL);
    16.     LPI2C_MasterTransferCreateHandle(LPI2C1, &ACCEL_I2C_masterHandle, NULL, NULL);
    复制代码


    IIC读写函数
    1. status_t BOARD_LPI2C_Send(LPI2C_Type *base,
    2.                           uint8_t deviceAddress,
    3.                           uint32_t subAddress,
    4.                           uint8_t subAddressSize,
    5.                           uint8_t *txBuff,
    6.                           uint8_t txBuffSize)
    7. {
    8.     lpi2c_master_transfer_t xfer;

    9.     xfer.flags          = kLPI2C_TransferDefaultFlag;
    10.     xfer.slaveAddress   = deviceAddress;
    11.     xfer.direction      = kLPI2C_Write;
    12.     xfer.subaddress     = subAddress;
    13.     xfer.subaddressSize = subAddressSize;
    14.     xfer.data           = txBuff;
    15.     xfer.dataSize       = txBuffSize;

    16.     return LPI2C_MasterTransferBlocking(base, &xfer);
    17. }

    18. status_t BOARD_LPI2C_Receive(LPI2C_Type *base,
    19.                              uint8_t deviceAddress,
    20.                              uint32_t subAddress,
    21.                              uint8_t subAddressSize,
    22.                              uint8_t *rxBuff,
    23.                              uint8_t rxBuffSize)
    24. {
    25.     lpi2c_master_transfer_t xfer;

    26.     xfer.flags          = kLPI2C_TransferDefaultFlag;
    27.     xfer.slaveAddress   = deviceAddress;
    28.     xfer.direction      = kLPI2C_Read;
    29.     xfer.subaddress     = subAddress;
    30.     xfer.subaddressSize = subAddressSize;
    31.     xfer.data           = rxBuff;
    32.     xfer.dataSize       = rxBuffSize;

    33.     return LPI2C_MasterTransferBlocking(base, &xfer);
    34. }
    复制代码


    主函数

    1. SDK_DelayAtLeastUs(1000*1000, 600*1000*1000);
    2. BOARD_LPI2C_Receive(LPI2C1, 0x44, 0x2C06, 2, sht30_buff, 6);

    3. uint16_t tem = ((sht30_buff[0]<<8) | sht30_buff[1]);//温度拼接                        
    4. float Temperature= (175.0*(float)tem/65535.0-45.0) ;// T = -45 + 175 * tem / (2^16-1)/*转换实际温度*/

    5. uint16_t hum = ((sht30_buff[3]<<8) | sht30_buff[4]);//湿度拼接
    6. float Humidity= (100.0*(float)hum/65535.0);

    7. uint8_t shi = Temperature/10;
    8. uint8_t ge = Temperature - shi*10;
    9. uint8_t sound[] = {'0'+shi, '0'+ge, 'C', ' '};

    10. shi = Humidity/10;
    11. ge = Humidity - shi*10;
    12. uint8_t sound1[] = {'0'+shi, '0'+ge, '%', '\r', '\n'};

    13. LPUART_WriteBlocking(LPUART1, sound, sizeof(sound) / sizeof(sound[0]));
    14. LPUART_WriteBlocking(LPUART1, sound1, sizeof(sound1) / sizeof(sound1[0]));
    复制代码
    效果
    QQ截图20210424101724.png
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-4-24 21:23:52 | 显示全部楼层
    这标题我要怎么理解啊~~
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-8 09:39
  • 签到天数: 217 天

    [LV.7]常住居民III

    92

    主题

    1112

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    7653

    热心会员

    最后登录
    2024-4-26
     楼主| 发表于 2021-4-24 21:32:22 | 显示全部楼层
    jobszheng5 发表于 2021-4-24 21:23
    这标题我要怎么理解啊~~

    ,智障小助手是我这次设计的东西的名称。驱动SHT30是一部分工作
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 12:36 , Processed in 0.123424 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表