版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的智能快递柜终端系统设计与实现摘要 III前言 1第1章绪论 21.1设计目的及意义 21.2国内外研究现状 2第2章设计方案与模块选择 32.1系统设计要求 32.2电路模块选择 32.1.1主控模块的选择 32.2.2液晶屏的选择 42.2.3通信模块的选择 42.2.4电源模块的选择 42.2.5摄像头的选择 52.3系统基本架构 5第3章系统硬件设计 63.1主控电路的设计 63.2电压转换电路 73.3SIM800A短信模块 83.4摄像头模块 93.5SPI-flash模块电路 103.6TFT液晶显示屏 103.7继电器开关的设计 113.8SD卡接口电路 12第4章系统软件设计 134.1主程序流程 134.2SIM800A短信模块程序 144.3OV7670摄像头模块程序 144.4SD卡程序 144.5TFT显示程序程序 154.6触摸操作程序 154.7BMP图像处理程序 164.8SPI-Flash程序 164.9FATFS文件系统程序 16第5章系统整体调试 185.1FATFS文件系统程序 185.1.1STM32系统板的调试 185.1.2SIM800A模块电路调试 185.1.3继电器开关电路调试 205.2程序调试 205.2.1OV7670摄像头调试 215.2.2随机数的产生 215.2.3输入键盘的调试 215.2.4中文字库的更新 225.3整体调试与结果分析 22总结 24参考文献 25摘要随着我国快递行业的发展,配送如何变得更加高效率成为行业发展的关键因素。相比较上门配送、集散点取件,自助形式的快递柜取件方式相比前两种有着较大优势。论文结合实际,设计了基于STM32的智能快递柜系统,负责存储快件和相关信息的发送功能。客户使用系统随机发送的验证码来取件,取出快件后摄像头拍摄取件人照片存储到SD中。本系统是在分析了智能快递柜终端系统的系统组成与主要功能后,设计实现了智能快递柜终端系统硬件电路,系统硬件电路包括STM32主控模块电路、SIM800A短信模块电路、继电器开关电路、OV7670摄像头模块电路、SD卡模块电路、TFT液晶模块接口电路和SPI-flash模块电路。在STM32硬件平台上进行程序功能设计以及人机交互界面来设计,利用SIM800A通信模块实现短消息通信功能,并通过2.4寸TFT显示屏实现显示及输入相关信息等功能,利用AltiumDesigner软件设计了电路原理图。最后系统经过了软硬件联调测试,满足了系统设计的预期目标。关键词:STM32主控模块;智能快递柜;短信验证码;GSM模块前言随着快递业的迅速发展,这个与人们生活息息相关的行业受到了越来越多人的喜爱,快递业有着方便、安全和快速等特点,但是快递的投递效率在最后逐件签收配送环节降低。针对这一问题,为节约快递件逐件确认签收的时间,提高快递业服务效率,论文结合实际应用,设计了一款基于STM32的智能快递终端系统,以实现快递件的自助派件。系统选用STM32单片机作为系统控制核心,并分析了智能快递柜系统的总体系统结构。智能快递柜终端主要负责快递件的存储和相关信息的发送通知功能。终端系统主要满足派件功能和快递员保存数据功能。在派件过程中,快递员首先需要登陆终端;成功登陆后选择空置箱门来放置快递件,如果当前快递柜有货物,则不能存储快件,如果快递柜中没有快件,可正常存储快件。快件存入快递柜后快递员输入客户的手机号信息,通过SIM800A模块以短信方式发送给客户取件码通知客户取件。客户取件时,输入正确验证码就可方便地提取快递件。验证码采用随机方式,确保一柜一码,确保快递安全送到客户手中。客户取出快件过程中,能够通过摄像头拍摄取件人照片并存储到系统的SD卡中。当前快递派送主要存在以下几点问题:1.快递员在等待收件人取件的过程中需要花费大量的时间,不利于其余剩下的快件的派送。2.快递主人正在上课或上班时不方便领取快递则需要另外找时间派送。3.容易受天气影响,下雨等天气无法派件。4.快递包裹被人冒领丢失。为解决这一问题而设计了一款快递柜。 第1章绪论1.1设计目的及意义本课题研究的基于STM32的快递柜将解决传统快递派件的主要缺陷。运用STM32F103ZET6做主控核心,来操控液晶屏的显示和触摸输入键盘的操作,完成存放快递和领取快递的工作。GSM模块发送短信验证码,收件人使用验证码取件,这样就能使快递员节省了时间,只需要将快件放入柜子中便可以离开,收件人也不用必须马上去取件。这个方案大大的方便了人们。1.2国内外研究现状2006-2015年期间,我国快递业务量复合增速达40%,业务量从2006年的10亿件增长到2015年的206.7亿件,增长近20倍,并在2014年首度超过美国,规模持续保持全球第一[1]。2015年,同城、异地和国际快递业务收入分别占全部快递收入的14.5%、54.6%和13.3%[2]。成立于2011年的上海宝盒速递有限公司,快递员将快件存入快递柜前,需要先通过验证。快递员将快件存放在快递柜后,后台一条短信会发送到收件人的手机上,该短信包含取件的密码,有了取件的密码,收件人即可开箱取件,完成取件后,快递员也会收到一条通知短信,证明已完成派送。密码输入错误的话,快递就无法被取走,快递柜外安装的摄像头会记录取件过程。国内虽然有了这样一家公司,但是成本非常高。本项目在成本方面做足了考虑,成本比宝盒速递低了很多,而且又能达到无人值守的目的。实现了取件自由,节约时间的目的。
第2章设计方案与模块选择2.1系统设计要求本系统选择ST意法的STM32F1系列芯片作为主控芯片。完成以下设计要求:1.实现派件员存放包裹后自动发送验证码到收件人。2.实现收件人通过短信验证码领取包裹。3.实现收件人领取成功后自动拍照保存照片并短信通知快递员包裹被领取。完成这些功能大致要解决以下三个题目:1.编写MCU与TFT液晶屏之间的显示以及触摸输入操作界面的设计程序。2.通过SIM800模块发送验证信息,将验证信息发送给收件人。3.控制OV7670拍照和SD卡存储照片。2.2电路模块选择2.1.1主控模块的选择本设计在主控芯片的选择上提出了几种方案。第一种是51系列单片机,第二种是AVR系列单片机ATMEG16,第三种是STM32F1系列STM32F103ZET6单片机。这几款单片机都是比较常用的单片机,但是性能指标却相差很大。各个方案芯片的性能参数如表2-1所示。表2-1各方案芯片对比表方案选择方案一方案二方案三芯片名称STC89S52ATMEG16STM32F103ZET6数据总线宽度8bit16bit32bit时钟频率8MHz16MHz72MHz数据RAM大小512字节1k192kBADC通道数量无1024ADC分辨率10bit12bitI/O数量32I/O32I/O140I/O工作电源电压3.3V~5.5V4.5V~5.5V1.8V~3.6V特性低功耗功耗低、稳定性强低功耗、高性能、稳定性强、高速运算数据总线宽度8bit16bit32bit因为本系统要使用到的外设偏多,仅仅是TFT液晶屏就需要34个接口,OV7670摄像头需要19个接口,还需要使用到的SPI通信接口与SD卡通信,异步串口USART与SIM800A短信模块的通信,STM32F103ZET6都能提供这些外设和功能,51系列和AVR系列都没有足够的功能和接口,综合以上的各种考虑本系统采用的主控芯片毫无疑问为速度快、功能更强大、功耗又低的STM32F103ZET6。2.2.2液晶屏的选择 方案一:液晶LCD1602,该LCD价格便宜仅3元人民币,但缺点很明显不能显示中文文本,只能显示单纯的数字或字符,而且只显示两行,不能满足本课题中快递盒子的显示需求和任务。故不选择此方案。方案二:选用LCD12864来显示,该LCD比较方案一中的稍微强大一些,能显示中文汉字、数字和英文字符并且显示的内容更多达到了4行,STM32和该LCD有串口并行通信两种。使用串口方式时STM32只需要2个I/O口就能显示任意的内容,十分的节约I/O口,但是该LCD不能显示图片,不能触摸操作。故不选择此方案。方案三:选用2.8寸电阻式TFT触摸液晶屏,该液晶屏不仅可以显示汉字和图片,还可以触摸操作,用户的交互上能做到比较的友好。故选择此方案。2.2.3通信模块的选择通信模块的选择有两个方案。方案一:选择W5500网络模块,通过与路由器连接将快递信息上传服务器,用户打开专门的APP获取验证码,而连接该模块与APP需要用到MQTT协议,在设计上存在较高的难度,不仅需要编写一个APP软件,还需要在linux操作系统下搭建网络监控服务器,用户假如不及时查看APP还是不能在第一时间知道快递的状态。故不选择此方案。方案二:选择SIM800通信模块。该模块的全球移动通信系统工作频段有两个,分别是900MHz和1800MHz,可以实现存储管理服务、通用分组无线服务技术的数据系统传输功能。可以接收和发送短信,也可以接听和拨打电话等。该方案符合本系统的要求,故选此该方案。2.2.4电源模块的选择不同模块需要不同的工作电压,其中有5V、12V、15V三种。STM32不能直接用5V供电,需要把5V电压压低到3.3V,这里用到的芯片是ASM1117-3.3。2.2.5摄像头的选择摄像头的选择OV7670摄像头,该摄像头自带FIFO,拍出来的照片图像清晰,本系统使用该摄像头完全足够。2.3系统基本架构本系统通过STM32控制TFT液晶屏显示提示信息,以及输入验证码的输入键盘,当快递员输入快递员账号,进入存件模式,在该模式下可以看到当前盒子的状态是否存在快件,系统同时控制继电器通电使电磁锁收缩开启盒子,快递员存放快件后,通过在触摸键盘上输入快递主人的号码,将随机验证码发送给快递主人,收件人收到含有随机验证码的短信后,收件人凭验证码输入正确的验证码操作界面后,系统会进行拍照,拍照成功并将照片保存在SD卡并打开盒子,快递员同时也会收到该快件被取走的短信。该系统主要由STM32F103ZET6主控电路模块、TFT电阻式2.8寸液晶显示触摸屏模块、摄像头OV7670拍照模块、SD卡存储模块、SIM800短信发送模块、SPI-flash字库模块、两路继电器模块组成。系统架构如图2-1所示。图2-1STM32系统框图
第3章系统硬件设计本章给出快递盒子的硬件设计和整体布局,主要是STM32主控模块电路、SIM800A短信模块电路、继电器开关电路、OV7670摄像头模块电路、SD卡模块电路、TFT液晶模块接口电路和SPI-flash模块电路。完成以上设计的制作软件是AltiumDesigner。这是一款绘图软件,可以用来设计绘制电路原理图、PCB连线以及输出设计。3.1主控电路的设计该系统使用STM32F103ZET6单片机作为主控芯片。STM32F103ZET6芯片如图3-1所示。它的主要功能是完成对TFT液晶的显示和触控,并控制SIM800短信模块发送短信,控制OV7670摄像头拍照和SD卡的存储功能。STM32F103ZRT6是一款性能很高而且内核是基于Cortex-M3的单片机。系统时钟经过内部锁相环倍频最高可达72M,拥有100个可编程输入/输出IO口。图3-1STM32F103ZET6芯片主控电路的原理图如图3-2所示。主控电路分为三个部分:STM32芯片、复位电路和晶振。为了使该设计使用得方便些,增加了JTAG下载接口、启动模式选择接口,还有用排针引出所有I/O口。图3-2最小系统原理图3.2电压转换电路本系统需要3.3V的工作电压供给STM32主控芯片,但是输入该系统的电压为5V,所以需要进行转换电压之后才能向芯片供电,该电路进行电压转换所用的芯片是AMS1117-3.3,在本设计的电路中,这个芯片可以得到由5V转化为3.3V的电压。其转换电路原理图如图3-3所示。转换电路中的两个电容起到的作用都是滤波。无纹波的输入的电压是滤波的目的。图3-3电压转换电路3.3SIM800A短信模块SIM800芯片工作频段有四频,分别为850MHz、900MHz、1800MHz和1900MHz。AT指令就是由该系统通过串口给SIM800的,SIM800再根据接收的AT指令内容发送短信。AT指令由终端设备传输给数据电路终端设备。AT指令在写的时候,必须必须在最前面加上“AT”,以回车结尾。该电路可以低功耗实现收发短信、语音通话、数据传输和传真信息的传输。SIM800模块自带波特率检测功能,可以检测从1200bps到115200bps的通信速率。原理图如图3-4所示。模块通电时电源指示灯亮,断电电源指示灯则灭。将手机卡插入到U4卡座中,天线接口J1用来增强通信信号强度。网络状态可以根据指示灯的亮和灭来判断。网络状态指示灯的工作状态如表3-1所示。表3-1SIM800A指示灯状态表NET_STA工作状态熄灭关机64ms亮/800ms灭未注册到网络64ms亮/3000ms灭注册到网络64ms亮/300ms灭GPRS正常通信图3-4SIM800A电路原理图该电路最核心的部分就是希姆通公司的SIM800A,STM32发送的AT指令全部由该模块接收。该电路的电源使用的是MPS公司的高效同步降压芯片MP2303,该芯片的电源转化效率非常高,输入的电压范围宽。该模块的任务是快递员在系统中输入收件人号码,系统随即会生成随机验证码,快递员将验证码发送出去,当收件人输入随机验证码,取走快递之后,快递员会收到来自系统会发过来的短信,通知快递员快递已经被取走。3.4摄像头模块OV7670CMOS图像传感器是mniVision公司的产品,此摄像头工作电压低而且体积小巧。OV7670O摄像头可以输出图像数据的方式有取窗口、子采样和整帧等。此摄像头能通过编程实现伽马曲线、白平衡、色和度图像的的处理。OV7670摄像头的特点有:电压低、灵敏度高,SCCB接口是标准的而且也兼容IIC接口,支持RawRGB、RGB(GBR4:2:2,RGB565/RGB555/RGB444),YUV(4:2:2)和YCbCr(4:2:2)输出格式,具有丰富输出尺寸类型[3]。该摄像头模块配备了一块FIFO先进先出队列的芯片,该芯片可以临时存储图像的数据,分担CPU占用率使运行更加流畅。产品如图3-5所示。在本系统中,OV7670的功能是在收件人输入正确的验证码取件时完成拍照,OV7670摄像头的供电电压为3.3V,而本系统中STM32主控芯片也是用为3.3V电压进行供电,摄像头所需的工作电压也是3.3V,而I/O口输出的电压刚好为3.3V,完全符合系统的需要。图3-5OV7670摄像头接口电路原理图3.5SPI-flash模块电路通信协议SPI主要应用在FLASH、EEPROM、数字信号处理器和AD转换器等方面。SPI种通信协议被越来越多的芯片集成,其原因是所用的芯片引脚很少,只需要四根线就可实现全双工通信。W25Q128这款芯片也支持这个协议,该芯片拥有128M的存储空间,通常被应用于存放字库。原理图如图如3-6所示。MISO是输出数据由从设备执行,输入数据由主设备执行的信号线。SCK:串行时钟信号;CS:片选信号。图3-6SPI-flash接口电路原理图在本系统中SPI-flash的作用是用于存放字库,以便于TFT液晶显示中文内容,没有字库的话TFT液晶屏会显示一些乱码。因为本设计需要显示不同的状态和提示信息,中文显示必不可少,同时也是为了使得更加人性化,界面更加友好。3.6TFT液晶显示屏TFTLCD全称薄膜晶体管液晶显示器,它的原理是通过在液晶显示屏的每一个像素上设置薄膜晶体管,能够很好的克服非选通时的干扰[4]。液晶显示屏的图像质量很高是因为扫描线数与静态特性无关。本系统选用了ALIENTEK2.8寸TFTLCD面板模块,TFTLCD能显示16位色的彩图。系统需要显示用户的输入状态和快递盒子的状态,同时也要显示触摸键盘,TFTLCD能够满足需求,所以使用了该模块。该屏幕不仅能显示还是一款触摸屏,TFT液晶触摸屏的原理与电阻式触摸原理相同。电阻式触摸屏利用压力感应触点来定位正在触摸的位置来检测电阻的。电阻式触摸屏的优点在于有很高的精度、很低的价格、很好的稳定性以及很强的抗干扰性。如图3-7所示。图3-7TFT液晶屏接口电路原理图在本系统中TFT液晶模块的任务是显示当前状态和输入键盘,当有检测到触摸后,根据触摸的位置确定触摸得到的数值.当快递员输入了密码+盒子编号后,对应的盒子的状态信息会显示在屏幕上,“存在快递”或“没有快递”。这个时候快递员可以在输入键盘输入快递主人的手机号码,输完手机号码后,点击确定键,短信如果发送成功就会提示“发送成功”的字样。快递主人在输入键盘输入验证码,假如验证码正确系统会提示“正在出件”的字样,快递主人就可以取件,出件完成后会恢复原始状态“等待取件”。3.7继电器开关的设计继电器可以控制电磁锁的开锁和关锁操作,因此作为电磁锁的开关。本系统设计了两路继电器开关,用于两个快递盒子。电路的原理是电器的短路和断路由8050三极管来控制,继电器采用的松乐继电器,来实现开通和闭合操作。实现开锁需要在继电器闭合的时侯,电磁锁收缩,锁定状态需要继电器断开,然后电磁锁弹出。开关电路图如图3-8所示。图3-8继电器开关电路3.8SD卡接口电路本系统是用SD卡存储拍摄的照片,SD卡有非常大的存储空间,而且SPI和SDIO驱动都能支持。STM32F103ZET6自带了SDIO接口驱动,通信速度最高可达到24M,传输数据每秒最高可达到12M字节[5],对于传输照片完全足够了。因为SD卡有几十G的存储空间,替换起来比较容易,而且编程起来并不复杂,很多单片机如果想要扩展大容量外部存储器都会选择SD卡。收件人在取件的时候,输入正确的验证码,系统会自动拍照并将照片保存在SD卡中的picture文件夹下。其原理图如图3-9所示。SDIO_D0、SDIO_D1、SDIO_D2、SDIO_D3用于数据传输端,SDIO_CMD是使能端,SDIO_SCK是时钟输入端。图3-9SD卡接口原理图第4章系统软件设计4.1主程序流程本系统的软件部分是指快递盒子的主控芯片STM32F103ZET6的程序,该快递盒子的程序是用C语言编程的。在这里主要介绍了程序的开发环境和程序开发设计思路。本系统使用的编程软件是Keil5,该编程软件是Window操作系统的应用程序。Keil软件不仅可以编译程序,还可以在线仿真调试和烧写程序到STM32中。STM32主控芯片程序的流程图如4-1所示。本系统的程序相对于一般的设计都要大得多,主要包括SPI-flash程序OV7670摄像头模块程序、SIM800模块程序、SD卡模块程序、FATFS文件系统程序、TFT液晶显示和触摸程序、以及BMP格式图像处理程序。接下来将一一介绍这些子程序的设计。图4-1主程序流程图4.2SIM800A短信模块程序下面将介绍配置SIM800模块的程序的过程,若想使该模块正常工作,首先要使能GPIO的时钟和串口的时钟,因为本次设计分配给SIM800的串口为串口3,所以用于发送和接收数据的I/O口为PB10和PB11,指定I/O口后需要配置I/O口的速度,这里将这两个I/O口配置为50MHz,然后需要配置I/O口的输入输出方式,PB10为STM32串口3的发送引脚,因此将PB10引脚配置为推挽输出,接收引脚为PB11,该引脚配置为浮空输入。接下来需要设置通信的协议,串口的波特率配置为115200,如果SIM800模块配置的波特率范围宽,则该模块会自动识别波特率和自动匹配相同的波特率,传输数据很稳定,几乎没有丢失或遗漏的情况,因此最常用115200,所以选用它。字长设置为八位数据格式,一个停止位,奇偶校验位没有,也没有硬件流控制,接收与发送模式被用在串口的设置。完成以上配置操作后使能串口3即可正常工作。SIM800模块读取与发送短信需要用到AT指令,读取与发送短信的将用到下面一些指令:AT+CMGF/AT+CSCS/AT+CSMP/AT+CMGR/AT+CMGS/AT+CPMS等[6]。文本模式可使短信发送中文:AT+CMGF=1,电话号码使用UNICODE编码显示。经过转换编码的字符串到SIM800中,短信便成功发送。4.3OV7670摄像头模块程序对于OV7670模块,主要的重点是将图像数据存储起来。该过程为:首先等待OV7670模块的同步信号,然后FIFO写指针复位,接着FIFO写使能,接着等待下一个同步信号,最后FIFO写禁止[7]。程序设计的思想如下:首先配置一个外部中断用来帧同步信号将的捕获,然后启动OV7670的图像数据存储中断程序,等到下一个帧同步信号来的时候,将数据存储关闭,一帧数据也就完成了。然后经过BMP图像处理,将数据保存在SD卡中。4.4SD卡程序要实现驱动SD卡最重要的步骤是初始化SD卡(这里介绍的是支持CMD8指令的SD卡),将SD卡初始化完成后,剩下的就是读写操作。首先需要执行的是卡上电,即设置SDIO_POWER[1:0]=11,通电后对复位SD卡需要发送CMD0,然后发送CMD8命令,看SD卡是否支持该命令,如果SD卡支持该命令,则可以判断SD卡是不是2.0版本或更高级的版本[8]。在发送CMD8时,STM32主控芯片的供电电压3.3V,可以通过设置VHS位告诉SD卡,根据参数该电压范围应该发送0X1AA,此时SD卡会返回响应给主机。卡CID寄存器和卡RCA通过发送CMD2和CMD3命令用来换取。在得到相对地址RCA以后,再发送CMD9可以得到CSD寄存器里面的内容,从而得到扇区大小以及SD卡的容量等信息。最后,CMD7命令完成SD卡的读和写操作。4.5TFT显示程序程序TFT显示屏能显示16位的彩色图片,设计使用TFT模块实现触摸键盘和中文显示。该LCD的使用流程如下:首先硬复位,主要是将LCD_RST从低拉高既可完成操作,接着初始化序列,执行上面两步只需要一行,执行完之后就可以设置坐标来读GRAM指令时,即可以读出颜色数据,再交由单片机处理,通过写GRAM指令时来写入颜色数据,再由LCD显示该颜色。TFTLCD的设置步骤:第一步,初始化TFTLCD模块连接的I/O口,将LCD的RST和主控芯片的RST连接起来,所以主控芯片和LCD会达成同步复位。然后进行初始化序列,这部分直接移植就可以了。初始化完成无误后,LCD即能正常显示了。值得一提的是,如果串口1没有被初始化的,就需要屏蔽printf函数,如果不屏蔽,STM32就会陷入死循环。在TFTLCD模块上显示字符和数字,需要设置光标位置,写入GRAM指令,写入画笔颜色(不设置默认蓝色),把内容写进去。该部分程序封装在子函数里面,需要显示调用LCD_ShowString函数即可以显字符和数字,如果需要显示一种字符就需要调用一次该函数,如果显示多种字符就要多次调用该函数。如果在同一个坐标上多次使用该函数会把原来的内容覆盖,如果需要清空所有显示的内容则调用LCD_Clear清屏函数。4.6触摸操作程序本设计中使用了电阻式触摸屏,由于电容式触摸屏价格高而采用了价格相对较低的电阻式触摸屏。定位触摸位置需要检测电阻来,需要用AD转换器来检测电阻,该模块的触摸屏控制器使用XPT2046,XPT2046芯片是逐步逼近型的,共有4条通道,分辨率的精度达到12位的,有125kHZ转换速率。电阻式触摸屏的程序设计思路如下:首先执行初始化操作,接着需要进行触摸校准,通过读取屏幕坐标值提高触摸的准确度,未执行校准的情况下默认使触摸屏无法使用。完成以上操作就可以正常触摸了。在该设计中,需要设置操作删除、返回、确定的键来实现数字0-9的输入。首先设置好以上操作的各个区域,当触摸下某一区域时,通过XPT2046进行AD转换得到触摸的位置坐标,在使用switch语句判断该坐标是属于哪一个区域,实现得到数字0-9的值需要执行确定、删除或返回操作。4.7BMP图像处理程序BMP图片格式是Windows操作系统的标准图片格式,后缀名为“.bmp”,这个格式的图片的格式是位映射存储,无压缩,所以就算图片不失真但是占用很大的存储空间。在摄像头获取到图像信息后,需要创建BMP的位图信息,然后将各个相关信息初始化,比如要设置BMP图片的分辨率为LCD的分辨率,并设置像素位数为16位,接着创建文件,写入位图信息与数据。最后在显示屏的GRAM中读取每个像素点的颜色值,写入BMP文件中。4.8SPI-Flash程序SPI-Flsh通过存放字库,实现显示中文和英文字符的作用。STM32的SPI2连接该模块,开始要先使能SPI2的时钟,然后将相关的I/O口设置为复用输出,这里需要注意的是,如果复用输出不设置的话,SPI2仍然默认连接标准的输入输出口,在其他地方已经使用了这些I/O,为了不冲突使用了复用功能。这里使用了STM32的PB13引脚、PB14引脚、PB15引脚,这三个引脚都设置为复用推挽输出,I/O口速度为50MHz。接着设置SPI2工作在主机模式,这里选择全双工模式,数据格式为8位,设置时钟极性SCK以及采样方式,确定传输速度(140.625kHz)需要设置SPI的时钟参数。设置数据传输顺序将MSB位设置在前面,LSB位设置在后面,最后一步设置CRC检验,提高通信稳定性。完成以上操作之后就使能SPI2,发送数据使用函数SPI_I2S_SendData,接收数据使用函数SPI_I2S_ReceiveData。4.9FATFS文件系统程序FATFS是完全免费的开源文件系统,特别适合嵌入式系统的设计。移植到各类单片机也是非常的方便,只需要做微小的修改即可使用。由于该文件系统十分庞大,这里只介绍几个常用的函数。函数f_opendir(DIR*DirObject,constTCHAR*DirName)用来打开一个已经存在的文件夹,*DirObject用来存储打开的文件夹信息,*DirName用来指向文件夹名称。函数f_readdir(DIR*DirObject,FILINFO*FileInfo)用来读取文件夹内的文件,*DirObject用来读取文件夹信息,*FileInfo用来存储读到的文件信息。调用此函数可以读取文件夹的所有文件。函数f_open(FIL*FileObject,constTCHAR*FileName,BYTEModeFlags)用来打开或者新建一个文件,*FileObject用来存储文件对象[9],*FileName指向文件名的指针,ModeFlags设置打开方式。函数f_read(FIL*FileObject,Void*Buffer,UINTByteToRead,UINT*ByteRead)读取文件内容,*FileObject指向文件对象的指针,*Buffer数据的缓冲指针从指向存储读取到的,ByteToRead准备读取的字节数,*ByteRead用来检测文件的末尾。函数f_write(FIL*FileObject,constvoid*Buffer,UINTByteToWrite,UINT*ByteWritten)用来向文件中写入数据,前提是以写文件的形式打开文件。*FileObject指向文件对象的指针,*Buffer指向存储读取到的数据的缓冲指针,ByteToWrite字节数写入*ByteWritten记录写入字节数用来检测是否写完。第5章系统整体调试5.1FATFS文件系统程序5.1.1STM32系统板的调试STM32系统板集成了SPI-Flash模块、OV7670摄像头模块、TFTLCD模块、下载口和SD卡等接口的。所图5-1所示。图5-1STM32系统板在STM32的焊接上,使用了常见的堆焊技术,最后完成所有焊接后,用万用表测试电源线和地线,如果电路没有短路,就接电并下载了一个流水灯程序,流水灯能够闪烁,但是闪烁的时间间隔与程序的设置的时间不一致。检查之后发现,问题出在使用错了连接晶振的电容,将22pF的电容误用成104的电容,所以改变晶振的起振频率,将电容更换成22pF后,LED的闪烁时间间隔跟程序中设置的一致。至此,完成STM32系统板的调试。5.1.2SIM800A模块电路调试该模块的功能是完成短信的发送。该模块根据正点原子的原理图进行设计并做了微小的修改,因为本设计只需要发送短信,所以为了减少时间和出现错误的几率,不需要使用的部分没有焊接,比如麦克风接口和232串口。首先对电源和地进行测试,测试了并没有出现短路的情况,于是就可以通过CH340串口模块与电脑USB连接来实现通信。将手机卡插进取去后SIM800模块就会开机,但是每次开机后马上就会自动关闭,还没来得及注册网络,查找原因之后发现是电脑的USB只能提供5V/1A的输出,所以USB的功率达不到模块的要求,但是SIM800模块要正常工作所需的功率为10W。于是增加了一个5V2A的电源给模块,这时候模块成功注册到网络。顺利注册网络后串口调试助手发送AT+CSCS=”GSM”,来测试能否正常收发短信,这时候如果串口调试助手返回OK的字样,就设置为文本格式,发送AT+CMGF=1。这时候需要输入我的号码作为收信人,发送AT+CMGS=设置收信人,然后输入短信内容“Helloworld”,最后点击发送。等待接收“Helloworld”的短信,但是等待了几分钟都没有收到,一开始以为是发送不成功是因为网络繁忙,放松了几次后还是这样。于是开始寻找原因,阅读AT指令文档,终于发现错误出现在最后一步,文档中明确说明输入完了短信内容后需要以16进制发送才能成功。只好再次重复以上步骤,只不过在最后一步上,把16进制发送的选项打勾了,几秒钟手机果然收到了短信。自此,SIM800模块完成调试。该模块如图5-2所示。图5-2SIM800A模块使用SIM800A模块和另外一台手机发送5条短信给手机,从发送完成就马上计时,一直到接收成功。通过这个方法了解SIM800A模块发送短信到手机和手机和手机之间发送短信是否存在时间上的差异,。模块到手机以及手机到手机之间发送短信所需耗时如表5-1。表5-1发送短信速度对比表模式第一次第二次第三次模块发到手机5s6s4s手机发到手机4s4s5s由上表可以看出,模块从发送短信到手机接收短信耗时与手机发送短信到手机接收短信耗时基本一致,大概都是在5s,说明该模块与手机短信功能基本无差异。5.1.3继电器开关电路调试该系统有两个小盒需要控制,用二路继电器组成了开关控制电路,继电器的开关电路如图5-3所示。想要继电器闭合来实现控制的电路并不难,只需要使用三极管8050将STM32的I/O口的信号放大即可。因为该电路实在是比较简单,焊接好后直接上电,有信号来继电器确实能够闭合,该模块实现了开关控制的功能,调试完成。图5-3继电器开关电路5.2程序调试本系统的程序相对于来说还是比较庞大的,涉及的部分有SIM800A模块程序、随机数产生程序OV7670模块程序、SD卡程序、TFT液晶显示程序、触摸程序、FATFS程序、输入键盘界面、定时器程序、短信的文本格式转化程序、I/O口的控制程序。因本课题涉及的程序多,调试繁杂,不能一一在此进行介绍,所以主要介绍几个主要花了较多时间调试的程序。5.2.1OV7670摄像头调试该模块在单独调试时能够正常拍照并保存在SD卡之中,于是在添加到总的工程后编译,但是并没有通过,经错误提示并检查后发现在OV7670模块的程序的定义里出现了extern后还在它赋后面赋值,比如说externu8ov_sta=0;这语句在主函数中已经定义过了这句话又定义了一次ov_sta,但是由于该变量在OV7670.c中再次使用到了,所以需要再一次定义,但是这次定义与上一次不同,定义之前必须加extern,使用extern有一个需要注意地方,变量之后不允许再赋值,正确的使用方法为:externu8ov_sta;修改了上面的错误,再次编译就没有问题了,将程序下载到STM32芯片,模拟快递被人取走后OV7670通过STM32控制进行拍照,但是用电脑读取SD卡中的照片的时候,照片上显示的是TFT液晶屏截图的内容,拍摄的照片不是自己想要的。为什么会这样呢?经过一番思考和推理,发现原因出在了TFT液晶上,摄像头工作的时候原本是实时将图像信息显示在TFT液晶上,但是由于操作和键盘输入都需要键盘显示,事先已经将图像信息屏蔽不显示。摄像头截取屏幕实时显示的画面,将得到了摄像头图像数据经过图像处理成为照片拍照的原理。为没有刷新屏幕导致拍照的瞬间截取到的是状态和输入键盘,自然得不到摄像头图像照片。发现了这个问题后,在程序里修改了拍照的机制,在拍照的前一时刻将屏幕刷新显示摄像头的图像信息,然后拍照完成恢复显示输入键盘,即可完成拍照。5.2.2随机数的产生本系统需要产生随机验证码发送给收件人取件,而STM32F1系列的芯片并没有产生随机数的功能,只有一开始使用通过定时器计时产生一个数值后发送给收件人的方法让程序产生,但是这样会出现很多问题,产生的数值可能会很大也可能很小,导致的结果是验证码的位数不确定,造成的后果就是验证码位数太少可能会被人胡乱试出来。所以需要改变方案,最后使用了屏幕坐标加快递员输入收件人号码各个数字的间隔时间相加后乘以379,使得到的很大的数值,然后取该数值的万、千、百、十和个位。这样产生的数值获取的验证码不会重复,因为使用了十一位手机号码输入的间隔时间和,屏幕的横纵坐标。5.2.3输入键盘的调试输入键盘作为交互界面必须做得实用、可靠。这部分程序的设计任务是做划分好区域,数字0-9的各个区域显示和触摸,如图5-4所示。编写程序,屏幕上显示阿拉伯数字0-9和这些数字之间的分割线,完成这部分后仍然不能触摸但是能显示了。因为还没有将各个数字分配在各个区域中,触摸区域划分好后,将各个区域赋值通过switch语句实现,当按下某一区域即可得到某一数字。图5-4触摸输入键盘界面5.2.4中文字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度大棚设施租赁与种植收益分成合同3篇
- 2025农村土地转租合同协议
- 2025汽车零部件的运输合同
- 长沙二手房合同纠纷解决途径
- 渔业合同专用章管理指南
- 2025年度行政助理人事管理优化服务合同2篇
- 风景名胜区施工合同纠纷范本
- 长春二手房买卖物业评估合同
- 贵阳市美术馆租赁合同
- 风景区开发土石方施工合同
- 《国有控股上市公司高管薪酬的管控研究》
- 餐饮业环境保护管理方案
- 食品安全分享
- 矿山机械设备安全管理制度
- 计算机等级考试二级WPS Office高级应用与设计试题及答案指导(2025年)
- 造价框架协议合同范例
- 糖尿病肢端坏疽
- 《创伤失血性休克中国急诊专家共识(2023)》解读课件
- 小学六年级数学100道题解分数方程
- YY 0838-2021 微波热凝设备
- 通信机房蓄电池放电试验报告
评论
0/150
提交评论