新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2020-1-9
- 在线时间
- 6 小时
|
本次使用的是SHT30模块与STM32F103芯片进行的温湿度数据读取,代码最精简版SHT30.C文件内:
/********************************************************
*功能:对温湿度的两个字节+CRC-8字节进行校验
*返回值:成功0,失败1
********************************************************/
static uint8_t Sht30_CheckCRC(uint8_t data[], uint8_t num)
{
uint8_t bit, i;
uint8_t crc = 0xff;
for(i = 0; i < (num-1); i++)
{
crc ^= data[i];
for(bit = 8; bit > 0; --bit)
{
if(crc & 0x80){
crc = (crc << 1) ^ POLYNOMIAL;
}
else{
crc <<= 1;
}
}
}
if(crc == data[num-1]){
return 0;
}
else{
return 1;
}
}
/*******************************************************************
温湿度获取函数
函数原型: SHT30_read_result(uint8_t addr);
功能: 用来接收从器件采集并合成温湿度
********************************************************************/
float Temperature ;float Humidity;
void SHT30_read_result(etCommands command,float Temp ,float Humidi)
{
uint16_t tem,hum;
uint8_t buff[6],buff2[3];
uint8_t cmd[2];
cmd[0]=command>>8;
cmd[1]=command;
HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADR_W,cmd,2,1000);//写命令
HAL_I2C_Master_Receive(&hi2c1, SHT30_ADR_R,buff,6,1000);//接收回读过来的全部数据
if(0==Sht30_CheckCRC(buff, 3))//CRC-8校验温度数据
tem = ((buff[0]<<8) | buff[1]);//温度拼接
buff2[0]=buff[3];
buff2[1]=buff[4];
buff2[2]=buff[5];
if(0==Sht30_CheckCRC(buff2, 3))////CRC-8校验湿度数据
hum = ((buff2[0]<<8) | buff2[1]);//湿度拼接
/*转换实际温度*/
Temperature= (175.0*(float)tem/65535.0-45.0) ;// T = -45 + 175 * tem / (2^16-1)
Humidity= (100.0*(float)hum/65535.0);// RH = hum*100 / (2^16-1)
if((Temperature>=-20)&&(Temperature<=125)&&(Humidity>=0)&&(Humidity<=100))//过滤错误数据
{
Temp=Temperature;
Humidi=Humidity;
sprintf(humiture_buff1,"%6.2f*C %6.2f%%",Temperature,Humidity);//111.01*C 100.01%(保留2位小数)
}
printf("温湿度:%s\n",humiture_buff1);
hum=0;
tem=0;
// return Temperature, Humidity;
}
main.c文件内
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15); //toggle the pin
// if(0 == Sht30_GetTH_Singleshot_Poll(&temperature, &humidity, CMD_MEAS_CLOCKSTR_H))
// {
// printf("Sht30 tempearture: %.1f~C\r\n", temperature);
//// printf("Sht30 temperature: %.1f%%\r\n", humidity);
//// printf("*****************************\r\n");
// }
SHT30_read_result(CMD_MEAS_CLOCKSTR_H,temperature, humidity);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
|
|