您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于STM32的温湿度检测-wrapper
扫一扫,关注公众号永久使用无限制使用次数极速轻巧超低资源占用,告别卡顿慢自由编辑享受Word一样的编辑自由立即下载购买会员福昕高级PDF编辑器个人版永久轻巧自由的温湿度检测一、设计概述1.设计要求对STM32的USART1、SPI、外设(温湿度传感器、0.96寸的OLED显示屏)进行操作,具体通过USART1读取DHT11的温湿度值,在0.96寸OLED屏上显示出来,同时通过串口发送给PC显示。实验器材有STM32f103系列开发板、DHT11温湿度传感器、0.96寸OLED显示屏、杜邦线若干。2.STM32的USART和SPI简介2.1.USART主要特性串口作为MCU的重要外部接口,同时也是软件开发重要的调试手段,其重要性不言而喻。STM32的串口资源相当丰富的,功能也相当强劲。本次实验的STM32f103开发板最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持LIN、支持调制解调器操作、智能卡协议和IrDASIRENDEC规范、具有DMA等。串口设置的一般步骤可以总结为如下几个步骤:1)串口时钟使能,GPIO时钟使能2)串口复位3)GPIO端口模式设置4)串口参数初始化5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)6)使能串口7)编写中断处理函数2.2.SPI主要特性SPI(SerialPeripheralInterface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI接口一般由4根线组成,CS片选信号(有的单片机上也称为NSS),SCLK时钟信号线,MISO数据线(主机输入从机输出),MOSI数据线(主机输出从机输入),CS决定了唯一的与主设备通信的从设备,如没有CS信号,则只能存在一个从设备,主设备通过产生移位时钟信号来发起通讯。通讯时主机的数据由MISO输入,由MOSI输出,输入的数据在时钟的上升或下降沿被采样,输出数据在紧接着的下降或上升沿被发出(具体由SPI的时钟相位和极性的设置而决定)。3.DHT11使用说明DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。引脚接线如下:本实验中PA8接DHT11的PIN2脚DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。封装说明:引脚说明:Pin名称注释1VDD供电3-5.5VDC2DATA串行数据,单总线3NC空脚,请悬空4GND接地,电源负极4.OLED使用说明OLED,即有机发光二极管(OrganicLight-EmittingDiode),又称为有机电激光显示(OrganicElectroluminesenceDisplay,OELD)。因为具备轻薄、省电等特性,因此从2003年开始,这种显示设备在MP3播放器上得到了广泛应用,而对于同属数码类产品的DC与手机,此前只是在一些展会上展示过采用OLED屏幕的工程样品,还并未走入实际应用的阶段。但OLED屏幕却具备了许多LCD不可比拟的优势。目前OLED显示屏广泛用于手机、MP3、工控显示设备上,具有亮度高、显示精度高、功耗低等特点。OLED模块特点:1、超强兼容性:兼容3.3V和5V电源供电,不需要任何外围电路,5V供电的MCU系统不需要稳压到3.3V给OLED模块供电,可直接接5V电源;3.3V的MCU供电系统OLED模块也是直接3.3V。通信口在3.3V和5V供电的情况下无需接限流电阻,模块内部已经接上了,大大节约产品开发成本。2、超小体积:模块尺寸大小约为2.7CM*2.7CM,没任何多余部分。3、超窄边框设计:1MM超窄边框设计,更美观,屏幕贴得更正。4、采用4线SPI操作:操作简单,刷写速度快,普通I/O就可以操作。OLED模块采用4线SPI操作,黄蓝双色屏和蓝色屏操作相同。管脚定义如下图:管脚从左到右定义为:GND:电源地VCC:供电电源3.3V、5V都可以D0:CLK时钟D1:MOSI数据RST:复位DC:数据/命令‘二、外设引脚接线定义1.DHT11温湿度传感器:PIN1接3-5v电源,PIN2接PA8复用引脚,PIN3悬空,PIN4接地2.OLED显示屏:PB12接RST,PB1接DC,PB13接D0,PB15接D1三、软件程序设计3.1系统流程图3.2主要程序说明下图为该工程的目录结构:1.系统启动程序代码2.用户程序代码3.标准函数库4.描述文件5.系统核心文件本次实验用到了STM32f103特有的定时器Systick:Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断),其特点是能产生精确的定时。我们设置的定时初值是72,由于晶振是72MHZ即定时时间为1微秒,由于使用的DHT11需要进行高低电平的激发为高性能模式,同时DHT11发数据的格式也是根据高低电平的时间长短来区别的,这样设计使得程序的设计更为方便。其中自定义了串口格式化输出函数,使得输出更为方便,同时还自定义的整形到字符的函数,使得OLED的显示更为方便。3.3.主要程序源码#defineGLOBALS/*Includes------------------------------------------------------------------*/#includedemo.h#includestdarg.hstatic__IOuint32_tTimingDelay;voidDelay(__IOuint32_tnTime);voidRCC_Configuration(void);voidUsart1_Init(void);voidUSART_OUT(USART_TypeDef*USARTx,uint8_t*Data,...);char*itoa(intvalue,char*string,intradix);externvoidLCD_P12x24Str(unsignedcharx,unsignedchary,unsignedcharch[]);externvoidLCD_P12x24Str_f(unsignedcharx,unsignedchary,unsignedcharch[]);externvoidLCD_P24x40Str(unsignedcharx,unsignedchary,unsignedcharch[]);externvoidLCD_P24x32Ch(unsignedcharx,unsignedchary,unsignedcharN,constunsignedchar*ch);unsignedcharRH_H,RH_L,T_H,T_L,Sumcheck=0,TEMP,succ=0,count=0;externunsignedcharwd[];externunsignedcharsd[];externunsignedchardu[];/*****************************************************************************名称:voidDelay(__IOuint32_tnTime)*功能:定时延时程序1ms为单位*入口参数:无*出口参数:无*说明:*调用方法:无****************************************************************************/voidDelay(__IOuint32_tnTime){TimingDelay=nTime;while(TimingDelay!=0);}/*****************************************************************************名称:voidTimingDelay_Decrement(void)*功能:获取节拍程序*入口参数:无*出口参数:无*说明:*调用方法:无****************************************************************************/voidTimingDelay_Decrement(void){if(TimingDelay!=0x00){TimingDelay--;}}//////////////SPI2接口配置/////////////////////////////////////////////////////voidSPI_Configuration(void){SPI_InitTypeDefSPI_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);/*SPI2引脚定义PB13--SPI2_SCKPB15--SPI2_MOSI*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);/*PB12--OLEDRST引脚定义*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&G
本文标题:基于STM32的温湿度检测-wrapper
链接地址:https://www.777doc.com/doc-6564548 .html