1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,第,13,节:基于,SHT20,的温湿度采集与显示实验,“,轻松玩转,STM32,微控制器,”,讲义,董 磊,donglei,一、实验内容,2,学习,I2C,协议,以及,SHT2x,传感器测量温湿度的原理,对照,I2C.c/I2C.h,和,SHT2x.c/SHT2x.h,文件对,在,Seg7DigitalLED,模块中实现温湿度显示的,API,函数,调用,SHT2x,模块中的,API,函数进行温湿度测量,并通过七段数码管显示出温湿度值,二、实验准备,3,安装好的,MDK-ARM,软件,mcuisp,软件,
2、sscom,软件,医疗电子工程实践实验箱,.MaterialLab13,下的,KeilProject,文件夹,三、实验步骤,4,将,.MaterialLab13,文件夹下的,KeilProject,拷贝至,.ProductLab13,将,I2C.c/I2C.h,和,SHT2x.c/SHT2x.h,文件对添加到,工程中,在,Seg7DigitalLED,模块中实现温湿度显示的,API,函数,在,App.c,中对七段数码管模块和,SHT2x,模块进行初始化,在,App.c,中的,Proc1SecTask,中调用SHT2xMeasureOneSec,进行温湿度测量,在,Timer.c,的中断服务函数
3、TIM2_IRQHandler中,每2ms调用一次Seg7DispTempHumi函数,显示温湿度值,编译并下载,hex,文件到,STM32,微控制器,,验证是否能够正确测量温湿度值,并显示在七段数码上,四、技术点大纲,5,I2C串行总线概述,I2C串行总线数据传输,I2C模块实现,SHT20温湿度模块简介,SHT20温湿度传感器性能,SHT20温湿度传感器接口定义和应用电路,SHT20温湿度读写数据流程图,SHT20两种通讯模式,SHT20,温湿度读写数据时序图,SHT2x模块接口简介,SHT2x,模块应用,五、技术点详解(,1,),I2C,串行总线概述,6,I2C,总线是,PHLIPS,公
4、司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。,I2C,总线只有两根双向信号线。一根是数据线,SDA,,另一根是时钟线,SCL,。,五、技术点详解(,1,),I2C,串行总线概述,7,I2C,总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的,SDA,及,SCL,都是线,“,与,”,关系。,五、技术点详解(,1,),I2C,串行总线概述,8,每个接到,I2C,总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接
5、收数据的器件则为接收器。,在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,,I2C,总线要通过总线仲裁,以决定由哪一台主机控制总线。,五、技术点详解(,2,),I2C,串行总线数据传输,9,SCL,为高电平期间,,SDA,由高向低电平的变化表示,起始信号,SCL,为高电平期间,,SDA,由低向高电平的变化表示,停止信号,在进行数据传输时,,SCL,为高电平期间,,SDA,上的数据必须保持稳定,只有在,SCL,为低电平期间,,SDA,上的数据才允许变化,注:起始和停止信号都是由主机发出,在起始信号产生后,总线处于被占用状态;在停止信号产生后,总线处于空闲状态,五、技术点详解
6、2,),I2C,串行总线数据传输,10,SCL,为高电平期间,,SDA,保持低电平表示发送,0,或应答,SCL,为高电平期间,,SDA,保持高电平表示发送,1,或非应答,五、技术点详解(,3,),I2C,模块实现,-,起始信号,11,void I2CStartCondition(void),SDA1;-T0,SCL1;-T1,SDA0;-T2,DelayNus(10);,SCL0;-T3,DelayNus(10);,五、技术点详解(,3,),I2C,模块实现,-,停止信号,12,void I2CStopCondition(void),SDA0;,-T0,SCL0;,-T1,SCL1;,-T
7、2,DelayNus(10);,SDA1;,-T3,DelayNus(10);,五、技术点详解(,3,),I2C,模块实现,-,写字节(时序图),13,注意:较粗的SDA线由传感器控制、普通的SDA线由MCU控制,五、技术点详解(,3,),I2C,模块实现,-,写字节(代码),14,u8 I2CWriteByte(u8 value),u8 i;,u8 error=0;,for(i=0 x80;i 0;i/=2),/T0、T3、.,if(i&value),SDA1;,else,SDA0;,DelayNus(1);,SCL1;/T1、T4、.,DelayNus(5);,SCL0;/T2、T5、.,
8、DelayNus(1);,待,续,.,继续,.,/Tm,SetSdaIn();/SDA输入,SCL1;/Tm+1,DelayNus(1);,/Tm+2,error=READ_SDA;/读应答位,/Tm+3,SCL0;,DelayNus(20);,/Tm+4,SetSdaOut();,return error;,五、技术点详解(,3,),I2C,模块实现,-,读字节(时序图),15,注意:较粗的SDA线由传感器控制、普通的SDA线由MCU控制,五、技术点详解(,3,),I2C,模块实现,-,读字节(代码),16,u8 I2CReadByte(EnumI2cAck ack),u8 i;,u8 va
9、l=0;,SetSdaIn();/输入状态,for(i=0 x80;i 0;i/=2),SCL1;/T0、T3、.,DelayNus(5);,if(READ_SDA)/T1、T4、.,val=(val|i);/读数据,SCL0;/T2、T5、.,DelayNus(1);,待,续,.,继续,.,/Tm,SetSdaOut();/输出状态,if(ack),SDA0;/应答为低电平,else,SDA1;,DelayNus(1);,/Tm+1,SCL1;,DelayNus(5);,/Tm+2,SCL0;,DelayNus(20);,SetSdaOut();,return val;,五、技术点详解(,4
10、SHT20,温湿度模块简介,17,SHT20,是,新一代Sensirion湿度和温度传感器,,,在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚DFN封装,底面3x3mm,高度1.1mm。传感器输出经过标定的数字信号,标准I2C格式。,五、技术点详解(,5,),SHT20,温湿度传感器性能,18,五、技术点详解(,6,),SHT20,温湿度传感器接口定义和应用电路,19,五、技术点详解(,7,),SHT20,温湿度读写数据流程图,20,五、技术点详解(,8,),SHT20,两种通讯模式,21,MCU与传感器之间的通讯有两种不同的工作方式:主机模式或,非主机模式,。在第一
11、种情况下,在测量的过程中,SCL线被封锁(由传感器进行控制),,在第二种情况下,当传感器在执行测量任务时,SCL线仍然保持开放状态,可进行其他通讯,。非主机模式允许传感器进行测量时在总线上处理其他I2C总线通讯任务。,在非主机模式下,MCU需要对传感器状态进行查询。此过程通过发送一个启动传输时序,之后紧接着是如图16所示的I2C首字节(10000001)来完成。如果内部处理工作完成,单片机查询到传感器发出的确认信号后,相关数据就可以通过MCU进行读取。如果测量处理工作没有完成,传感器无确认位(ACK)输出,此时必须重新发送启动传输时序。,五、技术点详解(,8,),SHT20,两种通讯模式,22
12、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函
13、数,void InitSHT2x(void);/初始化SHT2x,void SHT2xMeasureOneSec(void);/每秒进行一次计算,float GetTempResult(void);/获取温度结果,float GetHumiResult(void);/获取湿度结果,1-,枚举定义,typedef enum,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,谢 谢 大,家!,






