SHT30温湿度模块使用

本次我们使用STM32F103C8T6最小系统板和STM32cubeMX来教学

流程我全部写在下面了(下载不需要C币):

1、配置我们的下载方式,并使用外部晶振:


2、我们再配置系统时钟
3、因为我们的STH30一般是用IIC(I2C)通信使用的,所以我们打开一个IIC通道,IIC默认配置就可以了。

4、因为我们需要看见她的效果是什么,我开了一个串口,所有数据通过串口打印出来。

5、然后我们配置我的工程



6、打开我们的工程文件夹,添加我们SHT30温湿度传感器的底层(SHT30.c和SHT30.h)。底层在文章的最下面。


7、打开我们的工程,把我们的底层和相关文件夹添加进去。









7、我们开始写程序了,我们先写了一个重写fputc函数,让我们可以使用printf,可以直接打印我们的温度和湿度。



8、下载好之后,打开我们的串口,然我们按一下单片机上的复位按键;。然后就OK了。

上代码:

添加在main.h里面的头文件
#include "stdio.h"
#include "string.h"
//#include "sht30.h"  也可以直接添加在main.c
添加在usart.c里面的重写fputc函数
int fputc(int c, FILE *stream)    //重写fputc函数
{ HAL_UART_Transmit(&huart1, (unsigned char *)&c, 1, 1000);   return 1;
}
SHT30.c
#include "sht30.h"
#include "stm32f1xx.h"                  // Device header
#include "i2c.h"
/* ADDR Pin Conect to VSS */#define    SHT30_ADDR_WRITE    0x44<<1         //10001000
#define    SHT30_ADDR_READ        (0x44<<1)+1        //10001011typedef enum
{/* 软件复位命令 */SOFT_RESET_CMD = 0x30A2,    /*单次测量模式命名格式:Repeatability_CS_CMDCS: Clock stretching*/HIGH_ENABLED_CMD    = 0x2C06,MEDIUM_ENABLED_CMD  = 0x2C0D,LOW_ENABLED_CMD     = 0x2C10,HIGH_DISABLED_CMD   = 0x2400,MEDIUM_DISABLED_CMD = 0x240B,LOW_DISABLED_CMD    = 0x2416,/*周期测量模式命名格式:Repeatability_MPS_CMDMPS:measurement per second*/HIGH_0_5_CMD   = 0x2032,MEDIUM_0_5_CMD = 0x2024,LOW_0_5_CMD    = 0x202F,HIGH_1_CMD     = 0x2130,MEDIUM_1_CMD   = 0x2126,LOW_1_CMD      = 0x212D,HIGH_2_CMD     = 0x2236,MEDIUM_2_CMD   = 0x2220,LOW_2_CMD      = 0x222B,HIGH_4_CMD     = 0x2334,MEDIUM_4_CMD   = 0x2322,LOW_4_CMD      = 0x2329,HIGH_10_CMD    = 0x2737,MEDIUM_10_CMD  = 0x2721,LOW_10_CMD     = 0x272A,/* 周期测量模式读取数据命令 */READOUT_FOR_PERIODIC_MODE = 0xE000,
} SHT30_CMD;/*** @brief    向SHT30发送一条指令(16bit)* @param    cmd —— SHT30指令(在SHT30_MODE中枚举定义)* @retval    成功返回HAL_OK
*/
static uint8_t    SHT30_Send_Cmd(SHT30_CMD cmd)
{uint8_t cmd_buffer[2];cmd_buffer[0] = cmd >> 8;cmd_buffer[1] = cmd;return HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADDR_WRITE, (uint8_t*)cmd_buffer, 2, 0xFFFF);
}/*** @brief    复位SHT30* @param    none* @retval    none
*/
void SHT30_Reset(void)
{SHT30_Send_Cmd(SOFT_RESET_CMD);HAL_Delay(20);
}/*** @brief    初始化SHT30* @param    none* @retval    成功返回HAL_OK* @note    周期测量模式
*/
uint8_t SHT30_Init(void)
{return SHT30_Send_Cmd(MEDIUM_2_CMD);
}/*** @brief    从SHT30读取一次数据* @param    dat —— 存储读取数据的地址(6个字节数组)* @retval    成功 —— 返回HAL_OK
*/
uint8_t SHT30_Read_Dat(uint8_t* dat)
{SHT30_Send_Cmd(READOUT_FOR_PERIODIC_MODE);return HAL_I2C_Master_Receive(&hi2c1, SHT30_ADDR_READ, dat, 6, 0xFFFF);
}#define CRC8_POLYNOMIAL 0x31uint8_t CheckCrc8(uint8_t* const message, uint8_t initial_value)
{uint8_t  remainder;        //余数uint8_t  i = 0, j = 0;  //循环变量/* 初始化 */remainder = initial_value;for(j = 0; j < 2;j++){remainder ^= message[j];/* 从最高位开始依次计算  */for (i = 0; i < 8; i++){if (remainder & 0x80){remainder = (remainder << 1)^CRC8_POLYNOMIAL;}else{remainder = (remainder << 1);}}}/* 返回计算的CRC码 */return remainder;
}
/*** @brief    将SHT30接收的6个字节数据进行CRC校验,并转换为温度值和湿度值* @param    dat  —— 存储接收数据的地址(6个字节数组)* @retval    校验成功  —— 返回0*             校验失败  —— 返回1,并设置温度值和湿度值为0
*/
uint8_t SHT30_Dat_To_Float(uint8_t* const dat, float* temperature, float* humidity)
{uint16_t recv_temperature = 0;uint16_t recv_humidity = 0;/* 校验温度数据和湿度数据是否接收正确 */if(CheckCrc8(dat, 0xFF) != dat[2] || CheckCrc8(&dat[3], 0xFF) != dat[5])return 1;/* 转换温度数据 */recv_temperature = ((uint16_t)dat[0]<<8)|dat[1];*temperature = -45 + 175*((float)recv_temperature/65535);/* 转换湿度数据 */recv_humidity = ((uint16_t)dat[3]<<8)|dat[4];*humidity = 100 * ((float)recv_humidity / 65535);return 0;
}
SHT30.h
#ifndef __SHT30_H_
#define __SHT30_H_#include "stm32f1xx.h"                  // Device header
#include "i2c.h"void SHT30_Reset(void);uint8_t SHT30_Init(void);uint8_t SHT30_Read_Dat(uint8_t* dat);uint8_t CheckCrc8(uint8_t* const message, uint8_t initial_value);uint8_t SHT30_Dat_To_Float(uint8_t* const dat, float* temperature, float* humidity);#endif
/*while之前uint8_t dat[6] = {0};float temperature = 0.0;float humidity = 0.0;SHT30_Reset();if(SHT30_Init() == HAL_OK)printf("sht30 init is ok!\r\n");elseprintf("sht30 init is not ok!\r\n");*/
/*while之后if(SHT30_Read_Dat(dat) == HAL_OK){if(SHT30_Dat_To_Float(dat,&temperature,&humidity) == HAL_OK){printf("TEMP:%f,HUM:%f\r\n",temperature,humidity);}else printf("sht30 check failed!\r\n");}else printf("sht30 read date failed!\r\n");*/

底层是我在我同学哪里拿过来直接改过的,大部分STM系列的单片机都可以使用(把#include “stm32f1xx.h” 改成你的单片机型号就OK了)
全部的工程链接:

https://download.csdn.net/download/soul1314love/20351289

SHT30温湿度模块使用相关推荐

  1. STM32之SHT30温湿度传感器驱动代码(程序稳定,清晰明了)

    第一部分:SHT30温湿度模块代码头文件(SHT30.h) #ifndef SHT30_H #define SHT30_H #include "delay.h" #include ...

  2. 传感器:SHT30温湿度传感器检测环境温湿度实验(底部附代码)

    一.导言 SHT30温湿度传感器模块是通过IIC驱动,所以大家使用该模块时,需要具备IIC的基本知识,这篇文章带领大家一起使用SHT30模块进行温湿度的测量,当然DHT10/DHT10原理都一样,好了 ...

  3. 【基于stm32f103的SHT30温湿度显示】

    基于stm32f103的SHT30温湿度显示 本次分享的是基于STM32F103C8T6单片机型号和SHT30温湿度传感器以及TFT(3.5)屏的温湿度显示实验 本实验使用的TFT彩色屏的驱动程序由商 ...

  4. 学习记录 | SHT30温湿度传感器显示异常

    使用的单片机是STC12C5A60S2,SHT30驱动程序直接照搬的这位博主SHT3X 温湿度模块 C51驱动 --简单调用获取温湿度信息_往漓的博客-CSDN博客SHT3X 温湿度模块 C51驱动S ...

  5. STM32F1 SHT3x温湿度模块

    STM32F1 & SHT3x温湿度模块 提示:以下程序是基于STM32F103和SHT3x系列硬件 文章目录 STM32F1 & SHT3x温湿度模块 一.STM32CubeMX工程 ...

  6. SHT30温湿度传感器驱动设计分析及代码实现

    文章目录 1 SHT30温湿度传感器简单测试 1.1 SHT30硬件设计事需要注意的地方 1.2 SHT30相关知识 1.3 SHT30读取温度的简单测试 2 SHT30完善的驱动设计 2.1 设计思 ...

  7. Mind+上传模式的第三方Arduino用户库实现 -DHT11温湿度模块

    Mind+上传模式的第三方Arduino用户库实现--DHT11模块读取温湿度 前言 Mind+是一款拥有自主知识产权的国产青少年编程软件,支持Arduino.micro:bit.掌控板等各种开源硬件 ...

  8. DHT11大气温湿度模块+直流电机实现根据温度控制风扇转动

    欢迎使用Mixly编辑器 DHT11大气温湿度模块+直流电机实现根据温度控制风扇转动 今天我们介绍一个可以测量温度及湿度的传感器-DHT11; 生活水平提高,人们不仅对环境温度有要求,当温度过高时我们 ...

  9. CRC校验——以SHT30温湿度传感器为例(内附SHT30的驱动代码)

    文章目录 1. 基本原理 2. 计算方法 3. c语言代码实现 4. SHT30代码 4.1 drv.c 4.2 test.c 4.3 Makefile 1. 基本原理  循环冗余校验码(CRC)的基 ...

最新文章

  1. 深入浅出谈以太坊智能合约
  2. SQL Cache Invalidation
  3. IT团队应如何保障分支机构的网络安全—Veclou微云
  4. 014_SpringBoot视图层技术thymeleaf-访问域对象
  5. python匹配中文
  6. 松果出行CTO朱蓝天做客《智慧Talk》,解开共享电单车产研密码
  7. 1024“代码急救室”活动来袭!机械键盘、背包等程序员装备等你来!
  8. 2009年3月28日四级网络工程师 试卷答案、点评及讨论
  9. SciencePlots科研绘图
  10. [译]使用Webpack提高Vue.js应用程序的4种方式
  11. linux下 卸载qt_Windows 下 Qt creator安装和使用
  12. 《马化腾:领跑互联网》— 综合素质提升书籍
  13. fabric.js 不同类型 不同控件_如何模拟不同类型的阻尼
  14. 远程运维方案选型指南:官网可下载的ZStack私有云平台 | 凌云时刻
  15. WEB2.0 XHTML代码规范
  16. 系统思考负反馈之戴明的PDCA循环
  17. python爬虫--看看虎牙女主播中谁最“顶”
  18. Chromium浏览器的一些使用总结
  19. 德勤:制造业企业数字化转型方案(PPT)
  20. E3来了,今年有哪些令人期待的游戏新作?

热门文章

  1. 网易2016研发工程师编程题--完全解析
  2. 手机如何压缩jpg图片的大小?手把手教你快速压缩jpg格式图片
  3. 关于论文图的排版(origin)
  4. linux虚拟网桥 docker,Docker 使用自定义网桥
  5. 注意论文投稿风险,现投期刊会不会成为预警期刊呢?
  6. halcon机器视觉实例1--表面划痕检测
  7. Arduino循迹小车教程一----材料篇
  8. 四舍六入c语言公式,【测绘专用】四舍六入五成双的C++实现
  9. 数字电路的74HC138的PROTUES的仿真
  10. 中国大学MOOC 浙江大学《程序设计入门——C语言》第6周:数组与函数 测验与作业(高精度小数)