打印
[STM32L4+]

【STEVAL-STWINKT1B测评】传感器STTS751和 HTS221的使用

[复制链接]
568|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 xhackerustc 于 2024-9-7 11:18 编辑

硬件概述
据ST官方HTS221的datasheet,HTS221支持相对湿度范围是0 至 100% ;供电电压1.7v至3.6v;功耗低 ,在1HZ ODR下只消耗2uA电流;16位ADC;湿度和温度都是16位输出数据;湿度精度± 3.5% rH,湿度范围20到80%rH;温度精度± 0.5 °C,温度范围:15到+40°C;与主机/MCU接口支持SPI和I2C。不过在我们的STEVAL-STWINKT1B开发板上,HTS221与主控STM32L4R9ZIJ6是通过I2C连接,具体的是I2C2,可看原理图:


据ST官方STTS751的datasheet,STTS751电压范围是2.25 V 至3.6 V;温度范围–40 °C至+125 °C;支持10种不同的conversion速率和4种不同的解析度;低电流;接口应该只支持I2C。在我们的STEVAL-STWINKT1B开发板上,STTS751与主控STM32L4R9ZIJ6也是通过I2C连接,具体的是I2C2, 请看原理图:


软件驱动
fp-sns-datalog2有这两传感器的驱动代码,位置在Drivers/BSP/Components/目录下,但是最终的传感器数据读取又被包装了一层,叫做BSP_ENV_SENSOR_GetValue()什么的,其实笔者更想用原始的接口, 所以

git clone https://github.com/STMicroelectronics/STMems_Standard_C_drivers.git

git submodule update


把stts751_STdC/目录下的driver/stts751_reg.c driver/stts751_reg.h 和examples/stts751_read_data_polling.c拷贝到demo目录
修改stts751_read_data_polling.c的stts751_read_data_polling()函数:
1.分成两大块,初始化和数 据读取;
2.数据读取只读一次;
3.fix stm代码的一个bug,datasheet上说busy bit位为1表明conversion is in progress,所以笔者觉得这里应该把
void stts751_read_data_polling(void)
{
    /* Read output only if not busy */
    uint8_t flag;
    stts751_flag_busy_get(&dev_ctx, &flag);

    if (flag) {
      /* Read temperature data */
     ....
    }
}
改成
void stts751_read_data_polling(void)
{
/* Read output only if not busy */
uint8_t flag;
stts751_flag_busy_get(&dev_ctx, &flag);

if (!flag) {
/* Read temperature data */
....
}
}


4.修改stts751_read_data_polling.c的platform_write()和platform_read(),让它们用I2C2操作


对于HTS221传感器如法**制,它的在STMems_Standard_C_drivers仓库中的目录位置在hts221_STdC/,做法和STTS751做法几乎是一样的,这里不再赘述。

最后main函数的代码改成
  HAL_Init();
  SystemClock_Config();
  SystemPower_Config();
  MX_USART2_UART_Init();
  MX_I2C2_Init();
  MX_GPIO_PE1_Init();

  printf("Demo\n");

  hts221_init();
  printf("hts221 init done.\n");

  stts751_init();
  printf("stts751 init done.\n");

  while (1) {
    stts751_read_data_polling();
    HAL_Delay(500);
    hts221_read_data_polling();
    HAL_Delay(500);
  }


最后别忘记在CMakeLists.txt中把newlibc的浮点打印支持打开
 add_link_options(-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
                             -Wl,--gc-sections,--print-memory-usage,-Map,${PROJECT_NAME}.map
+                          -u_printf_float
                              --specs=nano.specs
                              --specs=nosys.specs)
add_link_options(-T ${LINKER_SCRIPT})

烧录测试





使用特权

评论回复
沙发
zhuomuniao110| | 2024-9-7 16:33 | 只看该作者
ST还有温湿度传感器啊,不错不错。

使用特权

评论回复
板凳
WoodData| | 2024-9-8 11:31 | 只看该作者
这个温湿度的准确嘛,精度怎么样

使用特权

评论回复
地板
stormwind123| | 2024-9-9 15:29 | 只看该作者
请问STTS751和HTS221的分辨率分别是多少

使用特权

评论回复
5
AdaMaYun| | 2024-9-10 08:13 | 只看该作者
最后程序运行过程如何?对于程序过程传感器精度分辨率呢?

使用特权

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

本版积分规则

20

主题

62

帖子

0

粉丝