0%

stm32_note_15day

=============================
2022-9-2
=============================

一.I²C接口设备之SHT30
    1.SHT30传感器的简介
    在我们使用的STM32F103开发板上有两个用来采集温湿度的传感器
    DHT11和SHT30
    DHT11传感器属于入门级别的传感器(做实验时会经常使用的传感器)
    SHT30传感器属于工业级传感器(做产品时会经常使用的传感器)
    2.从官网中查找资料
        1)测量范围 湿度:0%-100%	温度:-40℃ - 125℃
        2)误差范围 湿度:±2%		温度:±0.2℃
        3)通过温度的误差发现
        SHT30传感器,既可以采集到整数数据,也可以采集到小数数据
        4)SHT30传感器是I²C的接口
    3.通过手册了解SHT30
    打开<STM32RBT6\DataSheet\传感器>目录下<sht30_datasheet.pdf>
        1)8管脚的封装形式
        2)SHT30传感器本身是模拟型的传感器,
            内部自带AD转换,可以自行转换
        3)两种设备地址
        ---------------------------------------------
        手册中的描述
        如果ADDR管脚接VSS(接地)	使用的是设备地址A	0x44
        如果ADDR管脚接VDD(接电)	使用的是设备地址B	0x45
        ---------------------------------------------
        分析内容
        设备地址A	0x44	转换成二进制	01000100
        设备地址B	0x45	转换成二进制	01000101
        因为I²C总线规定设备地址是7bit的,最低位是读写标志位
        但是手册中说的设备地址A和设备地址B最低位被占用了
        所以0x44和0x45并不是最终的设备地址
        因为0x44和0x45最低位被占用了,
        用来区分设备地址A和设备地址B的,但是最高位没有被占用
        需要把设备地址A和设备地址B都左移一位
        设备地址A	01000100 << 1 10001000	0x88
        设备地址B	01000101 << 1 10001010	0x8A
        所以最终的设备地址是
        设备地址A	0x88
        设备地址B	0x8A
        ---------------------------------------------
        上述的内容将来在很多的嵌入式设备中都会碰到,要多留一个心眼!
        ---------------------------------------------
        4)经过开发板原理图的分析
        ADDR管脚连接了GND,所以我们开发板上的SHT30的设备地址是
        0x88
        5)设置采样频率
        需要发送采样的指令	0x2737
            1>产生开始信号
            2>发送设备地址 + 写的标志(0x88)
            3>等待ACK
            4>发送采样指令的高字节(0x27)
            5>等待ACK
            6>发送采样指令的低字节(0x37)
            7>等待ACK
            8>产生结束信号
        6)发送读取数据的指令
        读取数据的指令	0xE000
            1>产生开始信号
            2>发送设备地址 + 写的标志(0x88)
            3>等待ACK
            4>发送读取数据指令的高字节(0xE0)
            5>等待ACK
            6>发送读取数据指令的低字节(0x00)
            7>等待ACK
        7)读取数据
            1>产生开始信号
            2>发送设备地址 + 读的标志(0x89)
            3>等待ACK
            4>读取温度的高字节数据
            5>产生ACK
            6>读取温度的低字节数据
            7>产生ACK
            8>读取校验字节
            9>产生ACK
            A>读取湿度的高字节数据
            B>产生ACK
            C>读取湿度的低字节数据
            D>产生ACK
            E>读取检验字节
            F>不产生ACK
            G>产生结束信号
        8)读取出的数据不能直接使用,需要转换
        需要把温度的高字节和低字节的数据拼成一个2byte的数据
        需要把湿度的高字节和低字节的数据拼成一个2byte的数据
        代入公式转换
        湿度 = 100 * (double)(2byte湿度数据) / 65535;
        温度 = -45 + 175 * (double)(2byte温度数据) / 65535;
        9)最终结果的显示
        可以通过USART1或者OLED显示出来
==============================
任务
1.和同组的同学串一遍手册分析出的内容
2.搞一个新的项目工程,写SHT30的驱动程序
==============================