发新帖我要提问
12
返回列表
打印
[其他ST产品]

嵌入式STM32深入之基于IIC和SPI协议的温湿度采集

[复制链接]
楼主: 裤脚口感好
手机看帖
扫描二维码
随时随地手机跟帖
21
裤脚口感好|  楼主 | 2023-1-31 22:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
AHT20芯片读取数据 read_AHT20函数
void read_AHT20(void)
{
        uint8_t   i;

        for(i=0; i<6; i++)
        {
                readByte[i]=0;
        }

        //-------------
        I2C_Start();

        I2C_WriteByte(0x71);
        ack_status = Receive_ACK();
        readByte[0]= I2C_ReadByte();
        Send_ACK();

        readByte[1]= I2C_ReadByte();
        Send_ACK();

        readByte[2]= I2C_ReadByte();
        Send_ACK();

        readByte[3]= I2C_ReadByte();
        Send_ACK();

        readByte[4]= I2C_ReadByte();
        Send_ACK();

        readByte[5]= I2C_ReadByte();
        SendNot_Ack();
        //Send_ACK();

        I2C_Stop();

        //--------------
        if( (readByte[0] & 0x68) == 0x08 )
        {
                H1 = readByte[1];
                H1 = (H1<<8) | readByte[2];
                H1 = (H1<<8) | readByte[3];
                H1 = H1>>4;

                H1 = (H1*1000)/1024/1024;

                T1 = readByte[3];
                T1 = T1 & 0x0000000F;
                T1 = (T1<<8) | readByte[4];
                T1 = (T1<<8) | readByte[5];

                T1 = (T1*2000)/1024/1024 - 500;

                AHT20_OutData[0] = (H1>>8) & 0x000000FF;
                AHT20_OutData[1] = H1 & 0x000000FF;

                AHT20_OutData[2] = (T1>>8) & 0x000000FF;
                AHT20_OutData[3] = T1 & 0x000000FF;
        }
        else
        {
                AHT20_OutData[0] = 0xFF;
                AHT20_OutData[1] = 0xFF;

                AHT20_OutData[2] = 0xFF;
                AHT20_OutData[3] = 0xFF;
                printf("\r\n");

        }
        printf("\r\n");
        printf("温度:%d%d.%d",T1/100,(T1/10)%10,T1%10 );
        printf("湿度:%d%d.%d",H1/100,(H1/10)%10,H1%10);
        printf("\r\n");
}



使用特权

评论回复
22
裤脚口感好|  楼主 | 2023-1-31 22:42 | 只看该作者

使用特权

评论回复
23
裤脚口感好|  楼主 | 2023-1-31 22:42 | 只看该作者
电路连接
温湿度传感器接法
本程序采用的软件I2C实现,GPIO引脚PB6,PB7。
具体定义代码如下
#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
#define IIC_SCL PBout(6) //SCL
#define IIC_SDA PBout(7) //SDA
#define READ_SDA PBin(7)

使用特权

评论回复
24
裤脚口感好|  楼主 | 2023-1-31 22:42 | 只看该作者
SCL连接PB6,SDA连接PB7

如果采用硬件I2C进行实现,可以查看关于STM32的原理图,可以看到硬件I2C接口,野火stm32mini开发板的I2C接口是PA2,PA3,要实现硬件I2C读取数据,就根据上面介绍的方式进行配置,即可完成通讯。

使用特权

评论回复
25
裤脚口感好|  楼主 | 2023-1-31 23:42 | 只看该作者
实现
(1)烧录正常,打开串口助手
此时发现没有什么问题

使用特权

评论回复
26
裤脚口感好|  楼主 | 2023-1-31 23:42 | 只看该作者
改变传感器环境(哈口气)
发现此时显示温度上升至30.9,湿度上升到94.7

4906463d936cf490f5.png (255.64 KB )

4906463d936cf490f5.png

使用特权

评论回复
27
裤脚口感好|  楼主 | 2023-1-31 23:42 | 只看该作者
所以,这里实验其温度得到了明显升高,环境湿度改变后同样湿度也有了变化

使用特权

评论回复
28
裤脚口感好|  楼主 | 2023-1-31 23:43 | 只看该作者
总结
通过本次实验的操作,我们复习而之前的标准库的代码书写,然后学习利用I2C总线上允许连接多个微处理器以及各种外围设备,如存储器、LED及LCD驱动、A/D及D/A转换器等。为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制,各微处理器应该在总线空闲时发送数据。
通过本次实验,详细了解到了I2C总线协议,以及AHT20温湿度传感器的使用。对于我们更加深入学习STM32更近了一步,也是我们必须要尝试的一步,从最开始的学习到现在收获多多!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则