轻松玩转STM32微控制器讲义---第13节-基于SHT20的温湿度采集与显示实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第13节:基于SHT20的温湿度采集与显示实验“轻松玩转STM32微控制器”讲义董磊donglei@szu.edu.cn一、实验内容2学习I2C协议,以及SHT2x传感器测量温湿度的原理,对照I2C.c/I2C.h和SHT2x.c/SHT2x.h文件对在Seg7DigitalLED模块中实现温湿度显示的API函数调用SHT2x模块中的API函数进行温湿度测量,并通过七段数码管显示出温湿度值二、实验准备3安装好的MDK-ARM软件mcuisp软件sscom软件医疗电子工程实践实验箱..\Material\Lab13下的KeilProject文件夹三、实验步骤4将..\Material\Lab13文件夹下的KeilProject拷贝至..\Product\Lab13将I2C.c/I2C.h和SHT2x.c/SHT2x.h文件对添加到工程中在Seg7DigitalLED模块中实现温湿度显示的API函数在App.c中对七段数码管模块和SHT2x模块进行初始化在App.c中的Proc1SecTask中调用SHT2xMeasureOneSec,进行温湿度测量在Timer.c的中断服务函数TIM2_IRQHandler中,每2ms调用一次Seg7DispTempHumi函数,显示温湿度值编译并下载hex文件到STM32微控制器,验证是否能够正确测量温湿度值,并显示在七段数码上四、技术点大纲5I2C串行总线概述I2C串行总线数据传输I2C模块实现SHT20温湿度模块简介SHT20温湿度传感器性能SHT20温湿度传感器接口定义和应用电路SHT20温湿度读写数据流程图SHT20两种通讯模式SHT20温湿度读写数据时序图SHT2x模块接口简介SHT2x模块应用五、技术点详解(1)I2C串行总线概述6I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。五、技术点详解(1)I2C串行总线概述7I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。五、技术点详解(1)I2C串行总线概述8每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,I2C总线要通过总线仲裁,以决定由哪一台主机控制总线。五、技术点详解(2)I2C串行总线数据传输9SCL为高电平期间,SDA由高向低电平的变化表示起始信号SCL为高电平期间,SDA由低向高电平的变化表示停止信号在进行数据传输时,SCL为高电平期间,SDA上的数据必须保持稳定,只有在SCL为低电平期间,SDA上的数据才允许变化注:起始和停止信号都是由主机发出,在起始信号产生后,总线处于被占用状态;在停止信号产生后,总线处于空闲状态五、技术点详解(2)I2C串行总线数据传输10SCL为高电平期间,SDA保持低电平表示发送0或应答SCL为高电平期间,SDA保持高电平表示发送1或非应答五、技术点详解(3)I2C模块实现-起始信号11voidI2CStartCondition(void){SDA1;-T0SCL1;-T1SDA0;-T2DelayNus(10);SCL0;-T3DelayNus(10);}五、技术点详解(3)I2C模块实现-停止信号12voidI2CStopCondition(void){SDA0;-T0SCL0;-T1SCL1;-T2DelayNus(10);SDA1;-T3DelayNus(10);}五、技术点详解(3)I2C模块实现-写字节(时序图)13注意:较粗的SDA线由传感器控制、普通的SDA线由MCU控制五、技术点详解(3)I2C模块实现-写字节(代码)14u8I2CWriteByte(u8value){u8i;u8error=0;for(i=0x80;i0;i/=2){//T0、T3、...if(i&value){SDA1;}else{SDA0;}DelayNus(1);SCL1;//T1、T4、...DelayNus(5);SCL0;//T2、T5、...DelayNus(1);}待续...继续...//TmSetSdaIn();//SDA输入SCL1;//Tm+1DelayNus(1);//Tm+2error=READ_SDA;//读应答位//Tm+3SCL0;DelayNus(20);//Tm+4SetSdaOut();returnerror;}五、技术点详解(3)I2C模块实现-读字节(时序图)15注意:较粗的SDA线由传感器控制、普通的SDA线由MCU控制五、技术点详解(3)I2C模块实现-读字节(代码)16u8I2CReadByte(EnumI2cAckack){u8i;u8val=0;SetSdaIn();//输入状态for(i=0x80;i0;i/=2){SCL1;//T0、T3、...DelayNus(5);if(READ_SDA)//T1、T4、...{val=(val|i);/读数据}SCL0;//T2、T5、...DelayNus(1);}待续...继续...//TmSetSdaOut();//输出状态if(ack){SDA0;//应答为低电平}else{SDA1;}DelayNus(1);//Tm+1SCL1;DelayNus(5);//Tm+2SCL0;DelayNus(20);SetSdaOut();returnval;}五、技术点详解(4)SHT20温湿度模块简介17SHT20是新一代Sensirion湿度和温度传感器,在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚DFN封装,底面3x3mm,高度1.1mm。传感器输出经过标定的数字信号,标准I2C格式。五、技术点详解(5)SHT20温湿度传感器性能18五、技术点详解(6)SHT20温湿度传感器接口定义和应用电路19五、技术点详解(7)SHT20温湿度读写数据流程图20五、技术点详解(8)SHT20两种通讯模式21MCU与传感器之间的通讯有两种不同的工作方式:主机模式或非主机模式。在第一种情况下,在测量的过程中,SCL线被封锁(由传感器进行控制),在第二种情况下,当传感器在执行测量任务时,SCL线仍然保持开放状态,可进行其他通讯。非主机模式允许传感器进行测量时在总线上处理其他I2C总线通讯任务。在非主机模式下,MCU需要对传感器状态进行查询。此过程通过发送一个启动传输时序,之后紧接着是如图16所示的I2C首字节(1000’0001)来完成。如果内部处理工作完成,单片机查询到传感器发出的确认信号后,相关数据就可以通过MCU进行读取。如果测量处理工作没有完成,传感器无确认位(ACK)输出,此时必须重新发送启动传输时序。五、技术点详解(8)SHT20两种通讯模式22M无论哪种传输模式,由于测量的最大分辨率为14位,第二个字节SDA上的后两位LSBs(bit43和44)用来传输相关的状态信息。两个LSBs中的bit1表明测量的类型(’0’温度;‘1’:湿度)。bit0位当前没有赋值。非主机通信模式时序(灰色部分由SHT2x进行控制)。如果测量工作并非完成于“读”命令,传感器不会以27位提供ACK(可能发生更多的迭代次数)。如果45位被改成NACK,后接停止时序(P),校验和传输就被省略。五、技术点详解(9)SHT20温湿度读写数据时序图23注意:灰色部分由SHT2x控制24五、技术点详解(10)SHT2X模块接口简介2-API函数voidInitSHT2x(void);//初始化SHT2xvoidSHT2xMeasureOneSec(void);//每秒进行一次计算floatGetTempResult(void);//获取温度结果floatGetHumiResult(void);//获取湿度结果1-枚举定义typedefenum{HUMI,TEMP}EnumSHT2xMeasureType;25五、技术点详解(11)SHT2X模块应用Step1:在Seg7DigitalLED模块中实现Seg7DispTempHumi函数Step2:在App.c中进行SHT2x模块的初始化Step3:在App.c的一秒任务中调用SHT2xMeasureOneSec,即实现SHT2x每秒测量一次的功能Step4:在Timer.c的中断服务函数TIM2_IRQHandler中,每2ms调用一次Seg7DispTempHumi函数26谢谢大家!

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功