OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6276|回复: 5

SHT30+STM32F1温湿度程序代码,精简版

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-1-9
在线时间
6 小时
发表于 2020-11-6 13:13:31 | 显示全部楼层 |阅读模式
本次使用的是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 */
}

humidity.rar

13.04 MB, 下载次数: 1371

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14425
金钱
14425
注册时间
2018-8-3
在线时间
1157 小时
发表于 2020-11-6 21:11:31 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-5-7
在线时间
6 小时
发表于 2020-11-7 09:25:56 | 显示全部楼层
6666666666666666666
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-10-28
在线时间
12 小时
发表于 2020-12-24 14:34:07 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

9

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2021-6-21
在线时间
47 小时
发表于 2021-8-7 01:00:48 来自手机 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-5-24
在线时间
22 小时
发表于 2021-12-10 15:44:29 | 显示全部楼层
你这是采用MCU本身的I2C 而非IO口模拟的I2C
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 05:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表