首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32硬件许可证,带来自sensirion的SHT25,基于I2C,IIC

STM32硬件许可证,带来自sensirion的SHT25,基于I2C,IIC
EN

Stack Overflow用户
提问于 2016-12-03 00:22:59
回答 2查看 2.3K关注 0票数 0

有没有人使用STM32 HAL驱动程序,让I2C与像SHT25这样的传感器进行通信,并能给我看他的代码片段?

我使用sensirion的代码示例进行通信。(https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/11_Sample_Codes_Software/Humidity_Sensors/Sensirion_Humidity_Sensors_SHT21_Sample_Code_V1.2.pdf)当我对传感器寻址时,我得到一个确认,但当我想读取传感器数据时,我只得到"11111111“。

EN

回答 2

Stack Overflow用户

发布于 2016-12-03 06:25:36

使用HAL驱动程序的STM32上Sensirion SHTC1的工作代码:

代码语言:javascript
复制
#define SHTC1_I2C_ADDR  0xE0
#define TEMP_HUM_CMD_MEASURE_T_FIRST    0x7866

//Launch convert
uint8_t cmd[2];
cmd[0] = (uint8_t)(TEMP_HUM_CMD_MEASURE_T_FIRST >>> 8);
cmd[1] = (uint8_t)TEMP_HUM_CMD_MEASURE_T_FIRST;
HAL_I2C_Master_Transmit(&hi2c1, SHTC1_I2C_ADDR, cmd, 2, 100);

//Wait
HAL_Delay(15);

//Read values
uint8_t rawValues[6]; //T MSB, T LSB, T CRC, H MSB, H LSB, H CRC
HAL_I2C_Master_Receive(&hi2c1, SHTC1_I2C_ADDR, rawValues, 6, 100);
uint16_t rawTemp = (uint16_t)((((uint16_t)rawValues[0])<<8) | (uint16_t)rawValues[1]);
uint16_t rawHum = (uint16_t)((((uint16_t)rawValues[3])<<8) | (uint16_t)rawValues[4]);

float hum = (float)((float)100 * (float)rawHum / (float)65536);
float temp =(float)((float)-45 + (float)175 * (float)rawTemp / (float)65536);
票数 0
EN

Stack Overflow用户

发布于 2016-12-08 19:30:15

使用HAL_I2C_Mem_Write()和HAL_I2C_Mem_Read() HAL API通过I2C接口从传感器写入和读取数据。您必须从传感器数据表中找到要写入/读取的数据以及要写入/读取的存储位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40936712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档