STM32 HAL与来自I2C,IIC的sensirion的SHT25

时间:2016-12-02 16:22:59

标签: sensor stm32 i2c hal

是否有人使用STM32 HAL驱动程序与SHT25工作的Sensirion传感器进行I2C通信,并可以向我显示他的片段?

我使用sensirion中的Code示例进行了沟通。 (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"。

2 个答案:

答案 0 :(得分:0)

带有HAL驱动程序的STM32上Sensirion SHTC1的工作代码:

#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);

答案 1 :(得分:0)

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