硬件概述
据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})
烧录测试
:
---------------------
作者:xhackerustc
链接:https://bbs.21ic.com/icview-3400862-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。