基于STM32的超市冷链压力采集系统

基于STM32的超市冷链压力采集系统

收藏

压缩包内文档预览:

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

基于STM32的超市冷链压力采集系统,基于,stm32,超市,压力,采集,收集,系统
编号:13543194    类型:共享资源    大小:4.49MB    格式:ZIP    上传时间:2019-01-20 上传人:QQ14****9609 IP属地:陕西
50
积分
关 键 词:
基于 stm32 超市 压力 采集 收集 系统
资源描述:
基于STM32的超市冷链压力采集系统,基于,stm32,超市,压力,采集,收集,系统
内容简介:
基于 STM32 的超市冷链压力采集系统摘要压力检测装置是超市冷链系统配置中必不可少的环节,即压力是超市冷链系 统的重要参数之一,对于时刻掌握系统的工作状态至关重要,压力信号的实时检 测和控制是保证运营顺利进行和设备安全工作的必要条件。在工业控制系统中, 被控对象参数检测的精确与否直接影响一个企业的经济效益,实现高精度地压力 检测对超市冷链的工业控制较为重要。本文旨在介绍一套高精度的超市冷链压力采集系统的下位机部分的设计方 法。以高性能的 STM32 微控制器为核心,实现 4 路压力数据的采集、压力数据 的显示和报警,达到实时和可靠检测冷链系统工作状态的目的。本文采用模块化 的思想完成系统的软硬件设计,硬件设计主要包括主 CPU 模块、检测模块、显 示模块和报警模块等;软件设计主要包括采集压力数据并处理、保存并显示压力 数据、若超过报警值则控制报警等。本文通过以上设计所要达到的实验目的是: 利用 STM32 单片机片内 ADC 完成 4 路采集数据的模数转换,然后通过软件对 数据进行平均值滤波处理后,最后显示到液晶显示屏上,如若采集的数据超过预 设范围,则控制发出报警信号,从而实现现场工作人员对冷链系统工作状态的实 时监管。经调试能够完成以上功能要求。关键词:STM32,压力数据采集,超市冷链IDESIGN OF PRESSURE ACQUISITION SYSTEM BASED ON STM32 FOR SUPERMARKET COLD-CHAINABSTRACTPressure detection device is an essential part of supermarket cold-chain configuration.that is,the pressure is one of the important parameters of the supermarket cold-chain system,which is important for us to grasp the working state of the system.The real time detection and control of pressure signals is a necessary condition to ensure the smooth operation and the safety of equipment.In industry control system,whether the parameter detection of the controlled object is accurate or not directly affects the economic benefit of the enterprise.The realization of high accuracy pressure data acquisition is very important for the industrial control of the supermarket cold-chain system.The article aims to introduce a design method of the supermarket cold-chains slave computer,which could achieve high accuracy pressure data acquisition.This paper presents high performance micro-controller STM32 as the core of the system to achieve the collecting,display and alarm of 4 channel pressure data, thus achieving real-time and reliable detection of the working state of the supermarket cold-chain.In this paper,the hardware design and software design of the system adopted modular design method.The design of hardware contains that the main CPU module,detection module,display module and alarm module and so on.The software design mainly includes collecting and processing the pressure data,saving and displaying the pressure data,and controlling the alarm system when the detected pressure value bigger than the preset alarm value.The purpose of this design is to use the STM32 micro-controller on-chip ADC to complete 4 channel data acquisition,and then usingIIthe way of the average to filter by software,finally the data is displayed in LCD screen.If the collected data exceeds the preset range,the alarm circuit will give an alarm.In this way,we can achieve the real-time supervision of the working status of the cold-chain system.After testing,the system is able to complete the above functional requirements.Key words: STM32,Pressure data Acquisition,Cold-chainIII目录1 绪论31.1 课题研究的背景和意义31.2 国内外的研究现状41.3 课题主要内容52 超市冷链压力采集系统的总体设计方案62.1 系统总体设计概述62.2 系统抗干扰性设计73 超市冷链压力采集系统的硬件设计83.1 系统总体硬件组成83.2 STM32 最小系统设计83.2.1 MCU 部分原理图83.2.2 复位电路113.2.3 电源电路113.2.4 启动模式设置接口123.3 模拟数据采集模块133.4 TFTLCD 显示模块133.5 报警模块153.5.1 LED 显示电路153.5.2 蜂鸣器报警电路163.6 程序下载与调试接口设计163.6.1 USB 转串口163.6.2 JTAG/SWD 调试电路183.7 I/O 口资源分配194 超市冷链压力采集系统的软件设计214.1 系统软件设计概述2194.2 STM32 的 ADC 数据采集224.2.1 STM32 的 ADC 介绍224.2.2 ADC 采集流程图234.2.3 ADC 转换程序设计234.3 TFTLCD 数据显示254.3.1 STM32 的 FSMC 简介254.3.2 FSMC 驱动 TFTLCD264.3.3 TFTLCD 模块流程图294.3.4 TFTLCD 显示软件设计294.4 报警模块314.5 主程序设计315 超市冷链压力采集系统的测试335.1 系统测试结果335.2 测试结果分析376 总结与展望38参考文献39致谢42附录431 绪论1.1 课题研究的背景和意义近年来,随着人们消费需求的不断提高,连锁超市、便利店、大卖场等商超 不但提供了各种各样的新鲜食品,而且采用统一进货和冷链储藏的方式,从而不 但使得商品质量有保证,而且购物环境良好,越来越成为人们购物的主要场所。 超市作为冷链物流产品的末端,在分销以及零售过程中都对产品质量、运营成本 和功耗等方面有着较高的要求,而冷链系统的压力参数作为保证这一品质的重要 参数之一,实现智能压力检测和控制对于时刻掌握冷链的工作状态非常重要,可 以保证运营的安全性和经济性。因此,如果能够设计一款压力数据采集系统,就 可以实现对冷链系统进行实时监控,达到经济性运营的目的,对提高企业经济效 益具有非常重要的意义。随着微电子技术与数字信号处理技术的快速发展,数据采集及其应用技术在 各行各业也得到了迅速地发展。数据采集系统,顾名思义是用来收集信息并作出 分析处理的产品或过程,在工业生产和控制中主要用于将采集传感器输出的湿 度、温度、光照强度、压力、流量等模拟信号通过转换器转换成计算机可以识别 的数字信号,并进行相应的计算处理和存储;同时,计算出的数据也可以进行显 示或打印,从而实现了对一些物理量的监测和控制12。数据采集系统的主要组 成元素包括:传感器,将物理参数转换成电信号;信号调理电路,将传感器输出 的信号转换成可以被转换为数字值的形式;模数转换器,将模拟信号转换为数字 信号。嵌入式作为目前最为流行的前沿技术之一,若能够将嵌入式技术引入到数 据采集系统中,那么将会极大得提高系统的实时性和柔性,从而满足日益渐增的 测量需求3。随着嵌入式系统的飞速发展,嵌入式数据采集技术已经成为如今社 会的主流,在数据采集系统的设计上不断创新出新的设计思路和方法。基于 Cortex-M3 架构的 ARM STM32 微处理器,有着性能一流、接口方便、功耗超低、 高集成度和开发高效等诸多优点,以其如此强大的功能在数据采集领域得到了人 们广泛的应用45。鉴于其在数据采集方面的优势和良好的发展前景,本课题便是基于嵌入式系统设计一套数据采集系统。1.2 国内外的研究现状数据采集装置是一种便携式分析仪,其特点包括记录、分析和录音功能。将 振动传感器和过程传感器安装在机械设备中,测量信号作为输入的基础,主要用 于机械设备故障诊断和定期电路检查。它可以形成一个独立的检测和诊断系统, 作为计算机辅助诊断检测装置。随着微电子技术、计算机技术、测控技术和数字通信技术的迅猛发展,国外 数据采集技术已经取得了极大的发展。这些都不难从他们近些年来所展示的产品 中看出,可以将其简要的概括为功能多、体积小以及使用方便等6。除此之外, 数据采集器也体现出以下几方面的特点:(1)它既可以作为一个数据采集器来 使用,又可以作为一台机器状态分析仪来使用;(2)具备其他仪器的功能,比 如法国迈威公司所生产的 MOVILOG 数据采集器7,它可以被当作一台动平衡仪 来使用,不仅能够完成单一平面内的动平衡,而且能做六个平面的动平衡;(3) 存储量大、测量范围宽;(4)可输入多种物理量,从而形成多参数检测系统;(5)所支持的软件是基于通用窗口的软件,功能很强大;(6)安装了 LCD 背 光显示屏,缩减了操作键,元器件集成度高,体积小、重量轻,密封外壳采取了 防水防撞击处理,能够适应各种恶劣工作场合。近年来,随着科学技术的迅猛发展,国内的数据采集系统也出现了蓬勃发展 的景象。在上个世纪 80 年代末,我国一度研制出了大量数据采集器,其中包括 单通道的 SP201、SC247 型,双通道的 EG3300、YE5938 型,超小型的 911、902 和 921 型89。为了能够实现对机器设备所发生的一般状况进行检测和故障诊断, 所研制的能够采集静态信号的 SMG9012 型,所配置的软件包得到了一定的升级 与创新,主要包括设备维修管理和基本频谱分析仪,它们不但质量高,而且工作 稳定可靠,基本已达到国外数据采集系统发展的中期水平。但是国内数据采集技 术仍存在着一定的差距,主要体现在10:(1)受振动等传感器在国内发展水平 的限制,分析频率范围并不是很宽;(2)数据采集器的内存相对不大,信号处 理能力不强,实地精准诊断功能较弱;(3)设备的软件水平较低,机器故障诊 断专家系统不够完善,软件人机交互有待改进。根据数据采集器使用功能的不同,数据采集器可以分为两类,一种是在线数据采集器,另一种是便携式数据采集器。数据采集器的应用设计多个领域,其一 是在实验室中的应用,如美国 PASSCO 公司研制的应用于物理实验室的名叫“科 学工作站”的数据采集器,它的特点包括:数据采集与计算机相结合,不仅提高 了测试的精度,而且避免了传统测试中出现的错误,并且能够自动输出测量数据 和结果通过实验可以获取数据采集和低分辨率的瞬时变化等。其二是在物流供应 链管理中的应用,如便携式扫码器在仓库管理或运输管理中的使用,不仅有利于 实现网络化管理管理,而且节约成本,同时也提高准确度。其三是在海洋作业方 面的使用,如国外具有通用性的采集器 YRON SU8200,DT500 等,功能稳定可 靠,灵活多样。最后是数据采集在地震监测方面的应用,如我国研制的 TDE-324C 型数字地震采集系统,动态范围广、功耗低、兼容性强。中国制造 2025 提出了智能制造的概念,要实现无人工厂,数据采集技术作 为工厂自动化的前沿技术,必须朝着测试精度高、响应速度快以及实现该功能的 成本低等方向发展。高效且实时的数据采集技术在运动控制、爆炸检测、医疗设 备(如 CT 等)、快速生产过程(如石油化工过程)等领域内都有着广泛的应用 场合1112。因此,我国的高速数据采集技术和产品仍有着很大的发展空间。1.3 课题主要内容本课题的主要内容是设计基于 STM32 单片机的超市冷链压力采集系统,以 STM32 微处理器为核心,以超市冷链为检测对象,当然,本文主要以自行设计 的模拟电路作为检测对象,采集的压力信号经过 STM32 处理后,利用其 FSMC 驱动的 TFTLCD 进行数据的存储和显示,并且通过报警设置来向现场工作人员 发出报警信号,以达到对超市冷链系统工作状态的实时检测和控制。本文的硬软 件设计采用模块化的设计思想,系统的硬件设计主要包括 STM32 单片机最小系 统设计、模拟数据采集模块的设计、TFTLCD 液晶显示模块的设计、报警和指示 模块的设计以及程序下载和调试接口的设计等辅助部分的设计,本文利用 Altium Designer 完成原理图以及 PCB 的绘制,并独立完成硬件焊接与调试;软件设计 利用 Keil uVision5 完成数据采集与处理、LCD 数据显示、LED 指示灯、蜂鸣器 报警等子程序以及主程序的编写与调试工作。2 超市冷链压力采集系统的总体设计方案2.1 系统总体设计概述结合设计任务书要求,采用模块化设计原则完成超市冷链压力数据采集系统 的下位机部分的设计与实现。整个系统硬件部分根据模块化功能设计原则,包括 多个单元模块,可以对单个模块进行调试,但又存在着一定的联系,这样既利于 整个系统的设计、调试,又有利于系统功能的进一步扩展13。而软件设计基于硬 件电路,结合系统所要实现的功能要求,在设计的过程中遵循功能实现最完备原 则而展开。本文选用 ST 公司的 STM32F103VCT6 作为主 CPU 模块,其有着低功耗、 高性能和低成本等特点,提供时钟、复位和电源管理功能。在实际编程过程中, 官方提供了非常丰富的固件库函数为我们所需,大大地将用户从操作底层寄存器 中解放了出来,加快了程序开发和设计的速度与效率1416。根据系统所要实现的功能要求,分以下几个模块进行设计:(1)STM32 单 片机最小系统设计,主要包括时钟电路、复位电路、启动模式设置、电源电路等;(2)模拟数据采集模块的设计,即自行设计 4 路采集电路,通过模拟来完成数 据采集工作;(3)TFTLCD 液晶显示模块的设计,本文采用正点原子 2.8 寸的 TFTLCD 模块接口,利用 STM32 的 FSMC 总线驱动 TFTLCD 完成采集数据的存 储和显示工作;(4)报警模块的设计,包括 LED 显示电路和蜂鸣器报警电路;(5)程序下载与调试模块的设计,包括 JTAG/SWD 调试接口和 USB 转串口电 路。本文采用电脑的 USB 进行供电,经电压转换芯片 AMS1117-3.3 完成电压转 换以供所需电压模块的供电。该数据采集系统的具体实现原理为:系统上电完成初始化工作后,首先 STM32 控制其 A/D 模数转换器完成 4 路模拟电压信号的采集,接着经过 STM32 进行数据转换处理后,将数据传输给 TFTLCD 进行数据的实时显示,然后若采 集的电压值超过报警范围则控制发出报警信号,以实现现场工作人员对冷链系统 的实时监管,本文设计的正常采集电压值范围为 0.5V3.0V,即若采集的电压值不在此范围内,则控制发出报警。2.2 系统抗干扰性设计为实现良好的系统功能和达到预期的性能要求,有必要对系统的抗干扰性进 行专门的考虑和设计,本文主要从以下几个方面进行考虑和设计,以提高系统的 性能和可靠性1720:在电源设计方面:对于电压纹波较大的电源,如本文所用的 5V 供电口 VUSB,在电源与地线之间应该焊接去耦合电容进行滤波;3.3V 模拟和数字电压 之间通过焊接 0 欧电阻隔离,不仅减少直接耦合而且有利于维修管理;模拟和数 字元器件通过单独的模拟电和数字电进行供电,减少相互干扰;对于集成电路芯 片 STM32,电源与地线之间通过焊接去耦合电容进行滤波;模拟、数字电压之 间通过加滤波电容和 0 欧电阻进行滤波与隔离,如本文中的 VDDA 端。在接地设计方面:由于系统中存在模拟和数字电路,在地线的连接中,通过 0 欧的电阻将模拟地和数字地隔离开,减少彼此之间的直接耦合,如本文中的 VSSA 与 VSS。在 PCB 设计方面21:将模拟元器件和数字元器件分布在专门不同的区域, 减少之间的相互干扰;尽量使晶振时钟电路与 STM32 主芯片时钟输入端之间的 布线距离最短;对电源线和地线适当加粗线宽;电源应尽量靠近地线,因为供电 回路就像一个天线,可能成为 EMI 的发射器和接收器;印刷电路板上没有元器 件的区域,须填充为地,以提供良好的屏蔽效果;同时需要注意布线次序与布线 规则的设定。3 超市冷链压力采集系统的硬件设计3.1 系统总体硬件组成本文设计的数据采集系统硬件部分主要由 MCU(micro-controller unit)、LCD 显示模块、LED 与 BEEP 组成的报警电路模块、电源模块、模拟量采集模块组 成,系统硬件部分的整体框图如图 3-1 所示。系统供电采用来自 USB 的 5V 电源, 经电源转换模块转换成 3.3V 电压,以提供给各电路模块;模拟信号采集完成 4 路模拟量的采集,经 A/D 转换后,通过 LCD 进行各通道数据的显示,便于现场 工作人员进行实时监督,若超出规定的范围,则控制 LED 与蜂鸣器组成的报警 电路向用户发出报警。模拟采集模块报警电路模块MCULCD 显示电源模块模块图 3-1 系统硬件整体框图3.2 STM32 最小系统设计3.2.1 MCU 部分原理图本文选用 STM32F103VCT6 作为 MCU,该微处理器是为要求高性能、低功 耗的嵌入式系统而特意设计的 ARM Cortex-M3 内核,是 STM32 增强型系列中的 32 位处理器,高达 72MHz 的最高工作频率,具有结构性能先进,功耗控制优异, 性能出众以及片上外设功能较多,集成度较高,易于开发等诸多优点。片上资源 主要包括:48KB SRAM,256KB FLASH,2 个基本定时器、4 个通用定时器、2 个高级定时器、2 个 DMA 控制器(共 12 个通道)、3 个 SPI、2 个 IIC、 5 个 串口、1 个 USB、1 个 CAN、3 个 12 位 ADC、2 个 12 位 DAC、1 个 SDIO 接口、1 个 FSMC 接口以及 80 个通用 I/O 口,大部分 I/O 口都耐 5V(模拟通道除 外),支持 SWD 和 JTAG 调试,其中 SWD 调试只需要两根数据线即可2224。该 芯片的外设功能比较多,如本文采用其外部总线 FSMC 来驱动液晶显示屏,可 有效改善 LCD 的刷屏速度。MCU 的部分原理图如图 3-2 所示:图 3-2 MCU 部分原理图外设都必须使用像系统时钟这般高的时钟频率,比如 RTC,只需要几十 K 的时 钟即可正常工作,而且在同一个电路中,时钟的速度越高,就会导致功耗越高, 也会使得抗电磁干扰能力相应的减弱,所以对于比较复杂的单片机 ,如 STM32, 通常都是通过使用多个时钟源来解决这些问题。STM32 的时钟树主要包含五大 部分,低速内部时钟、高速内部时钟、低速外部时钟、高速外部时钟、系统时钟。 上述图中所示的是两个外部时钟,其中高速外部时钟 HSE 接的是 8MHz 的晶体, 经过锁相环 PLL 倍频后作为系统频率供片内绝大部分设备使用,能够产生非常 准确的主时钟;另一个是低速外部时钟,所使用的石英晶体的频率为 32.768KHz, 它的优点在于能够为时钟部件(RTC)提供一个低速且高精度的时钟源,RTC 可 以用于时钟/日历或其他需要计时的场合。(2)单片机的后备区域供电所采用的供电方式是:CR1220 纽扣电池与 VCC3.3 混合供电的方式,其主要原理是:在外部电源(VCC3.3)有电的情况下, 二极管 D1 将会导通,而二极管 D2 则被截止,此时 CR1220 不给 VBAT 供电; 而当外部电源切断时,二极管 D2 将会导通,而二极管 D1 则会被截止,此时将 由 CR1220 给 VBAT 供电。这样,VBAT 在正常情况下总是通电的,从而不但确 保了 RTC 的走时,而且可以保证后备寄存器中的内容不会发生丢失等状况25。(3)图中的 R1 用来隔离 MCU 部分和外部的电源,这样的设计主要是考虑 后期的维修。当 3.3V 电源短路时,可以断开这个电阻来确定是 MCU 部分短路 还是 MCU 短路,有助于生产和维修。而且 R1 将模拟电源和数字电源隔离,减 少了数字电源对模拟电源的干扰。图中的模拟地与数字地之间采用电阻 R29 隔 离,主要是为了防止两者之间的干扰,0 欧姆的电阻可以有效限制回路中通过的 电流,使得电源噪声得到一定程度的抑制,从而有助于提高 A/D 转换的精度。(4)本文的 VREF+ 连接到 VDDA 上,即选用 3.3V 作为 ADC 的参考电压。193.2.2 复位电路图 3-3 复位电路本文的复位电路采用原始的阻容串联复位方式,能够达到设计要求,同时将 TFTLCD 的复位引脚也连接到 RESET 端,从而使得该复位按键不仅可以复位 MCU,而且也可以复位 TFTLCD。3.2.3 电源电路图 3-4 电源电路图中 VUSB 是来自于 USB 座 VCC 引脚的 5V 电源,经过 AMS1117-3.3 转换 为 3.3V 的电源。AMS1117 是一个正向低压降稳压器,在 1A 电流下压降为 1.2V, 这里选用 3.3V 固定输出版本,具有 1%的精度,其内部集成过热保护和限流保护, 以防环境温度造成过高的结温,正常工作的结温范围为-401252627。其中, 输出端连接的 220uF 的钽电容 C22 的目的在于确保 AMS1117 的工作稳定性,其它两个电容 C21 和 C23 用以滤波处理。当然,一个 USB 供电最多 500mA,且由于导线存在一定的阻值,供到板载 的电压一般都小于 5V,如果使用到多个负载外设,而且其功耗也很大,则建议 使用独立电源供电或者使用两个 USB 接口供电以保证充足供电,本文由于外设 相对较少,只设计了一个 USB 供电口,经测试能够达到实验要求。3.2.4 启动模式设置接口图 3-5 启动模式设置接口启动模式设置端口电路如上图所示。可根据下表配置不同的 BOOT0 和 BOOT1 的状态,从而选择不同的 STM32 启动方式,所对应的启动方式如表 3-1 所示。表 3-1 BOOT0、BOOT1 启动模式表BOOT0BOOT1启动模式说明0x用户闪存存储器用户闪存存储器,也就是 FLASH 启动10系统存储器系统存储器启动,用于串口下载11SRAM 启动SRAM 启动,用于 SRAM 中调试代码其中,BOOT0 和 BOOT1 用于设置 STM32 的启动方式。通常,若要使用串 口来下载代码,则须配置 BOOT0 为 1,BOOT1 为 0;而若想使得 STM32 在按 下复位按钮后便开始执行代码,则须配置 BOOT0 为 0,而 BOOT1 则可以随意 设置。为减少手动切换跳线帽带来的麻烦,本文将在 USB 转串口电路中设计一BOOT0 和 RST 信号的信号状态,而不需要手动切换它们的状态,即可直接通过 串口下载软件自动控制实现非常方便快捷的代码下载过程。3.3 模拟数据采集模块图 3-6 模拟数据采集电路利用图 3-6 所示电路来模拟实现 4 路数据采集检测工作,通过调节滑动变阻 器,便可得到不同的电压值,经 A/D 转化处理后,实现这一电压的实时显示, 若超出一定的范围,则控制报警电路向现场工作人员发出报警。3.4 TFTLCD 显示模块图中是一个通用的液晶显示模块接口,支持不同大小的 TFT_LCD 模块。 TFT_LCD 即薄膜晶体管液晶显示器,其矩阵不同于无源 TN_LCD、STN_LCD 等显示器,在它的液晶显示屏中的每一个象素点上,都会设置有一个薄膜晶体管(TFT),从而可以有效地克服非选通时所带来的串扰,这样就使得液晶显示屏 的静态特性与扫描线数无关,因此大大提高了图像的质量,从而使其在市场上得 到了人们的亲睐28。本文通过 STM32 的 FSMC 总线模拟 8080 并口时序来驱动 TFTLCD 模块,有助于提高 LCD 的刷屏速度,并且减少了直接使用 I/O 驱动方法可以使得数据显示的速度大大地提高,从而达到实时检测显示的目的。图 3-7 TFTLCD 显示模块接口图中的 T_MOSI/T_MISO/T_PEN/T_SCK/T_CS,主要用以实现对液晶屏的触 控(支持电阻屏和电容屏);LCD_BL 连接在 MCU 的 PA12 上,用于控制 LCD 的背光;液晶复位信号 RESET 采用硬复位方式,直接与 STM32 的 RESET 端相 连,和 MCU 共用一个复位电路。本文选用的是 2.8 寸的 TFTLCD 液晶模块,驱动芯片选择的是 ILI9341,该 液晶控制器自带显存,显存大小为 172800(240X320X18/8),即 18 位模式(26 万色)下的显存量。表 3-216 位数据与显存对应关系9341 总线MCU 数据D17D15D16D14D15D13D14D12D13D11D12NCD11D10D10D9D9D8LCD GRAMR4R3R2R1R0NCG5G4G39341 总线D8D7D6D5D4D3D2D1D0MCU 数据D7D6D5D4D3D2D1D0NCLCD GRAMG2G1G0B4B3B2B1B0NC本文选用的是 16 位的数据宽度,ILI9341 所采用的颜色数据的存储格式为之间的对照关系如表 3-2 所示。从表 3-2 中不难看出,ILI9341 在 16 位模式下,其 16 位数据线中对我们来 说有用的只有 D17D13 和 D11D1,而其中的 D0 和 D12 则并没有使用。这种 方式下,MCU 的 16 位数据中,以最低的 5 位来代表蓝色,以中间的 6 位来代表 绿色,而最高的 5 位则代表红色。RGB565 是常见的颜色标准,在 GRAM 的相应地址中只要写入想要输出的 颜色所对应的编码,就可以控制 LCD 输出对应颜色的像素点,从而实现在 LCD 指定像素点颜色输出的写入。如编码 0x0000 代表的是黑色,编码 0xFFFF 代表 的是白色,编码 0xF800 代表的是红色等。3.5 报警模块3.5.1 LED 显示电路图 3-8 LED 显示电路其中,LED-PWR 用作系统电源的指示灯,为蓝色;LED1 则为报警指示灯, 为红色,连接到 STM32 的 PB6 引脚上;LED2 则为 LCD 的工作指示灯,也可以 说是程序进入主程序指示灯,为绿色,接在 STM32 的 PB7 引脚。这里蓝色贴片 发光二极管的压降大约为 3V 左右,红色和绿色贴片发光二极管的压降则为 1.8V 左右,故选用 510R 的电阻用以限流,保证通过 LED 的电流低于其正常工作的输出低电平时,LED1 和 LED2 就会点亮,以实现相应的功能要求。3.5.2 蜂鸣器报警电路 报警电路采用的是有源蜂鸣器,有源蜂鸣器是指自带了震荡电路的蜂鸣器,这种蜂鸣器只要一接上电就会自动震荡发声,而如果是无源蜂鸣器,则需要外加 一定频率( 25KHZ)的音频输出信号,蜂鸣器才会发声。本文采用的是最常用 的蜂鸣器电路接法,如图 3-9 所示:图 3-9 蜂鸣器报警电路图中,Q1 用来扩大驱动电流,而 R16 则是一下拉电阻,主要是为了避免 MCU 在复位的时候,蜂鸣器可能发声的现象。BEEP 接在 MCU 的 PB5 引脚上, 当 PB5 输出高电平时,三极管 Q1 导通,蜂鸣器发声,该蜂鸣器与 LED1(红灯) 共同构成了报警电路,用于向用户发出报警信号,指示冷链工作状态出现异常。3.6 程序下载与调试接口设计3.6.1 USB 转串口USB 转串口,本文选用的芯片是 CH340G,芯片内置有 USB 上拉电阻,其 D+和 D-引脚直接连在 USB 座的 D+和 D-引脚上进行供电即可,而不需在外接其 他限流电阻,CH340 芯片还具有上电复位电路。CH340 芯片正常工作时需要在 外围电路连接一个 12MHZ 的晶振,同时也需要分别为 XI 和 XO 引脚各自对地 连接振荡电容,如图中 Y3、C19 和 C20 组成的时钟电路所示。CH340 芯片工作脚连接到外部的 5V 电源电压,此时必须使 V3 引脚连接 0.1uF 的电容 C16 以实 现电源退藕,从而保证 CH340 的正常驱动和工作2930。本文利用图中的左半侧构成了一键下载电路,在使用串口下载代码时,只需 要在下载软件 FLYMCU 中作如下设置:找到 CH340G 的串口;设置波特率,一 般不要设置的太高,容易造成下载失败;勾选中校验与编成后执行;切记不要勾 选选项字节去;然后选择使用 DTR 的低电平复位,RTS 高电平进 BootLoader ; 最后勾选编程前重装文件,完成了这些操作之后,点击开始编程,就可以实现对 代码的一键下载工作,而不需要手动切换跳线帽的位置和按 RESET 按钮了。图 3-10 USB 转 USART一键下载电路的具体实现过程是:首先,下载软件 FLYMCU 控制 DTR 输出 低电平,则 CH340 的 DTR#输出高电平,然后 RTS 置高,则会使得 CH340 的 RTS#输出低电平,使得三极管 Q3 导通,此时 BOOT0 将会被拉高,即实现了配 置 BOOT0 为 1,与此同时三极管 Q2 也将会导通,STM32 的复位引脚被拉低, 实现了复位。然后延时 100ms,FLYMCU 则控制 DTR 的状态为高电平,则 DTR# 输出的是低电平,而 RTS 继续维持高电平,则 RTS#仍为低电平,这时 STM32位过程结束,但是 BOOT0 仍会保持为 1,从而导致进入 ISP 模式,接着 FLYMCU 就可以开始连接 STM32 下载代码了,从而实现一键下载设置。在此过程中,只 需要用跳线帽将 BOOT0 和 BOOT1 与地相连即可,而不要手动设置 BOOT0 的 状态和按复位按键 RESET。程序下载完成之后,如果勾选了编程后执行,STM32 会被再次复位,此时 DTR#被设置为低,RTS#会被设置为高,这样三极管 Q2 和 Q3 就不会导通了,STM32 重新开始启动后,便会检测到 BOOT0 为 0,程序开 始执行,一键下载也就此完成了。USB_232 是一个 Mini USB 座,各引脚功能如表 3-3 所示,它不仅可以提供 CH340G 和计算机之间进行通信,而且也可以为板载供电,VUSB 就是来自电脑 USB 的 5V 电源。表 3-3 USB mini-B 型引脚功能引脚序号功能名典型电线颜色1VUSB红2D-白3D+绿4ID不用5GND黑3.6.2 JTAG/SWD 调试电路图 3-11 JTAG/SWD 调试接口这里使用标准的 JTAG 接法,即可以通过 JLINK 进行代码的下载和调试,但 STM32 还有 SWD 接口,SWD 模式只需要其中的 2 根线(即 JTAG 的 JTMS 和 JTCK)就可以下载并调试代码了,而且速度非常快,尤其是在高速下载情况 下,SWD 模式比 JTAG 下载会更加的可靠,而且在大量数据下载时 JTAG 容易 出现下载失败,因此推荐使用 SWD 来下载调试代码,不仅下载高速可靠,而且 减少了对 GPIO 口的占用,当然,所采用的调试器必须支持 SWD 模式。3.7 I/O 口资源分配表 3-4 I/O 口资源分配引脚GPIO连接资源连接关系说明23PA0ADC_CH1ADC 通道 1 输入引脚24PA1ADC_CH2ADC 通道 2 输入引脚25PA2ADC_CH3ADC 通道 3 输入引脚26PA3ADC_CH4ADC 通道 4 输入引脚68PA9TXDUSART1_TX,接 CH340G 的 RXD69PA10RXDUSART1_RX,接 CH340G 的 TXD35PA12LCD_BLTFT_LCD 接口背光控制脚91PB5BEEP接蜂鸣器92PB6LED1接 LED193PB7LED2接 LED231PD0FSMC_D2FSMC 总线数据线 D232PD1FSMC_D3FSMC 总线数据线 D355PD8FSMC_D13FSMC 总线数据线 D1356PD9FSMC_D14FSMC 总线数据线 D1457PD10FSMC_D15FSMC 总线数据线 D1558PD11FSMC_A16FSMC 总线地址线 A1661PD14FSMC_D0FSMC 总线数据线 D0续表 3-4引脚GPIO连接资源连接关系说明62PD15FSMC_D1FSMC 总线数据线 D138PE7FSMC_D4FSMC 总线数据线 D439PE8FSMC_D5FSMC 总线数据线 D540PE9FSMC_D6FSMC 总线数据线 D641PE10FSMC_D7FSMC 总线数据线 D742PE11FSMC_D8FSMC 总线数据线 D843PE12FSMC_D9FSMC 总线数据线 D944PE13FSMC_D10FSMC 总线数据线 D1045PE14FSMC_D11FSMC 总线数据线 D1146PE15FSMC_D12FSMC 总线数据线 D1235PD4FSMC_NOEFSMC 总线 NOE(RD)36PD5FSMC_NWEFSMC 总线 NWE(WR)38PD7FSMC_NE1FSMC 总线片选信号 1(CS)72PA13JTMSJTAG/SWD 仿真接口76PA14JTCKJTAG/SWD 仿真接口77PA15JTDIJTAG 仿真接口89PB3JTDOJTAG 仿真接口90PB4JTRSTJTAG 仿真接口294 超市冷链压力采集系统的软件设计4.1 系统软件设计概述本系统需要完成采集数据并处理、保存并显示数据、若超过报警值,则控制 报警三个基本工作。采用 STM32F103VCT6 作为主控单元31,利用其 ADC 完成 数据采集处理工作,并通过其 FSMC 驱动 TFTLCD 显示采集的结果,若采集的 结果超过报警值,则控制发出报警信号,系统的主流程图如图 4-1 所示。开始系统初始化:包括串口、delay、LED、BEEP、ADC、LCD读取采集数据并处理判断是否超过报警值NY发出报警信号LCD 显示个通道的采集数据图 4-1 系统软件主流程图4.2 STM32 的 ADC 数据采集4.2.1 STM32 的 ADC 介绍STM32 的 ADC 是一个逐次逼近式模/数转换器,12 位的分辨率,拥有的通 道多达 18 个,可以对 16 个外部信号源和 2 个内部信号源进行测量,ADC 引脚和输入通道关系如图 4-2 所示。各个通道的转换可以分单次、扫描、连续或间断 模式来执行,ADC 的转换结果可以采用左对齐或右对齐的方式保存在 16 位的数 据寄存器中3233。STM32 的 ADC 转换速率最大可以达到 1MHz,即转换时间为 1us(在 ADCCLK=14MHz,采样周期为 1.5 个 ADC 时钟下计算得到的),为保 证精度要求,ADC 的输入时钟必须小于 14MHz,否则将导致结果的准确度下降。STM32 将 ADC 的转换分为 2 个通道组:规则组和注入组。规则组通道相当 于正常执行的程序,而注入组通道相当于中断。A/D 转换的分组能够简化事件处 理的程序并提高事件处理的速度,广泛应用于工业领域中有很多检测和监视探头 需要快速处理的场合。本文利用 STM32 的 ADC 完成对模拟电压信号的数据采 集工作,那么对于 12 位分辨率的 ADC 来说, 可以分辨的最小模拟电压为 3.3/212=0.8mV,而实际采集过程中我们不仅注重采集的精度,而且也注重采集的 速度,也就是转换的速度,即转换时间的倒数,本文选择的逐次逼近型 ADC 属 于中速,能够满足设计需求。图 4-2 ADC 引脚和输入通道关系4.2.2 ADC 采集流程图开始配置 RCC/GPIO 等寄存器组配置 ADC寄存器组使能应校准 ADC1启动 A/D 转换转换完成NY获取转换结果4.2.3 ADC 转换程序设计图 4-3 ADC 采集流程图下面将介绍使用库函数来设定使用 ADC1 进行 A/D 转化34:(1)开启 PA 口以及 ADC1 的时钟,并且设置 PA0、PA1、PA2、PA3 为模 拟输入模式。(2)复位 ADC1,并设置 ADC1 的频率,配置 ADC1 的输入时钟,即设置 分频系数为 6,则 ADC 的时钟为 12MHzLCD_REG 的地址就是 0x6001FFFE,此时对应 A16 的状态为 0(即 RS=0);而 LCD-LCD_RAM 的地址就是 0x60010000(由于结构体地址自增), 对应 A16 的状态为 1(即 RS=1)。从而可以看出,LCD-LCD_REG=CMD;表示 向 LCD 写入命令;而 LCD-LCD_RAM=DATA;表示向 LCD 写数据;而读寄存 器或数据时也可以类似操作:CMD=LCD-LCD_REG;表示读取 LCD 的寄存器; DATA= LCD-LCD_RAM;表示读取 LCD 的数据。(2)LCD 重要参数集Typedef structu16 width; u16 height; u16 id;u8 dir;/横屏还是竖屏控制:0,竖屏;1,横屏 u16 wramcmd;u16 setxcmd; u16 setycmd;_lcd_dev;extern_lcd_devlcddev; /管理 LCD 的一些重要参数 本文定义该结构体的目的在于保存一些 TFTLCD 的重要参数信息,如 LCD的长度和宽度、LCD 的 ID 型号、LCD 的横竖屏状态等,虽然占用了存储器十几 字节的内存,但可以使得提供的驱动函数支持不同尺寸的 LCD,具有很大的灵39活性,并且可以实现对 LCD 横竖屏的状态进行自由切换等一些重要的功能。(3)LCD 初始化函数 LCD_InitLCD 初始化过程在前边 FSMC 驱动 TFTLCD 原理中已做介绍,对配置过程 作如下分析:该函数首先对 STM32 的 FSMC 总线相关 I/O 进行初始化,然后对 FSMC 进行初始化,最后依据所读得的 LCD ID 型号执行不同驱动器所对应的初 始化代码。(4)几个主要的显示函数LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2),此为画线函数,(x1,y1)和(x2,y2)分别为起点坐标和终点坐标。LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2),此为画矩形函数,其中(x1,y1)和(x2,y2)为矩形的对角坐标。LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p),此为显示字 符串函数,其中,(x,y)为起点坐标;width,height 为区域大小;size 为字体大 小; *p 为字符串起始地址。LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode),此为显示一串 数字的函数,其中,(x,y)为起点坐标;num 为数值;len 为长度(即要显示的 位数);size 为字体大小;mode,7:0,不填充;1,填充 0。6:1:保留。0:0, 非叠加显示;1,叠加显示。4.4 报警模块本文选用蜂鸣器与 LED 组成简单的报警装置,对 LED 和蜂鸣器的软件设计 相对简单,大致过程为:使能相应 I/O 的时钟初始化 I/O(设置为输出口,推挽 模式)配置 I/O 口电平,即可实现主程序调用初始化并控制 I/O 的状态,从而实 现报警。本文设置 LED2 用于显示程序进入主程序并正常运行,设置 LED1 与 BEEP 用于实现向用户发出报警信号,即当 A/D 采集的数据超过规定范围即控制 报警。4.5 主程序设计在完成上述子程序的编写之后,参考系统软件主流程图完成主程序的编写, 首先是对各模块子程序进行初始化,在完成初始化之后,接着对 LCD 显示界面进行一定的设置,如图 4-11 所示:图 4-11 TFTLCD 界面设置然后是调用函数 Get_Adc_Average(u8 ch,u8 times)不断获取通道 03 的转换 结果,并通过 TFTLCD 进行相应数值的显示。最后是判断所采集的电压值是否超过预设的报警范围,即判断采集所得的数 据是否超出 0.53.0V 这个范围,如若超出,则控制发出报警信号。5 超市冷链压力采集系统的测试5.1 系统测试结果在完成该系统的硬件焊接和软件编程后,经调试能正常实现信号的采集处 理、存储显示和报警工作,即完成了本次毕设的基本内容,接下来就具体调试过 程作如下分析,其中图 5-1 为整体实物图。图 5-1 整体实物图(1)数据采集模块:由于传感器采集部分条件的限制,本文以自行设计的 电路来模拟完成 4 路数据的采集工作,如图 5-2 所示。其实课题初衷是利用压力 传感器采集超市冷链不同位置的压力值,所选用的传感器输出的是 4-20mA 的电 流信号,需要设计信号调理电路将其转换为适当的电压信号才能通过 STM32 的 A/D 转换器完成数据采集,然而由于实验条件的限制,本文在设计过程中对此部 分做一省略,以自行设计的电路为检测对象。4 路模拟输出端接地端接 3.3 电源端电位器图 5-2 模拟数据采集端图 5-2 中所设计的电路通过主板 3.3V 电源进行供电,调试过程中只需要利 用螺丝刀旋转电位器即可得到不同的电压值,调节范围理论上是 03.3V,符合 STM32 的 ADC 采集输入电压范围。(2)主板调试:焊接完成后,首先利用万用表检测所有电路是否通畅,有 没有虚焊或短路的情况,然后供电检测每个模块是否能够正常工作,经检测修改 后能够实现功能要求,如图 5-3 所示。其中主要包括 STM32 单片最小系统部分、 程序下载与调试模块接口、LCD 模块接口以及报警指示模块,图中 USB 座可以 通过电脑为板载供电,经测试能够满足板载充分供电的需要。主板的具体调试过 程为:将 USB 座与电脑 USB 接口相连,打开电源开关,将会看见电源指示灯处 于点亮状态,表明板载供电正常;接下来可通过 JTAG 接口下载或调试程序,也 可利用 USB 串口来下载代码,由于本文设计了一键下载电路,在具体下载代码 过程中不需要切换启动模式设置接口 BOOT0 的状态和按复位按键,减少了一定 的工作量和不必要的麻烦,这对于下载调试过程有着很大的帮助;在完成下载程 序之后,如若看见右下侧的指示灯 1 点亮,则表明程序进入主程序,通过调节数 据采集模块电路中的电位器,则有可能会使得报警指示灯 2 点亮,且蜂鸣器发声 的现象,这表明所采集的电压值超过了预设的正常电压值范围,即完成了向现场 工作人员发出报警信号的作用。JTAG/SWD接口蜂鸣器TFTLCD 模块接口STM32F103VCT6AMS1117-3.3后备电池接口电源按键4 路模拟采集接口电源指示灯USB 转串口启动模式设置端复位按键USB 供电口CH340G指示灯 1指示灯 2图 5-3 主板资源(3)LCD 显示模块:本文选用的是 2.8 寸的液晶显示屏,具体操作就是, 将液晶显示屏与主板的 LCD 模块接口对插,然后,打开电源按键,由于上述已 经完成了代码的下载,将会看见 LCD 很快完成初始化过程,显示所预设的界面, 并对不断采集所得的数据进行显示,这是由于本文使用 STM32 的 FSMC 驱动 TFTLCD,所以刷屏的速度很快,足以满足实时性数据采集的要求。通过调节电 位器,可以看出 LCD 上的数据会跟着发生变化,当超出预设的正常范围,则会 控制发出报警。通过液晶显示屏,现场工作人员可以很清晰的获得某一通道的具 体压力参数,有助于他们对冷链的工作状态作出时刻的监管和及时的处理。液晶 显示屏的显示结果如图 5-4 所示,为了进一步分析所设计的数据采集系统的精度,主要是 STM32F1 的 ADC 的转换精度,利用外用表对数据采集模块输出的实际 电压值进行测量,并且与 LCD 显示屏所显示的结果进行简要的分析,如表 5-1 所示,可以看出,转换误差很小,能够满足实验要求。图 5-4 液晶显示屏表 5-1 数据采集结果通道 XLCD 显示电压值实测电压值误差通道 10.6260.6300.63%通道 21.0821.0880.55%通道 31.3921.4010.64%通道 41.8231.8350.65%5.2 测试结果分析从表 5-1 可以看出,STM32F1 的 ADC 精度确实很高,达到了预期的效果。 但在模数转换的应用中,ADC 的精度直接影响到整个系统的质量和效率,为后 续进一步学习,接下来就 ADC 的误差如何产生作如下了解:(1)ADC 模块自身相关的误差ADC 的精度主要与其分辨率和所采用的参考电压有关,ADC 模块自身相 关的误差主要有偏移误差、增益误差、微分线性误差、积分线性误差、总未调整 误差。(2)与环境条件相关的误差 环境相关的误差产生源主要有:电源噪声、模拟输入信号的噪声、模拟信号源阻抗的影响、注入电流的影响等。本文为提高 ADC 精度主要做了两方面的考虑:其一是硬件设计方面,在电 源线和地线之间连接了一个 0.1uF 的钽电容进行滤波处理来减小电源噪声,同时 ADC 使用独立的电源供电;其二是在软件设计方面,通过对一个模拟输入信号 进行多次采样和取平均值来消除模拟输入信号的噪声。当然,本文所采取的措施 还存在着很多的不足,有待于继续研究和深入。6 总结与展望根据毕设任务书要求,本文阐述了基于 STM32 的超市冷链压力采集系统的 下位机部分的整体设计与实现方法,从课题背景和意义、发展历程和发展趋势、 国内外研究现状,系统总体设计方案,系统硬件设计和软件设计等方面进行了较 为详细的阐述。本系统设计以 STM32F103VCT6 芯片作为主控单元,利用其 12 位的 ADC 完成了对 4 路模拟电压信号的采集处理,并将采集所得的数据通过 TFTLCD 进行显示,并且设置了报警装置,即当采集到的电压值超出了预设的范 围,则控制发出报警信号,便于现场工作人员对系统的工作状态进行实时的监管。 经过调试,完成了设计任务书要求的所有功能要求,满足一般性的数据采集系统 的需要。由于毕设完成时间有限,本文设计的只能说是完整的超市冷链压力采集系统 的一个子系统,课题还存有很大的延伸空间。在以后的学习中可以就完整的系统 做后续的深入研究和完善,一个完整的超市冷链压力采集系统应该由数据采集模 块数据汇转模块服务器客户端等组成,因此就可以采取团队合作的形式共 同开发与设计。参考文献1尚可(编译).数据采集系统J.航空电子技术,2011(2):55-56.2Joong-soo Lim, June SaKong, WonSeok Jeong, et al. Design of a High Speed Data Acquisition System with STM32C/ International Conference on Convergence Technology.3邓立为. 基于 ARM 的压力数据采集与控制系统D. 哈尔滨理工大学, 2010:1.4刘波文. ARM Cortex-M3 应用开发实例详解M. 电子工业出版社, 2011:9-15. 5Wang C, Wu Y, Yang K. Design of multi-channel data acquisition system based onSTM32C/ Communication Software and Networks (ICCSN), 2011 IEEE 3rd International Conference on. 2011:247-249.6李晋华, 邱春玲, 田地,等. 基于 CAN 总线数据采集系统的设计与实现J. 吉林大学学报:信息科学版, 2004, 22(2):134-137.7张庆海, 刘文凯, 张丽琴,等. 应用 MOVILOG 及 MOVISCOPE 诊断风机故障J. 设备管理与维修, 1993(3):20-218 陈丽萍, 李岑. 数据采集系统的发展与研究J. 电脑知识与技术, 2015, 11(17):4.9 王琳, 商周, 王学伟. 数据采集系统的发展与应用J. 电测与仪表, 2004,41(8):4-8.10吕西臣. 嵌入式数据采集系统中的关键技术研究D. 郑州大学, 2007:4.11 雷鸿. 基于 DSP 和以太网接口的高速实时信号采集系统设计D. 上海交通 大学, 2010:3.12章晓眉, 冯彦君. 基于 CPLD 的多通道数据采集系统J. 光电技术应用, 2011, 26(2):76-79.13胡肖斌. 多通道实时数据采集存储系统的设计与实现D. 中北大学, 2012:12.14Zhang Y, Dong H. Design of a seismic data acquisition system based on STM32 and LabVIEWJ. Application of Electronic Technique, 2012.15Hui-fu Zhang, Wei Kang. Design of the Data Acquisition System Based on STM32J. Procedia Computer Science, 2013, 17(Complete):222-228.16李宁. 基于 MDK 的 STM32 处理器开发应用M. 北京航空航天大学出版社,2008:4.17刘军. 例说 STM32M. 北京航空航天大学出版社, 2014:17-19.18Baker B, Baker B. A Bakers Dozen : Real Analog Solutions for Digital Designers/ B. Baker.J. Pm Network, 2007(December):131-138.19任骏原. 数字电子技术基础M. 清华大学出版社, 2013:506-545.20蒋立兵. 基于 STM32 的智能家居控制系统的设计与开发D. 北京邮电大学, 2011:38.21 赵圣飞. 基于 STM32 的数据采集存储系统的设计与实现D. 中北大学,2014:18.22STMicroelectronics.RM0008ReferencemanualSTM32F103xxadvanced ARM-based 32-bit MCUsEB/OL.23ST Microelectronics.数据手册 STM32F103xCEB/OL.24 意法半导体. STM32 中文参考手册. 第 10 版. 意法半导体(中国)投资公 司,2010:155-181.25李成, 李立伟, 张洪伟. 基于 STM32 单片机的数据记录装置设计J. 工业控 制计算机, 2013, 26(1):91-92.26Hu J L, Zeng S, Zhang Z. The Design of Wireless Data Acquisition System Based on STM32 and Virtual InstrumentC/ Wireless Communications, Networking and Mobile Computing (WiCOM), 2012 8th International Conference on. IEEE, 2012:1-4.27郝雯, 沈金鑫, 梅成. 基于 STM32 单片机的存储式数据采集系统设计J. 电子设计工程, 2013, 21(17):80-82.28汤莉莉, 黄伟. 基于 STM32 的 FSMC 接口驱动 TFT 彩屏设计J. 现代电子技 术, 2013(20):139-141.29南京沁恒电子有限公司.USB 总线转接芯片 CH340G. 4930 张开生, 周倩, 杨武. 单片机与嵌入式微处理器通用的程序烧写电路: CN103439901AP. 2013.31Gao Z Z, Zeng Q L, Li S G. Intelligent Vacuum-Pumping Detection Device Base on STM32MCUJ. Applied Mechanics & Materials, 2012, 190-191:1002-1005.32Sampling S C A. STM32 ChibiOS ADC SamplingJ.33文先仕. 基于 ARM Cortex-M3 的智能监控器的设计D. 西华大学, 2010:16. 34郑朋. 在 Cortex-M3 上实现基于C/OS-II 和 CAN 总线的实时数据采集系统D. 青岛大学, 2011:26.35/36Li G, Wang F. TFT Color Screen of RGB Interface Driver Based on STM32J.Microcontrollers & Embedded Systems, 2011,8:28-30.37梁文祯. 基于 STM32 的 TFT-LCD 检测系统的设计与实现J. 机电工程技术, 2011, 40(6):36-37.38刘军, 张洋, 严汉宇. 原子教你玩 STM32M. 北京航空航天大学出版社,2013:195-214.致谢白驹过隙,本科学习生涯即将结束,回首四年的学习生活时光,许多老师、 朋友都给予了我很多的帮助和支持,感谢你们的陪伴,使我在各方面都有了长足 的进步。首先,在此我由衷地感谢我的指导老师李慧敏副教授对我的支持和帮助,李 老师知识渊博,平易近人,在毕业设计及论文撰写的每一阶段都会给予我良好的 建议和悉心的指导,每当我遇到一些困难或者问题时,老师都会耐心地帮我解答, 并且不断地鼓励我敢于面对问题,经过一次次的闯关,我的毕业设计终于顺利完 成了,在此谨向李老师致以诚挚的谢意和崇高的敬意。在此期间,我不仅学到了 很多专业方面的新知识,而且提高了自己各方面的能力,这将对我今后的研究生 学习阶段起到一定的指导意义。其次,我要感谢研究生学长樊纪明、高奎、王冠等在我毕设过程中提供的帮 助,是你们带领我走进这个课题,帮助我逐步掌握课题并完成本次毕设,在此我 表示衷心的感谢。当然,我要感谢本科四年所有给予我帮助的老师,是你们的指 导为我本次毕设奠定了一定的基础,诸位恩施的教诲我将铭记在心。同时,我也 要感谢四年来在各方面帮助过的伙伴们,你们和我共同度过了美好的四年时光, 我会好好珍惜我们的友谊之树,愿其常绿。最后,我要特别感谢我的家人,是你们无私的奉献和一贯的支持,才使我有 信心不断追求自己的学习道路,接下来的研究生阶段更需要你们的支持与陪伴, 你们辛苦了,养育之恩,无以回报,我只能用自己的实际行动去回馈你们的寄托。附录程序(1)main.c#include led.h#include beep.h#include delay.h#include sys.h#include lcd.h#include usart.h#include adc.h int main(void)u16adcx;float adcx_0,adcx_1,adcx_2,adcx_3; float temp;delay_init();/延时函数初始化/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/设置中断优先级分组 为组 2:2 位抢占优先级,2 位响应优先级uart_init(115200);/串口初始化为 115200 LED_Init();/LED 端口初始化BEEP_Init();/BEEP 初始化LCD_Init();/LCD 初始化Adc_Init();/ADC 初始化LED2=!LED2;POINT_COLOR=RED;/设置字体为红色 LCD_ShowString(20,30,200,24,24,STM32-Design);LCD_ShowString(20,60,200,24,24,Data-Acquisition);POINT_COLOR=BLACK;/设置表格为黑色 LCD_DrawRectangle(20,92,220,293); LCD_DrawLine(20,143,220,143); LCD_DrawLine(20,193,220,193); LCD_DrawLine(20,243,220,243); LCD_DrawLine(65,92,65,293);/显示提示信息POINT_COLOR=MAGENTA;/设置字体为洋红色 LCD_ShowString(25,105,40,24,24,CH0); LCD_ShowString(25,156,40,24,24,CH1); LCD_ShowString(25,206,40,24,24,CH2); LCD_ShowString(25,256,40,24,24,CH3);POINT_COLOR=BLACK;/设置字体为蓝色LCD_ShowString(70,100,200,16,16,ADC_CH0_VAL:); LCD_ShowString(70,120,200,16,16,ADC_CH0_VOL:0.000V); LCD_ShowString(70,150,200,16,16,ADC_CH1_VAL:); LCD_ShowString(70,170,200,16,16,ADC_CH1_VOL:0.000V); LCD_ShowString(70,200,200,16,16,ADC_CH2_VAL:); LCD_ShowString(70,220,200,16,16,ADC_CH2_VOL:0.000V); LCD_ShowString(70,250,200,16,16,ADC_CH3_VAL:); LCD_ShowString(70,270,200,16,16,ADC_CH3_VOL:0.000V);while(1)/通道 0adcx=Get_Adc_Average(ADC_Channel_0,10);/得到通道 0 的值 POINT_COLOR=BLUE;LCD_ShowxNum(166,100,adcx,4,16,0);/显示 ADC 的值temp=(float)adcx*(3.3/4095);/得到电压值 adcx_0=temp;/判断用adcx=temp; POINT_COLOR=RED;LCD_ShowxNum(166,120,adcx,1,16,0);/显示电压值temp-=adcx; temp*=1000;LCD_ShowxNum(182,120,temp,3,16,0X80);/通道 1adcx=Get_Adc_Average(ADC_Channel_1,10);/得到通道 1 的值 POINT_COLOR=BLUE;LCD_ShowxNum(166,150,adcx,4,16,0);/显示 ADC 的值temp=(float)adcx*(3.3/4095); adcx_1=temp;/判断用 adcx=temp; POINT_COLOR=RED;LCD_ShowxNum(166,170,adcx,1,16,0);/显示电压值 temp-=adcx;temp*=1000; LCD_ShowxNum(182,170,temp,3,16,0X80);/通道 2adcx=Get_Adc_Average(ADC_Channel_2,10);/得到通道 2 的值 POINT_COLOR=BLUE;LCD_ShowxNum(166,200,adcx,4,16,0);/显示 ADC 的值temp=(float)adcx*(3.3/4095); adcx_2=temp;/判断用 adcx=temp; POINT_COLOR=RED;LCD_ShowxNum(166,220,adcx,1,16,0);/显示电压值 temp-=adcx;temp*=1000;LCD_ShowxNum(182,220,temp,3,16,0X80);/通道 3adcx=Get_Adc_Average(ADC_Channel_3,10);/得到通道 3 的值 POINT_COLOR=BLUE;LCD_ShowxNum(166,250,adcx,4,16,0);/显示 ADC 的值temp=(float)adcx*(3.3/4095); adcx_3=temp;/判断用 adcx=temp; POINT_COLOR=RED;LCD_ShowxNum(166,270,adcx,1,16,0);/显示电压值 temp-=adcx;temp*=1000; LCD_ShowxNum(182,270,temp,3,16,0X80);if(adcx_03.0)|(adcx_03.0)|(adcx_13.0)|(adcx_23.0)|(adcx_3PB.6 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/IO 口速度为 50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); /根据设定参数初始化 GPIOB.6 GPIO_SetBits(GPIOB,GPIO_Pin_6);/PB.6 输出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;/LED2-PB.7 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/IO 口速度为 50MHz GPIO_Init(GPIOB, &GPIO_InitStructure);/根据设定参数初始化 GPIOB.7 GPIO_SetBits(GPIOB,GPIO_Pin_7);/PB.7 输出高#ifndef BEEP_H#define BEEP_H#include sys.h/蜂鸣器端口定义#define BEEP PBout(5)/ BEEP,蜂鸣器接口 void BEEP_Init(void);/初始化#endif(5)beep.c#include beep.h/初始化 PB5 为输出口,并使能这个口的时钟/蜂鸣器初始化void BEEP_Init(void)GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/使能 GPIOB 端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;/BEEP-PB.5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/速度为 50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); /根据参数初始化 GPIOB.5 GPIO_ResetBits(GPIOB,GPIO_Pin_8);/输出 0,关闭蜂鸣器输出(6)adc.h#ifndef ADC_H#define ADC_H#include sys.h void Adc_Init(void);u16Get_Adc(u8 ch);#endif(7)adc.c#include adc.h#include delay.h/初始化 ADC,规则通道,开启通道 03 voidAdc_Init(void)ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;/使能 GPIOA 和 ADC1 通道时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE );ADC_DeInit(ADC1);/复位 ADC1RCC_ADCCLKConfig(RCC_PCLK2_Div6);/设置 ADC 分频因子 6 72M/6=12,ADC 最大时间不能超过 14M/PA 0-3 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚 GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC 工作模式:ADC1和 ADC2 工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE; /模数转换工作在单通道 模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;/模数转换工作在单 次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/转换 由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /ADC 数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; /顺序进行规则转换的 ADC 通道的 数目ADC_Init(ADC1, &ADC_InitStructure);/根据 ADC_InitStruct 中指定的参数初 始化外设 ADCx 的寄存器/使能 ADC1 并校准ADC_Cmd(ADC1, ENABLE);/使能指定的 ADC1 ADC_ResetCalibration(ADC1);/使能复位校准 while(ADC_GetResetCalibrationStatus(ADC1);/等待复位校准结束 ADC_StartCalibration(ADC1);/开启 AD 校准 while(ADC_GetCalibrationStatus(ADC1); /等待校准结束/获得 ADC 值/ch:通道值 03 u16 Get_Adc(u8 ch)/设置指定 ADC 的规则组通道,一个序列,采样时间 ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);/ADC1, ADC 通道,采样时间为 239.5 周期ADC_SoftwareStartConvCmd(ADC1, ENABLE);/使能指定的 ADC1 的软件转换 启动功能while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC );/等待转换结束return ADC_GetConversionValue(ADC1);/返回最近一次 ADC1 规则组的转换结果/取平均值u16 Get_Adc_Average(u8 ch,u8 times)u32 temp_val=0; u8 t;56for(t=0;ttimes;t+)temp_val+=Get_Adc(ch); delay_ms(5);return temp_val/times;(8)lcd.h#ifndef LCD_H#define LCD_H#include sys.h#include stdlib.h/LCD 重要参数集 typedef structu16 width;/LCD 宽度u16 height;/LCD 高度u16 id;/LCD IDu8dir;/横屏还是竖屏控制:0,竖屏;1,横屏。 u16 wramcmd;/开始写 gram 指令u16setxcmd;/设置 x 坐标指令 u16setycmd;/设置 y 坐标指令_lcd_dev;/LCD 参数extern _lcd_dev lcddev;/管理 LCD 重要参数/LCD 的画笔颜色和背景色extern u16POINT_COLOR;/默认红色extern u16BACK_COLOR; /背景颜色.默认为白色/-LCD 端口定义-#define LCD_LED PAout(12) /LCD 背光PA12/LCD 地址结构体 typedef structvu16 LCD_REG; vu16 LCD_RAM; LCD_TypeDef;/使用 NOR/SRAM 的 Bank1.sector1,地址位 HADDR27,26=00,A16 作为数据命 令区分线/设置时 STM32 内部会右移一位对齐#define LCD_BASE(u32)(0x60000000 | 0x0001FFFE)#define LCD(LCD_TypeDef *) LCD_BASE)/扫描方向定义#define L2R_U2D0/从左到右,从上到下#define L2R_D2U1/从左到右,从下到上#define R2L_U2D2/从右到左,从上到下#define R2L_D2U3/从右到左,从下到上#define U2D_L2R4/从上到下,从左到右#define U2D_R2L5/从上到下,从右到左#define D2U_L2R6/从下到上,从左到右#define D2U_R2L7/从下到上,从右到左#define DFT_SCAN_DIRL2R_U2D/默认的扫描方向/画笔颜色#define WHITE0xFFFF#define BLACK0x0000#define BLUE0x001F#define BRED0XF81F#define GRED0XFFE0#define GBLUE0X07FF#define MAGENTA0xF81F#define GREEN0x07E0#define CYAN0x7FFF#define YELLOW0xFFE0#define BROWN0XBC40 /棕色#define BRRED0XFC07 /棕红色#define GRAY0X8430 /灰色/GUI 颜色#define DARKBLUE0X01CF/深蓝色#define LIGHTBLUE0X7D7C/浅蓝色#define GRAYBLUE0X5458 /灰蓝色/以上三色为 PANEL 的颜色#define LIGHTGREEN0X841F /浅绿色/#define LIGHTGRAY0XEF5B /浅灰色(PANNEL)#define LGRAY0XC618 /浅灰色(PANNEL),窗体背景色#define LGRAYBLUE0XA651 /浅灰蓝色(中间层颜色)#define LBBLUE0X2B12 /浅棕蓝色(选择条目的反色) void LCD_Init(void);/初始化void LCD_DisplayOn(void);/开显示void LCD_DisplayOff(void);/关显示void LCD_Clear(u16 Color);/清屏void LCD_SetCursor(u16 Xpos, u16 Ypos);/设置光标 void LCD_DrawPoint(u16 x,u16 y);/画点 void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color); /快速画点 u16LCD_ReadPoint(u16 x,u16 y);/读点void LCD_Draw_Circle(u16 x0,u16 y0,u8 r);/画圆void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);/画线 void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); /画矩形void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color); /填充指定颜色 void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode); /显示一个字符 void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);/显示一个数字void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode);/显示一串 数字void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p); /显示一个 字符串,12/16 字体void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue); u16 LCD_ReadReg(u16 LCD_Reg);void LCD_WriteRAM_Prepare(void); void LCD_WriteRAM(u16 RGB_Code);void LCD_SSD_BackLightSet(u8 pwm);/SSD1963 背光控制void LCD_Scan_Dir(u8 dir);/设置屏扫描方向void LCD_Display_Dir(u8 dir);/设置屏幕显示方向void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height);/设置窗口/LCD 分辨率设置#define SSD_HOR_RESOLUTION800/LCD 水平分辨率#define SSD_VER_RESOLUTION/LCD 驱动参数设置
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于STM32的超市冷链压力采集系统
链接地址:https://www.renrendoc.com/p-13543194.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!