首页 > 编程知识 正文

arduino清空串口缓存,基于stm32的温湿度毕业设计

时间:2023-05-06 13:08:25 阅读:120082 作者:2933

一、I2C总线协议1.什么是I2C协议

I2C通信协议(Inter-Integrated Circuit )由飞利浦公司开发,引脚数少,硬件实现简单,可扩展性高,不需要USART、CAN等通信协议的外部收发2.I2C 协议的物理层和协议层

物理层

I2C是支持设备的总线。 可以连接多个I2C通信设备,支持多个通信主站和多个通信从站。 对于I2C总线,仅使用两条总线、一条双向串行数据线(SDA )和一条串行时钟线(SCL )。

(I2C通信设备的一般连接方式(引用野火资料中的图) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )

协议层

通信的开始和停止信号

数据有效性

由图可知,I2C仅在通信时、SCL为高电平时,SDA的数据传输有效。 SDA信号线用于传输数据,SCL信号线保证数据同步。

应答

当SDA发送数据时,接收方对接收到的数据进行响应。 想要继续数据传输时响应响应信号(低电平),否则响应非响应信号(高电平)。3.I2C的两种方式——硬件I2C和软件I2C

硬件I2C

直接使用STM32芯片内的硬件I2C外围设备。

软件I2C

直接使用CPU核根据I2C协议的要求控制GPIO输出的高低水平,模拟I2C。

两者的区别

硬件I2C通过直接使用外围设备控制针脚,可以减轻CPU的负担。 但是,如果使用硬件I2C,则必须使用一些固定管脚作为SCL和SDA,但软件模拟I2C相对灵活,因为它可以使用任意GPIO管脚。 硬件I2C的使用方法很复杂,软件I2C的流程更清晰。 要详细了解I2C协议,使用软件I2C可能会更好地了解此过程。 使用I2C进程可能会提高硬件I2C的通信速度并稳定下来。

二、实现AHT20采集程序1 .连接硬件AHT20的SCL、GND、SDA、VCC,分别对应stm32f103导师i2c模块的B6、GND、b7、3.3v。

连接图

2 .主要代码分析完整代码

3359 pan.Baidu.com/s/1 vzwu1Yb0baz 6b- lxw-i2vg

引出导线: 1234

在固件库版的空白项目中添加代码,实现以下功能。

温湿度数据每2秒收集一次,通过串口发送到上位机

1.AHT20芯片的使用过程

voidread_aht20_once(void ) Delay_ms ) 10; reset_AHT20 (; 重置AHT20芯片delay _ ms (10 ); init_AHT20 (; 初始化AHT20芯片Delay_ms(10 )的startMeasure_AHT20 (; AHT20芯片Delay_ms(80测试开始; read_AHT20 (; AHT20收集的数据delay_ms(5 (读取5 ); } 2.AHT20芯片读取数据

voidread_aht20(void ) {uint8_t i; for(I=0; i6; I ) {readByte[i]=0; (}I2C_Start ); //I2C启动I2c_writebyte(0x71 ); //I2C写入数据ack_status=Receive_ACK (; //收到的响应消息readByte[0]=I2C_ReadByte (; //I2C读取数据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 (; //I2C停止函数//判断读取的第一个字节是否是0x 08,0x 08,这在该芯片的读取流程中有规定,如果读取过程没有问题,则对读取的数据进行适当的处理if (readbyte () H1=(H18 )| readByte[2]; H1=(H18 )| readByte[3]; H1=H14; H1=(H1*1000 )/1024/1024; T1=readByte[3]; T1=T10x0000000F; T1=(T18 )| readByte[4]; T1=(T18 )| readByte[5]; T1=(T1*2000 )/1024/1024 - 500; AHT20_OutData[0]=(H18 )0x000000FF; AHT20_OutData[1]=H10x000000FF; aht 20 _ out data [2]=[ t18 ]0x 000000 ff; AHT20_OutData[3]=T10x000000FF; }else{AHT20_OutData[0]=0xFF; AHT20_OutData[1]=0xFF; AHT20_OutData[2]=0xFF; AHT20_OutData[3]=0xFF; printf ('读取失败!' ); }printf((r ) n ); AHT20芯片上的温度和湿度计算公式得出最终结果,通过串行端口显示printf (温度:%d%d.%d )、T1/100、(T1/10 )、T1 ) ); printf (湿度:%d%d.%d )、H1/100、(H1/10 )、H1 ); printf((r ) n ); 63 .结果

三、总结这次实验了解了I2C总线协议的具体内容,了解了硬件I2C与仿真I2C的主要区别。 代码是在网上减肥的白云的东西。 虽然做了一些变更,但是比较简单。

四.见3359 blog.csdn.net/QQ _ 43279579/article/details/111597278

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。