有没有人使用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“。
发布于 2016-12-03 06:25:36
使用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);发布于 2016-12-08 19:30:15
使用HAL_I2C_Mem_Write()和HAL_I2C_Mem_Read() HAL API通过I2C接口从传感器写入和读取数据。您必须从传感器数据表中找到要写入/读取的数据以及要写入/读取的存储位置。
https://stackoverflow.com/questions/40936712
复制相似问题