目录
简介
1、原理图
2、时序说明
数据传输
起始信号
结束信号
3、SHT31读写数据
SHT31指令集
读数据
温湿度转换
4、温湿度转换应用
sht3x初始化
读取温湿度
简介
什么是SHT31? 一主机多从机--通过寻址的方式--每个从机都有唯一的地址(器件地址0x44+引脚地址)<<1 + 读写位(读1写0)
SHT31新一代 Sensirion 湿度和温度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚 DFN 封装, 底面 3 x 3mm ,高度 1.1mm。传感器输出经过标定的数字信号,标准 I2C 格式。
1、原理图
配置为通用开漏输出。
PB6--SCL
PB7--SDA
器件地址 引脚地址--ADDR引脚的高低电平
0x44+ 0
1
2、时序说明
数据传输
SDA 引脚用于传感器的数据输入和输出。当向传感器发送命令时, SDA 在串行时钟(SCL)的上升沿
有效, 且当 SCL 为高电平时, SDA 必须保持稳定。在 SCL 下降沿之后, SDA 值可被改变。为确保通讯
安全, SDA 的有效时间在 SCL 上升沿之前和下降沿之后应该分别延长至 TSU and THO -参考图 9。当从传感器读取数据时, SDA 在 SCL 变低以后有效(TV),且维持到下一个 SCL 的下降沿 。
为避免信号冲突,微处理器(MCU)必须只能驱动SDA 和 SCL 在低电平。需要一个外部的上拉电阻(例如: 10kΩ)将信号提拉至高电平。上拉电阻通常可能已包含在微处理器的 I/O 电路中。
起始信号
结束信号
3、SHT31读写数据
SHT31指令集
了解一下如下SHT31命令集:
读数据
工作顺序为:先发送IIC通信开始标志Start后,写入左移一位的地址,并将空出来的位写0表示写数据。当收到传感器应答后,即可发送命令的高八位,再次等待应答,再发送余下的低八位。然后等待ACK应答即可。
(读 R:‘1’,写 W:‘0’)。在第 8 个 SCL时钟下降沿之后,通过拉低 SDA 引脚(ACK 位),指示传感器数据接收正常。
校验:发送一次读取指令,收到6字节数据;期中1、2字节数温度的,第三字节是温度的校验字节;4、5字节是湿度的,第6字节是湿度的校验字节。校验方式采用。
温湿度转换
文章来源:https://www.toymoban.com/news/detail-427920.html
4、温湿度转换应用
sht3x初始化
文章来源地址https://www.toymoban.com/news/detail-427920.html
读取温湿度
/*********************************************************************************************************
* 函 数 名 : Sht3x_Read_TemperatureHumidity
* 功能说明 : 读取SHT3x温湿度数据
* 形 参 : HT:存储温湿度的结构体指针
* 返 回 值 : 无
*********************************************************************************************************/
int Sht3x_Read_TemperatureHumidity(Sht3x_TypeDef *temp)
{
unsigned char buff[6] = {0};
unsigned char i = 0;
IIC_Start(); //起止信号
IIC_WriteByte(SHT3X_ADDR<<1 | IIC_WRITE); //器件地址+写
if(IIC_Wait_ACK() == ACK){ //对方应答了,继续执行
IIC_WriteByte(SHT3X_READ_TEMP_HUM>>8); //命令的高位
if(IIC_Wait_ACK() == ACK){ //对方应答了,继续执行
IIC_WriteByte(SHT3X_READ_TEMP_HUM&0xff); //命令的低位
if(IIC_Wait_ACK() == ACK){ //对方应答了,继续执行
do{
if(++i > 20){
return 4;
}
IIC_Stop();
Delay_Ms(2); //等待对方采集好数据
IIC_Start();
IIC_WriteByte(SHT3X_ADDR<<1 | IIC_READ);//询问是否采集好了数据
}while(IIC_Wait_ACK() != ACK); //如果条件成立,表示传感器采集数据未完成
for(i=0; i<5; i++){
buff[i] = IIC_ReadByte(ACK);
}
buff[5] = IIC_ReadByte(NACK);
IIC_Stop();
}
//转换温湿度
if(crc8(buff, 2) == buff[2] && crc8(&buff[3], 2) == buff[5])
{
temp->temperature = (buff[0]<<8|buff[1])/65535.0*175-45;
temp->humidity = (buff[3]<<8|buff[4])/65535.0*100;
}
到了这里,关于嵌入式 STM32 SHT31温湿度传感器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!