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

[复制链接]
 楼主| xhackerustc 发表于 2024-9-7 11:15 | 显示全部楼层 |阅读模式
<
本帖最后由 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,可看原理图:
1.jpg

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

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

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

  2. 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,所以笔者觉得这里应该把
  1. void stts751_read_data_polling(void)
  2. {
  3.     /* Read output only if not busy */
  4.     uint8_t flag;
  5.     stts751_flag_busy_get(&dev_ctx, &flag);

  6.     if (flag) {
  7.       /* Read temperature data */
  8.      ....
  9.     }
  10. }
改成
  1. void stts751_read_data_polling(void)
  2. {
  3. /* Read output only if not busy */
  4. uint8_t flag;
  5. stts751_flag_busy_get(&dev_ctx, &flag);

  6. if (!flag) {
  7. /* Read temperature data */
  8. ....
  9. }
  10. }


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


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

最后main函数的代码改成
  1.   HAL_Init();
  2.   SystemClock_Config();
  3.   SystemPower_Config();
  4.   MX_USART2_UART_Init();
  5.   MX_I2C2_Init();
  6.   MX_GPIO_PE1_Init();

  7.   printf("Demo\n");

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

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

  12.   while (1) {
  13.     stts751_read_data_polling();
  14.     HAL_Delay(500);
  15.     hts221_read_data_polling();
  16.     HAL_Delay(500);
  17.   }


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

烧录测试

3.jpg



zhuomuniao110 发表于 2024-9-7 16:33 | 显示全部楼层
ST还有温湿度传感器啊,不错不错。
WoodData 发表于 2024-9-8 11:31 | 显示全部楼层
这个温湿度的准确嘛,精度怎么样
stormwind123 发表于 2024-9-9 15:29 | 显示全部楼层
请问STTS751和HTS221的分辨率分别是多少
AdaMaYun 发表于 2024-9-10 08:13 | 显示全部楼层
最后程序运行过程如何?对于程序过程传感器精度分辨率呢?
kzlzqi 发表于 2024-9-17 18:44 来自手机 | 显示全部楼层
湿度和温度都是16位输出数据;湿度精度± 3.5% rH,湿度范围20到80%rH;温度精度± 0.5 °C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

165

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

42

主题

165

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部