STM32Cubemxhal库硬件IIC驱动SHT40温湿度传感器

这篇具有很好参考价值的文章主要介绍了STM32Cubemxhal库硬件IIC驱动SHT40温湿度传感器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32cubemx配置硬件IIC如图所示

sht40驱动,stm32,单片机,嵌入式硬件,c语言,mcu

 SHT40的驱动代码

#include "SHT40.h"


#include "i2c.h"

#include <rtthread.h>
#include <rtdbg.h>

#define SHT40_ADDR_WRITE    0x44<<1         //10001000
#define SHT40_ADDR_READ     (0x44<<1)+1     //10001011

#define CRC8_POLYNOMIAL 0x31

uint8_t SHT40_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   向SHT40发送一条指令(16bit)
 * @param   cmd —— SHT40指令(在etCommands中枚举定义)
 * @retval  成功返回HAL_OK
*/
static uint8_t  SHT40_Send_Cmd(SHT40Command cmd)
{
    uint8_t cmd_buffer = 0;
    cmd_buffer = cmd ;
    return HAL_I2C_Master_Transmit(&hi2c1, SHT40_ADDR_WRITE, (uint8_t*)&cmd_buffer, 1, 0x00FF);
}
/**
 * @brief   复位SHT40
 * @param   none
 * @retval  none
*/
void SHT40_reset(void)
{
    SHT40_Send_Cmd(SHT4X_CMD_SOFT_RESET);
//    HAL_Delay(20);
		rt_thread_mdelay(20);
}
/**
 * @brief   初始化SHT40
 * @param   none
 * @retval  成功返回HAL_OK
 * @note    周期测量模式
*/
uint8_t SHT40_Init(void)
{
    return SHT40_Send_Cmd(SHT4X_CMD_MEASURE_HPM);
}
/**
 * @brief   从SHT40读取一次数据
 * @param   dat —— 存储读取数据的地址(6个字节数组)
 * @retval  成功 —— 返回HAL_OK
*/
uint8_t SHT40_Read_Dat(uint8_t* dat)
{
    SHT40_Send_Cmd(SHT4X_CMD_MEASURE_HPM);
		rt_thread_mdelay(10);
    return HAL_I2C_Master_Receive(&hi2c1, SHT40_ADDR_READ, dat, 6, 0xFFFF);
}
/**
 * @brief   将SHT40接收的6个字节数据进行CRC校验,并转换为温度值和湿度值
 * @param   dat  —— 存储接收数据的地址(6个字节数组)
 * @retval  校验成功  —— 返回0
 *          校验失败  —— 返回1,并设置温度值和湿度值为0
*/
uint8_t SHT40_Dat_To_Float(uint8_t* const dat, float* temperature, float* humidity)
{
    uint16_t recv_temperature = 0;
    uint16_t recv_humidity = 0;

    /* 校验温度数据和湿度数据是否接收正确 */
    if(SHT40_CheckCrc8(dat, 0xFF) != dat[2] || SHT40_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 = -6 + 125 * ((float)recv_humidity / 65535);
		if(*humidity>=100)   //根据数据手册编写
				*humidity=100;
		else if(*humidity<=0)
				*humidity=0;
    return 0;
}


#ifndef   __SHT40_H__
#define   __SHT40_H__

#include "main.h"

// Sensor Commands
typedef enum {
		SHT4X_CMD_MEASURE_HPM = 0xFD,   //measure T & RH with high precision (high repeatability)
		SHT4X_CMD_MEASURE_MPM = 0xF6,   //measure T & RH with medium precision (medium repeatability)
		SHT4X_CMD_MEASURE_LPM = 0xE0,   //measure T & RH with lowest precision (low repeatability)
		SHT4X_CMD_READ_SERIAL = 0x89,   //read serial number
		SHT4X_CMD_SOFT_RESET  = 0x94,   //soft reset
		SHT4X_CMD_200W_1S = 0x39,       //activate heater with 200mW for 1s, including a high precision measurement just before deactivation
		SHT4X_CMD_200W_01S = 0x32,      //activate heater with 200mW for 0.1s including a high precision measurement just before deactivation
	  SHT4X_CMD_110W_1S = 0x2F,       //activate heater with 110mW for 1s including a high precision measurement just before deactivation
		SHT4X_CMD_110W_01S = 0x24,      //activate heater with 110mW for 0.1s including a high precision measurement just before deactivation
		SHT4X_CMD_20W_1S = 0x1E,        //activate heater with 20mW for 1s including a high precision measurement just before deactivation
		SHT4X_CMD_20W_01S = 0x15,       //activate heater with 20mW for 0.1s including a high precision measurement just before deactivation
}SHT40Command; 




uint8_t SHT40_CheckCrc8(uint8_t* const message, uint8_t initial_value);
	

uint8_t SHT40_Init(void);
void SHT40_reset(void);
uint8_t SHT40_Read_Dat(uint8_t* dat);
uint8_t SHT40_Dat_To_Float(uint8_t* const dat, float* temperature, float* humidity);





















#endif

注意:在读sht40的寄存器之后一定要加10几个ms的延时

sht40驱动,stm32,单片机,嵌入式硬件,c语言,mcu文章来源地址https://www.toymoban.com/news/detail-656120.html

到了这里,关于STM32Cubemxhal库硬件IIC驱动SHT40温湿度传感器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32(HAL库)驱动SHT30温湿度传感器通过串口进行打印

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 SHT30驱动添加 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对SHT30传感器进行数据的读取,并

    2024年02月16日
    浏览(40)
  • STM32 SHT40驱动源码(使用硬件I2C)

    目录 简介: SHT40.c: SHT40.h 测试结果:         SHT40是瑞士Sensirion公司推出的第四代温湿度传感器,内部集成加热器用于去除表面微小液滴。集成I2C接口,典型的相对湿度精度1.8%RH,典型温度精度0.2℃,运行在0-100%RH和-40-125℃的环境中。 主控:STM32H7B0VBT6 平台:STM32CubeIDE SHT4

    2024年03月19日
    浏览(72)
  • 嵌入式 STM32 SHT31温湿度传感器

    目录 简介 1、原理图  2、时序说明  数据传输 起始信号  结束信号  3、SHT31读写数据  SHT31指令集 读数据  温湿度转换 4、温湿度转换应用  sht3x初始化 读取温湿度  什么是SHT31?  一主机多从机--通过寻址的方式--每个从机都有唯一的地址(器件地址0x44+引脚地址)1 + 读写位

    2024年02月01日
    浏览(66)
  • linux添加sht3x温湿度传感器驱动记录

           最近拿到一块imx6ull板子,上面有一颗温湿度传感器sht30,需要读取其数值。本人能力有限,自己写驱动还有一点困难,好在 linux内核里自带了很多器件的驱动,只需要找到相关的驱动文件根据要求修改一下设备树、添加进内核里编译就可以。         目前新版本的l

    2024年02月10日
    浏览(40)
  • ARM开发,stm32mp157a-A7核IIC实验(采集温湿度传感器值)

    ---iic.h封装时序协议头文件--- ---iic.c封装时序函数实现--- ---si7006.h读取温湿度头文件--- ---si7006.c读取温湿度函数--- ---main.c主函数测试---

    2024年02月11日
    浏览(38)
  • STM32驱动AHT10&OLED显示温湿度

    AHT10是新一代的温湿度传感器,使用SMD封装,上面有一个改进型的MEMS半导体电容式湿度传感器和一个标准的片上温度传感器原件,可用于空调,除湿器等温湿度控制领域的检测。 电气参数 AHT10模块 工作电压 DC1.8-3.3V 通讯接口 IIC 湿度 分辨率:0.024 %RH 误差:±2%RH 温度 分辨率

    2024年02月01日
    浏览(45)
  • STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块

    今日学习一下这款AHT10 温湿度传感器模块,给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器: 特性: 连接方式: 适用场所范围: 程序设计: 设计目标:  程序设计注意点: AHT10代码:  主函数代码: 测试效果:

    2024年02月11日
    浏览(43)
  • STM32驱动dht11检测温湿度由OLED12864显示

    本次实验所使用的硬件环境如下: STM32F103C8T6开发板 DHT11温湿度传感器 OLED12864显示屏 杜邦线若干 软件环境 本次实验所使用的软件环境如下: Keil C51编译器 ST-LINK V2下载器 ST-LINK Utility软件 硬件连接 首先,将STM32F103C8T6开发板、DHT11温湿度传感器和OLED12864显示屏分别连接在一起

    2023年04月13日
    浏览(56)
  • Clion开发Stm32之温湿度传感器(DHT11)驱动编写

    涵盖之前文章: Clion开发STM32之HAL库GPIO宏定义封装(最新版) Clion开发stm32之微妙延迟(采用nop指令实现) Clion开发STM32之日志模块(参考RT-Thread) 头文件 源文件

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包