版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论1.1研究目的及意义传统晾衣架功能单一,无法实现全自动智能化现代化生活,不能满足人们快节奏生活的需求[1]。近年来,人们智能化需求越来越多,为实现远程智能收晾衣物,提出了智能晾衣架远程监控系统.该智能晾衣架在无人监督的情况下可实现自动收晾衣物。传感器控制的自动晾衣系统,随时控制晾衣系统的工作状态,让衣服充分晾晒。随着科技和智能化自动化的不断发展,多样性的只能设备在长期以来的发展中,为我们的生活提供了极大的便利,发挥出了突出的优势作用[2]。当前为了满足不同用户对于自动化,智能化生活系统的需求,并且令用户远程管理晾衣系统,远程控制的自动晾衣系统设计为我们提供了更多的空间,目前市场上的“智能”晾衣架只是增加了手动或电动升降功能,而智能晾衣架基本上都处于构想阶段,并且功能不够完善.基于网络远程与传感器双重控制的自动晾衣系统设计的提出,弥补了这一方面的不足。充分实现了自动化、智能化家居生活。自动化、智能化家居生活对于广大消费者而言具有非常重要的作用和影响[3]。随着人们对于自动化和智能化的认知和了解逐渐深入,越来越多的用户开始高度关注其重要性。晾衣架是一种家居用品,分手动、电动、户外、落地式四种,抛去古老的固定晾衣架与手摇式升降晾衣架,自动晾衣架衣操作方便,功能齐全,外观美观实在是上上之选。虽然自动晾衣架价格比固定晾衣架、手摇式升降晾衣架要稍稍贵一些,但是也在消费者能接受的范围内。近10年时间内,晾衣架产品已经发生了翻天覆地的变化[4]。晾衣架不再仅仅是一个装饰品,更是一个功能性的产品。在智能化家居成为新时代必然趋势的当下,自动晾衣架厂家抓准了人们消费观念向品牌化、高档化、简易化发展的契机,全心投入到智能自动晾衣架的研发生产中。高档智能晾衣架集无线遥控、集成照明、快速风干、智能烘干、光波杀菌、蓝牙音乐、空气净化等功能于一体,满足了消费者个性化需求。1.2国内外研究现状自动化、智能化家居生活对于广大消费者而言具有非常重要的作用和影响[5]。当前随着人们对于自动化,智能化的认知和了解程度不断加深,其重要性赢得了广大用户的一致关注。2021年,苗玉刚,何玉辉,李云在《自动折叠式太阳能板的设计》中:针对目前太阳能板不能自动折叠和清洁,容易受恶劣天气影响等问题,设计了一种自动折叠式太阳能板[6]。2021年,郑晓茜,邵帅飞在《基于ZigBee的温室大棚环境远程监控系统设计》中设计了一种温室大棚环境的远程监控系统,系统采用ZigBee网络对大棚内环境参数进行实时监测,通过通信卫星或5G传输网传输至服务器,以使服务器对目标温室大棚环境进行监控.可以实现对目标温室大棚环境的有效维护[7]。2021年,任远林,徐奇在《基于嵌入式单片机的智能家居远程控制系统设计》中设计了一种基于嵌入式单片机的智能家居远程控制系统,统具有较好的输出稳定性和较高的控制精度。引入智能家居远程控制技术,可以提高家居信息化管理和人工智能化水平,有助于改善人们的生活方式,提高智慧化生活水平,故对相关的智能家居远程控制系统设计方法进行研究具有广泛的应用价值[8]。2021年,郭铭,王佳佳《基于STM32的智能家居湿度控制系统》开发了一款基于STM32芯片的智能家居湿度控制系统,该系统能够有效地满足预定的目标和功能需求[9]。2018年,Moss发表了《Intelligentwashingsystem》,设计了一套智能晾衣系统[10]。该系统通过搭载的温度、湿度、风速、光照传感器自动感知室外温度、湿度、风力和关照强弱的变化,自动控制晾衣架伸出窗外或收回室内,具有反应灵敏、操作简单、安全可靠、适合老旧小区改造及新小区统一加装的特点。2019年,Tomas发表了《Intelligentclothes-horsedesign》,通过对智能晾衣架进行深入研究,采用AT89S51单片机作为主控制器,并借助直流减速电动机实现晾衣架的移动[11]。在手动模式下,使用遥控器对晾衣架进行控制;而在自动模式下,利用DHT11传感器检测湿度,智能感应天气湿度情况。当空气中相对湿度超过设定值时,系统会向电机发送脉冲信号,使晾衣架自动收回。同时,光敏电阻用于检测光线变化,当光线达到设定值时,晾衣架也会自动收回,从而实现晾衣架的智能控制。2020年,James发表了《Designofanewtypeofintelligenttelescopicdryingracks》,为了解决传统晾衣架存在的通风效果差、光线不足、无法实时感知天气变化以及智能化水平低等缺点,研发了一款基于STC89C52单片机作为主控芯片、搭载DHT11温湿度传感器、BH1750FVI光敏传感器、TCG-FS风速传感器的户外智能晾衣架,可以根据天气变化智能地调整晾晒衣物的方式[12]。综合国内外发展情况不难看出,现在国内外已经逐渐适应了智能化现代化的生活家居设备,本系统的优势在于可查看晾晒衣物湿度、外界光照强度历史情况,并能够实现检测后不需要人为干预,自动进行操作。节省了大量人力资源,方便人们生活[13]。1.3研究内容本系统旨在设计一个远程智能晾衣架,包括湿度传感器、光照传感器、上位机和核心单片机等组成。温湿度传感器用于检测温湿度,并将数据传递给单片机,当温湿度超标时,单片机控制舵机启动。光照传感器则用于检测光照强度,并将数据传递给单片机,当光照强度低于设定阈值时,舵机启动。上位机通过控制舵机实现远程一键收回衣物。通过这种远程智能晾衣架的设计,可以实现无人操控和远距离收回衣物,解决了衣物收回不及时的问题,从而实现智能化的生活方式。图1-1系统结构框图该系统的主要功能包括:1上位机通过HC-05与下位机进行通信;2下位机装有实时湿度传感器,实时检测并发送湿度数据给上位机;3下位机可以实时监测光照强度,并将数据发送给上位机;4当温湿度数值异常时,单片机控制舵机启动;5当外界光照强度低于设定阈值时,单片机控制舵机启动;6系统支持语音控制进行衣物的收放,并能够监测雨量情况,实现烘干功能。
第2章系统总体结构2.1设计方案硬件以湿度传感器、光照传感器、上位机、核心单片组成传感器主要应用了湿度传感器、光照传感器等本次设计是在STM32的基础上研究开发的一款远程智能晾衣架设计[14]。通过STM32单片机集合各个感应模块运算,从而做出反应。通过传感器实时监测周围环境状况是否存在下雨,光线弱的情况,如果有就会反馈给单片机。反馈给单片机通过上机位呈现出来,通过舵机自动收回衣物;从上机位还有一个独立按钮控制舵机,可供手动控制。2.2功能需求分析2.2.1技术要求 1硬件部分需要单片机STM32F103C8T6、湿度传感器、光敏电阻、舵机、蓝牙远程模块 2软件平台程序用keil5; 3画原理图用AD; 4编程语言用C语言; 5湿度、光照检测信号显示用手机APP查看;2.2.2实现结果通过系统的布设和完善,预期远程智能晾衣架将实现以下成果:1上位机通过HC-05与下位机进行通信;2上位机可接收下位机传送的数据并存入数据库,并实时显示;3上位机可查看温湿度和光照的历史情况;4下位机装有湿度传感器,实时检测温湿度数据并发送给上位机;5当温湿度低于设定阈值时,舵机自动打开,将晾出的衣服收回;6下位机可以实时监测外界光照强度;7当外界光照强度相差超过设定阈值时,舵机打开,将晾出的衣服收回;8系统支持烘干功能,可以通过语音控制进行衣物的收放;9系统可以监测雨水情况,并做出相应的处理。2.3总体方案设计1、理论知识准备阶段:深入理解设计课题,仔细研究相关内容,掌握与课题相关的知识;2、系统模块确定阶段:明确系统各个模块,并理清它们之间的关系,收集相关的软硬件资料;3、课题规划阶段:规划系统的组成结构,绘制大体系统框架,并提出原理框图;4、硬件电路设计阶段:利用软件完成硬件电路设计,并绘制各部分电路图,将系统部件通过接口电路集成,绘制电路图;5、软件设计阶段:根据系统控制过程,完成软件设计部分,绘制主流程图;6、模拟仿真阶段:对系统进行模拟仿真,检查系统是否能够按要求实现控制功能;7、论文整理阶段:整理课题相关的论文,准备最终的文献资料。2.4单片机型号选择STM32系列单片机是一款高性能,功能强大的系列单片机[15]。该系列单片机常被用于要求低成本、高性能和低功耗的嵌入式应用程序,其在功耗和集成方面也展现出良好的性能。由于其便捷的工具和简单的结构并且结合了强大的功能性,在业界很受欢迎。最小系统如图2-1。图2-1单片机最小系统原理图复位电路:包括复位按钮和复位电路,用于在需要时将STM32单片机复位到初始状态。复位按钮通过连接到单片机的复位引脚,当按下按钮时,会将复位引脚拉低,触发单片机复位[16]。晶振电路:用于提供STM32单片机的时钟信号,通常包括一个晶体振荡器和两个稳压电容。晶体振荡器的频率需要根据单片机的时钟要求进行选择,并通过连接到单片机的时钟引脚来提供系统时钟。电源电路:包括供电电源和电源滤波电路,用于为STM32单片机提供稳定的电源电压。通常使用稳压器或者电源模块来将输入电压稳定为单片机需要的工作电压,并通过滤波电路来去除电源中的噪声和干扰。本设计采用的主控芯片为STM32F103C8T6,该芯片是一款由STMicroelectronics公司生产的32位ARMCortex-M3内核的微控制器芯片,是STM32系列中的一员。内核:STM32F103C8T6采用ARMCortex-M3内核,运行频率可达72MHz,具有高性能和低功耗特性。存储器:STM32F103C8T6具有64KB的Flash存储器和20KB的RAM存储器,可用于存储应用程序代码和数据。输入/输出(I/O):STM32F103C8T6提供多达37个通用输入/输出引脚(GPIO),可用于连接外部设备和传感器。通信接口:STM32F103C8T6支持多种通信接口,包括USART、SPI、I2C等,可用于与其他设备进行串行通信或并行通信[17]。定时器:STM32F103C8T6内置多个定时器,包括通用定时器(TIM)和高级定时器(TIM),可用于实现各种定时和计数功能。ADC:STM32F103C8T6内置12位模数转换器(ADC),可用于模拟信号的数字化转换。中断控制器:STM32F103C8T6具有灵活的中断控制器,可用于处理外部中断和内部异常。电源管理:STM32F103C8T6具有多种低功耗模式,可用于优化功耗,并支持多种电源管理功能,如电源监测、低电压检测等[18]。调试和编程:STM32F103C8T6支持多种调试和编程接口,包括SWD(SerialWireDebug)和JTAG(JointTestActionGroup),方便开发和调试。
第3章系统的硬件部分设计3.1系统总体设计硬件以湿度传感器、光照传感器、上位机、核心单片组成传感器主要应用了湿度传感器、光照传感器等本次设计是在STM32的基础上研究开发的一款远程智能晾衣架设计。通过STM32单片机集合各个感应模块运算,从而做出反应。通过传感器实时监测周围环境状况是否存在下雨,光线弱的情况,如果有就会反馈给单片机。反馈给单片机通过上机位呈现出来,通过舵机自动收回衣物;从上机位还有一个独立按钮控制舵机,可供手动控制。该系统完成的主要功能有:1上位机通过HC-05与下位机进行通信;2上位机可接受下位机传送的数据存入数据库,并实时显示;3上位机可查看湿度、光照历史情况4下位机装有湿度传感器,实时检测浓度并发送上位机;5湿度低于所设阈值,自动打开舵机;6下位机可以实时外界光照强度;7当外界光照强度相差超过上位机设定阈值时,打开舵机8可以进行烘干,语音播报,雨水监测等功能。总体原理图如下所示:图3-1总体原理图3.2系统的主要功能模块设计3.2.1DHT11温湿度传感器模块设计DHT11是一款常见的数字温湿度传感器,常用于测量环境中的温度和湿度[19]。工作原理:DHT11采用单总线数字信号传输方式,通过内部的温湿度传感器测量环境中的温度和湿度,并将测量结果以数字信号的形式输出。模块参数:1.测量范围:DHT11的温度测量范围为0°C到50°C,湿度测量范围为20%RH到90%RH。2.精度:DHT11的温度测量精度为±2°C,湿度测量精度为±5%RH。3.供电电压:DHT11的供电电压为3V到5.5V,可以通过单一的数字引脚进行供电。输出信号:DHT11的输出信号为数字信号,采用单总线通讯方式,可以通过微处理器的GPIO引脚进行读取。应用:DHT11广泛应用于各种温湿度监测和控制系统,如室内气候监测、智能家居、农业温湿度监测等。图3-2DHT11温湿度传感器原理图3.2.2蓝牙模组模块设计蓝牙模块,采用的是HC-05是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,按功能分为蓝牙数据模块和蓝牙语音模块。蓝牙模块是指集成蓝牙功能的芯片基本电路集合,用于无线网络通讯,大致可分为三大类型:传输模块、蓝牙音频模块、蓝牙音频+数据二合一模块等等。一般模块具有半成品的属性,是在芯片的基础上进行过加工,以使后续应用更为简单[20]。蓝牙设备采用无线电波连接手机和计算机。蓝牙产品含有一块儿小小蓝牙模块及其支撑联接的蓝牙无线电和软件。当两个蓝牙设备要想互相沟通时,他们需要进行配对。蓝牙设备相互间的通信在短程(被称作微微网,指设备采用蓝牙技术联接而成的网络)的临时性网络中进行。这类网络可容下两至8台设备进行联接。当网络环境创建完成,1台设备作为主设备,而很多其他设备作为从设备。强禾科技在蓝牙设备添加和离去无线电短程传感时动态、自动创建。伴随着近些年蓝牙技术的飞速发展,在功耗不断的降低的现状下,蓝牙的传输速率也不断得到了提升,使蓝牙的运用范围更为普遍。但若要设计构思一种完整的蓝牙系统,就一定要全面熟练掌握蓝牙的有关技术专业知识。蓝牙模块可以进行串口(SPI、IIC)和MCU控制设备进行数据传输。蓝牙模块可以作为主机和从机。主机便是可以搜索其他蓝牙模块并自动创建联接,从机则不可以自动创建联接,只可以等其他人联接自身。如图3-3蓝牙模组原理图。图3-3蓝牙模组原理图3.2.3舵机模块设计舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。本文采用的180°舵机,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。SG90舵机是一种小型伺服舵机,主要由外壳、板、驱动马达、减速器和位置检测元件构成。其工作原理是通过接收机发出信号给舵机,经过电路板上的IC驱动无核心马达开始转动,通过减速齿轮将动力传递到摆臂,同时由位置检测器送回信号,判断是否已经到达定位。位置检测器实际上是可变电阻,当舵机转动时电阻值也会随之改变,通过检测电阻值就可以知道转动的角度[21]。SG90舵机的驱动马达采用细铜线缠绕在三极转子上,当电流流经线圈时会产生磁场,与转子外围的磁铁产生排斥作用,从而产生转动的作用力。为了提高转速和降低能耗,SG90舵机采用了空心杯马达设计,将细铜线缠绕成极薄的中空圆柱体,并将磁铁置于圆柱体内,使得转子重量轻,转动快速。SG90舵机具有防水和防尘设计,适合不同的工作环境。同时,舵机的齿轮有塑胶和金属之分,金属齿轮的舵机一般具有大扭力和高速型的特点,齿轮不会因负载过大而崩牙。SG90舵机广泛应用于模型、机器人、遥控车辆等领域,用于控制舵机的转动角度和位置,实现精确的控制和动作。图3-4舵机原理图3.2.4风速传感器模块设计风速传感器主要采用的是优质铝合金型材,在表面进行电镀喷塑处理,它具有良好的防侵蚀,抗腐蚀特点,可以有效的保证长期使用的仪表不起锈,同时配合内部顺滑的轴承系统一起使用,确保了采集信息的准确性。本系统采用的是485型风速传感器,它是一种性能优越、可靠性高的智能仪器仪表,广泛应用于温室、环保、气象站、养殖等场所的风速测量。风速传感器有很多种分类,主要可以分为皮托管式风速传感器、螺旋桨风速传感器、霍耳效应电磁风速传感器、热线式风速传感器以及超声波风速传感器等。超声波风速传感器主要是利用超声波时差法来实现风速的测量,声音在空气中的传播速度,会和风向上的气流速度叠加。若超声波的传播方向与风向相同,它的速度会加快;反之,它的速度会变慢。因此,在固定的检测条件下,超声波在空气中传播的速度可以和风速函数对应。通过计算即可得到精确的风速和风向。用于风速测量的最广泛使用的风速计是转杯式电动风速计。旋转风杯驱动发电机。发电机的输出运行一个在风速中校准的电表。三杯风速计目前被用作风资源评估研究和实践的行业标准。杯型风速计由安装在水平臂上的3或4个半球形杯组成,这些杯安装在垂直轴上。在任何水平方向通过杯子的气流以大致与风速成比例的速度转动轴。因此,在设定的时间间隔内计算轴的转数会产生一个与速度范围内的平均风速成比例的值。原理图如下图。图3-5风速传感器原理图3.2.5光敏电阻模块设计图3-6光敏电阻原理图光敏电阻(Photoresistor)是一种能够根据光照强度变化而改变电阻值的电子元件。它通常由半导体材料制成,其电阻值在光照强度变化时呈现显著的非线性特性。原理:光敏电阻的工作原理基于光生电效应,即光照射到半导体材料上时,会生成电子-空穴对,从而改变材料的电导性能,进而改变电阻值。结构:光敏电阻通常由半导体材料制成,其中最常见的材料包括硫化镉(CdS)和硫化锌(ZnS)。它们通常被包裹在透明或半透明的外壳内,以保护半导体材料不受外部环境的影响。特性:光敏电阻的电阻值通常在光照强度较强时较低,而在光照强度较弱时较高。这种特性使得光敏电阻在光照传感、光控制、光测量等领域得到广泛应用。应用:光敏电阻广泛应用于许多领域,包括照明控制、摄像头自动调光、光敏安全警报、光敏开关、光敏传感器、光照度测量等。它们在自动化控制、电子设备、照明系统、安防系统等方面起着重要的作用。注意事项:在使用光敏电阻时,需注意光照强度范围、光敏电阻的电压和电流限制、温度影响、光敏电阻的灵敏度、光敏电阻的寿命等因素,以确保其正常工作和准确测量。3.2.6HDR-F-2.54语音模块设计HDR(高速数据传输技术)是面向CDMA(码分多址)的一种高速无线接入技术,用于满足高速数据通信需求。它是第三代(3G)移动电话IMT-2000无线存取方式中CDMA阵营提出的一种方式,由美国高通公司在1999年底正式亮相。HDR技术已经在2000年9月份完成了技术规范,并于2002年开始商用。HDR被认为成本低、功能强大,适用于多种固定和移动通信设备,包括移动电话、手持计算机、笔记本电脑无线调制解调器等,支持互联网通信协议,传输率高达2.4Mbps。图3-7语音模块原理图3.2.7雨量传感器模块设计雨量传感器适用于气象台(站)、水文站、农林、国防等有关部门用来遥测液体降水量、降水强度、降水起止时间。用于防洪、供水调度、电站水库水情管理为目的水文自动测报系统、自动野外测报站,为降水测量传感器。图3-8雨量传感器模块原理图系统的软件设计4.1软件主流程图当全部系统软件通电时,首先进行的是单片机的初始化,成功后下位机中的温湿度检测控制模块和风速传感器模块通过收集现阶段环境的温湿度和风速,在精确测量环境的温度、环境的湿度和环境种的风速后,数据采集模块将传输数据到主控制板。控制器依据读取到的温湿度风速数据信息和控制参数作出分辨。假如当场检测获得的温湿度主要参数在系统要求范畴内,则回到温湿度检测控制模块再次下一轮检测。假如检测到现阶段环境中的温度和温度超出控制参数,便会运行相对应的机器设备,依照预置的操控方式,舵机对其做出相对应的操作。如图所示。图4-1主流程图4.2温湿度采集模块的软件设计当单片机初始化完成后,DHT11温湿度传感器会对周围的温度和湿度进行采集并形成一个参数来表示温度及湿度,若此数据在设定的范围内,则触发接下来的程序操作;若不在范围内,则可选择改变周围环境后重新采集。图4-2DHT11原理图4.3光敏电阻模块的软件设计光敏电阻模块对环境光强最敏感,一般用来检测周围环境的亮度和光强。当单片机初始化完成后,光敏电阻会对周围的光照进行采集并形成一个参数来表示光照强度,若此数据在设定的范围内,结合温湿度传感器采集的数据,通过单片机对舵机做出指令;若不在范围内,则可选择改变周围环境后重新采集。流程图如下。图4-3光敏电阻流程图4.4风速传感器的软件设计传感器的VCC和Vin引脚由升压转换器模块的输出提供7.5V。当单片机初始化完成后,风速会被周围的风速影响而发生转动,通过对风速传感器转动的幅度进行分析。传感器会形成一个参数来表示风速,若此数据在设定的范围内,则触发接下来的翻蛋操作;若不在范围内,则可选择改变周围环境后重新采集。实现其功能的流程图如下。图4-4风速传感器流程图4.5蓝牙模块软件设计HC-05是一个蓝牙模块,连接到微控制器的串行端口,允许微控制器通过蓝牙连接与其他设备通信。模块本身可以在主模式和从模式下运行,并且可以用于各种应用,例如,智能家居应用,远程控制,数据记录应用,机器人,监控系统等。该模块随时可用作完成的分线板(以及没有分线板),通过标准串行连接连接到现有项目。当全部系统软件通电时,首先进行的是单片机的初始化,然后通过蓝牙模块HC-05进行上位机与单片机直接的通信,流程如图所示。图4-5蓝牙模块流程图4.6舵机模块软件设计首先开始单片机的初始化,初始化完成后单片机进行设定的程序运行,当各个传感器采集的数据达到异常时时,舵机开始运行,将衣服进行收回。图4-6舵机模块流程图4.7雨量传感器模块软件设计首先开始单片机的初始化,初始化完成后单片机进行设定的程序运行,当雨量传感器采集的数据达到要求时,舵机开始运行,将衣服进行收回。图4-7雨量传感器模块软件设计4.8HDR-F-2.54语音模块软件设计首先开始单片机的初始化,初始化完成后单片机进行设定的程序运行,采集的数据会进行语音的播报。图4-8语音模块软件设计第5章系统测试5.1系统实物图图5-1系统完整实物图5.2测试原理图5-2如图5-2为蓝牙模块,实现上位机与下位机之间的实时通信。图5-3如图5-3为温湿度传感器,实时监测温湿度情况,当检测的数据异常时,收回晾出的衣服。图5-4如图5-4为光照检测模块,通过光敏电阻来监测光照强度,当采集的光照强度数据异常时,收回晾出的衣服。图5-5如图5-5位风速传感器,实时监测当前风速,当超过阈值时,收回晾出的衣服。图5-6如图5-6为舵机模块,用来模拟晾出和收回衣服,反转半周围晾出衣服,正转半轴为收回衣服。图5-7如图5-7为继电器模块,通过该模块模拟烘干机工作。图5-8如图5-8为雨水传感器模块,通过该模块检测雨水。图5-9如图5-9为语音模块,通过该模块可以实现语音控制播报。图5-10如图5-10为上位机端手机界面,连接蓝牙后,实时显示当前蓝牙状态、系统时间、温度、亮度、风速、是否在晾衣服、烘干状态和是否下雨等数据,且与下位机的数据一致;可以设置温度、亮度和风速阈值,当检测的数据超过阈值时,自动收回衣服。语音控制烘干关闭和晾衣架打开收回。5.3晾出和收回功能测试图5-11晾出图5-12收回如图所示,在图5-11中,可以看到显示的是1,表明我们的衣服已经处在了晾出的效果上。在图5-12中,可以看到显示的是0,这表明了我们的衣服已经收回,实现了通过控制温湿度、亮度、风速等阈值来控制我们晾衣架实现自动收回和晾出。第6章总结与展望6.1总结在系统软件的调试过程中,并不是一帆风顺,出现了一些错误。但是在老师的指导下,发现了这些问题的所在及时的做出了修正,问题的所在主要包括了以下层面。焊接问题,在组装这些元件焊接到电路板的时候,焊接技术不足,焊接的效果不理想,需要多次重新焊接。仿真过程,在仿真过程中,出现一些代码错误的问题,自己很难看出,通过老师的指正,及时做出了修改。6.2展望随着科技的不断发展和人们生活水平的提高,远程智能晾衣架作为一种现代化的家居设备,在未来有着广阔的应用前景。本文在基于单片机的远程智能晾衣架的设计和实现方面取得了一定的研究成果,但仍存在一些潜在的改进和发展空间。未来可以进一步提升智能晾衣架的智能化水平。目前,晾衣架主要依赖传感器和单片机实现对风速、温度等环境参数的检测和控制,但仍有进一步改进的空间。例如,可以引入更多的传感器,如湿度传感器、光照传感器等,实现对衣物状态和环境条件的更加精准的监测和控制,从而提供更加智能化的晾衣体验。同时,可以借助人工智能技术,通过学习用户的使用习惯和衣物的属性,自动优化晾衣架的工作模式,提供个性化的晾衣解决方案。基于单片机的远程智能晾衣架在未来有着广阔的应用前景。通过进一步提升智能化水平、拓展远程控制功能、优化设计和材料选用、推广应用范围、优化能源消耗以及与其他智能家居设备的联动和互联网家居的整合,智能晾衣架将会更加智能化、便捷化、环保化,并为用户提供更加舒适和便利的晾衣体验。随着科技的不断创新和发展,智能晾衣架将在未来不断演进,为人们的生活带来更多的便利和舒适。
参考文献[1]闫虹润.一种用于交通运输管理的监控摄像头[J].:,CN210440931U[P].2020.郑晓茜,邵帅飞.温室大棚环境远程监控系统[J].南方论坛10.3969/j.issn.1672-3872.2021.19.007[2]郭铭,王佳佳.基于STM32智能家居湿度控制系统[J].内蒙古科技与经济1007—6921(2021)24—0081—03[3]王莉,王宏涛.基于物联网的实验室温度远程监控系统设计[J].电子制作,2020(13):10-12..[4]郑艳森,骆旭坤.基于MQTT的智能晾衣架远程监控系统[J].2020[5]任森伟,朱丽军,李晨浩,薛梦娇,杨立娜.基于远程监控的智能晾衣架实验系统研制[J].科学技术创新2021.[6]苗玉刚,何玉辉,李云自动折叠式太阳能板的设计[J].2020[7]陈林奎,徐鹤.基于NB-IoT的课堂管理系统设计[J].计算机技术与发展,2020.[8]郑艳森,骆旭坤.基于MQTT的智能晾衣架远程监控系统[J].泉州师范学院学报,2020,38(02):78-83.[9]刘伟,杨中良,朱思言,潘露露.基于网络远程控制的自动晾衣系统设计[J].周口师范学院学报,2016,33(05):75-77.[10]何永晟.智能晾衣架设计[J].科技资讯,2022,20(18):70-73.[11]吴静怡,沈怀斌.智能晾衣架[J].发明与创新(高中生),2021(12):22-25.[12]陈鹏,李阳军.智能晾衣架的设计与实现[J].电子世界,2021(17):166-167.DOI:10.19353/ki.dzsj.2021.17.067.[13]冯少鹏,方静池.一种智能晾衣架的创新设计[J].技术与市场,2020,27(05):41-42.[14]谢浩源,郑建晓,李志宏.基于STM32的智能晾衣架控制系统设计[J].南方农机,2020,51(07):91-92+95.[15]张宇,汤志鹏,袁志刚,顾秋宇,靳敏.智能晾衣系统[J].内江科技,2022,43(12):56-57.[16]许冬雪,魏芳,邢春晓,侯跃达,张议心,何士海.一种新型智能伸缩晾晒衣架的设计[J].新疆农机化,2022(04):17-19.[17]CaoWang,QiqiMei,LinglingZeng.TheWarehouseTemperatureandHumidityMeasurementandControlSystemBasedonSCMJ.JournalofResearchinScienceandEngineering,2020,2(6).[18]N.NursultanovW.J.B.HeffernanM.J.WM.RvanHerel,J.J.Nijdam.ComputationalcalculationoftemperatureandelectricalresistancetocontrolJouleheatingofgreenPinusradiatalogsJAppliedThermalEngineering,2019159.[19]MinCheng,JunhuiZhang,BingXuRuqiDing,GengYang.Anti-windupschemeoftheelectronicloadsensingpumpviaswitchedflow/powercontrol[].Mechatronics,2019.[20]MilesL.MorganDanJ.Curtis,DavideDeganello.Controlofmorphologicalandelectricalpropertiesofflexographicprintedelectronicsthroughtailoredinkrheology[1].OrganicElectronics,2019.[21]A.G.Madureira,J.A.PeçasLopes.Ancillaryservicesmarketframeworkforvoltagecontrolindistributionnetworkswithmicrogrids[J].ElectricPowerSystemsResearch,2012,86件,2021,42(08):153-155.
附录源代码#include"dht11.h"#include"delay.h"u8temperature,humidity;//复位DHT11voidDHT11_Rst(void) { DHT11_IO_OUT(); //SETOUTPUT DHT11_DQ_OUT=0; //拉低DQ delay_ms(20); //拉低至少18ms DHT11_DQ_OUT=1; //DQ=1 delay_us(30); //主机拉高20~40us}//等待DHT11的回应//返回1:未检测到DHT11的存在//返回0:存在u8DHT11_Check(void) { u8retry=0; DHT11_IO_IN();//SETINPUT while(DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us { retry++; delay_us(1); }; if(retry>=100)return1; elseretry=0;while(!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us { retry++; delay_us(1); }; if(retry>=100)return1; return0;}//从DHT11读取一个位//返回值:1/0u8DHT11_Read_Bit(void) { u8retry=0; while(DHT11_DQ_IN&&retry<100)//等待变为低电平 { retry++; delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100)//等待变高电平 { retry++; delay_us(1); } delay_us(40);//等待40us if(DHT11_DQ_IN)return1; elsereturn0; }//从DHT11读取一个字节//返回值:读到的数据u8DHT11_Read_Byte(void){ u8i,dat; dat=0; for(i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit(); } returndat;}//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败u8DHT11_Read_Data(u8*temp,u8*humi){ u8buf[5]; u8i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++)//读取40位数据 { buf[i]=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }elsereturn1; return0; }//初始化DHT11的IO口DQ同时检测DHT11的存在//返回1:不存在//返回0:存在 u8DHT11_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PG端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //PA4端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化IO口 GPIO_SetBits(GPIOB,GPIO_Pin_0); //PE11输出高 DHT11_Rst();//复位DHT11 returnDHT11_Check();//等待DHT11的回应}#include"dht11.h"#include"delay.h"u8temperature,humidity;//复位DHT11voidDHT11_Rst(void) { DHT11_IO_OUT(); //SETOUTPUT DHT11_DQ_OUT=0; //拉低DQ delay_ms(20); //拉低至少18ms DHT11_DQ_OUT=1; //DQ=1 delay_us(30); //主机拉高20~40us}//等待DHT11的回应//返回1:未检测到DHT11的存在//返回0:存在u8DHT11_Check(void) { u8retry=0; DHT11_IO_IN();//SETINPUT while(DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us { retry++; delay_us(1); }; if(retry>=100)return1; elseretry=0;while(!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us { retry++; delay_us(1); }; if(retry>=100)return1; return0;}//从DHT11读取一个位//返回值:1/0u8DHT11_Read_Bit(void) { u8retry=0; while(DHT11_DQ_IN&&retry<100)//等待变为低电平 { retry++; delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100)//等待变高电平 { retry++; delay_us(1); } delay_us(40);//等待40us if(DHT11_DQ_IN)return1; elsereturn0; }//从DHT11读取一个字节//返回值:读到的数据u8DHT11_Read_Byte(void){ u8i,dat; dat=0; for(i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit(); } returndat;}//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败u8DHT11_Read_Data(u8*temp,u8*humi){ u8buf[5]; u8i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++)//读取40位数据 { buf[i]=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }elsereturn1; return0; }//初始化DHT11的IO口DQ同时检测DHT11的存在//返回1:不存在//返回0:存在 u8DHT11_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PG端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //PA4端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化IO口 GPIO_SetBits(GPIOB,GPIO_Pin_0); //PE11输出高 DHT11_Rst();//复位DHT11 returnDHT11_Check();//等待DHT11的回应}#include"includes.h"u8shidu_max=50;u16liangdu_min=1500;u16fengsu_min=400;u8liangyifu=0;u8state=0;sys_timjiance_tim;voidapp(void){ u8shangchuan[256]; if(sys_running_timer.ms-jiance_tim.ms>1000) { DHT11_Read_Data(&temperature,&humidity); //¶ÁÈ¡ÎÂʪ¶ÈÖµ if(liangyifu) { if(humidity>shidu_max||adc_value[0]<liangdu_min||adc_value[1]>fengsu_min) { DaoZhuan;state=0; } else { ZhengZhuan;state=1; } } sprintf(shangchuan,"+H%02dL%04dF%04dU%dS%d-", humidity,adc_value[0],adc_value[1],liangyifu,state); USART3_send_buf(shangchuan,19); jiance_tim=sys_running_timer; } }#include"includes.h"intmain(void){ u8t=0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); USART1_Config(115200); //串口初始化为9600 USART3_Config(9600);//蓝牙模组 adc_init(); DHT11_Init(); TIM3_PWM_Init();//舵机定时器初始化 system_Time_Init(9,7199); sys_gpio_init(); while(1) { app(); }}#include"delay.h"////////////////////////////////////////////////////////////////////////////////// //如果需要使用OS,则包括下面的头文件即可.#ifSYSTEM_SUPPORT_OS#include"includes.h" //ucos使用 #endif//V1.2修改说明//修正了中断中调用出现死循环的错误//防止延时不准确,采用dowhile结构!//V1.3修改说明//增加了对UCOSII延时的支持.//如果使用ucosII,delay_init会自动设置SYSTICK的值,使之与ucos的TICKS_PER_SEC对应.//delay_ms和delay_us也进行了针对ucos的改造.//delay_us可以在ucos下使用,而且准确度很高,更重要的是没有占用额外的定时器.//delay_ms在ucos下,可以当成OSTimeDly来用,在未启动ucos时,它采用delay_us实现,从而准确延时//可以用来初始化外设,在启动了ucos之后delay_ms根据延时的长短,选择OSTimeDly实现或者delay_us实现.//V1.4修改说明20110929//修改了使用ucos,但是ucos未启动的时候,delay_ms中中断无法响应的bug.//V1.5修改说明20120902//在delay_us加入ucos上锁,防止由于ucos打断delay_us的执行,可能导致的延时不准。//V1.6修改说明20150109//在delay_ms加入OSLockNesting判断。//V1.7修改说明20150319//修改OS支持方式,以支持任意OS(不限于UCOSII和UCOSIII,理论上任意OS都可以支持)//添加:delay_osrunning/delay_ostickspersec/delay_osintnesting三个宏定义//添加:delay_osschedlock/delay_osschedunlock/delay_ostimedly三个函数//V1.8修改说明20150519//修正UCOSIII支持时的2个bug://delay_tickspersec改为:delay_ostickspersec//delay_intnesting改为:delay_osintnesting//////////////////////////////////////////////////////////////////////////////////staticu8fac_us=0; //us延时倍乘数 staticu16fac_ms=0; //ms延时倍乘数,在ucos下,代表每个节拍的ms数 #ifSYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定义了,说明要支持OS了(不限于UCOS).//当delay_us/delay_ms需要支持OS的时候需要三个与OS相关的宏定义和函数来支持//首先是3个宏定义://delay_osrunning:用于表示OS当前是否正在运行,以决定是否可以使用相关函数//delay_ostickspersec:用于表示OS设定的时钟节拍,delay_init将根据这个参数来初始哈systick//delay_osintnesting:用于表示OS中断嵌套级别,因为中断里面不可以调度,delay_ms使用该参数来决定如何运行//然后是3个函数://delay_osschedlock:用于锁定OS任务调度,禁止调度//delay_osschedunlock:用于解锁OS任务调度,重新开启调度//delay_ostimedly:用于OS延时,可以引起任务调度.//本例程仅作UCOSII和UCOSIII的支持,其他OS,请自行参考着移植//支持UCOSII#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定义了,说明要支持UCOSII #definedelay_osrunning OSRunning //OS是否运行标记,0,不运行;1,在运行#definedelay_ostickspersec OS_TICKS_PER_SEC //OS时钟节拍,即每秒调度次数#definedelay_osintnesting OSIntNesting //中断嵌套级别,即中断嵌套次数#endif//支持UCOSIII#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定义了,说明要支持UCOSIII #definedelay_osrunning OSRunning //OS是否运行标记,0,不运行;1,在运行#definedelay_ostickspersec OSCfg_TickRate_Hz //OS时钟节拍,即每秒调度次数#definedelay_osintnesting OSIntNestingCtr //中断嵌套级别,即中断嵌套次数#endif//us级延时时,关闭任务调度(防止打断us级延迟)voiddelay_osschedlock(void){#ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedLock(&err); //UCOSIII的方式,禁止调度,防止打断us延时#else //否则UCOSII OSSchedLock(); //UCOSII的方式,禁止调度,防止打断us延时#endif}//us级延时时,恢复任务调度voiddelay_osschedunlock(void){ #ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedUnlock(&err); //UCOSIII的方式,恢复调度#else //否则UCOSII OSSchedUnlock(); //UCOSII的方式,恢复调度#endif}//调用OS自带的延时函数延时//ticks:延时的节拍数voiddelay_ostimedly(u32ticks){#ifdefCPU_CFG_CRITICAL_METHOD OS_ERRerr; OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII延时采用周期模式#else OSTimeDly(ticks); //UCOSII延时#endif}//systick中断服务函数,使用ucos时用到voidSysTick_Handler(void){ if(delay_osrunning==1) //OS开始跑了,才执行正常的调度处理 { OSIntEnter(); //进入中断 OSTimeTick(); //调用ucos的时钟服务程序 OSIntExit(); //触发任务切换软中断 }}#endif //初始化延迟函数//当使用OS的时候,此函数会初始化OS的时钟节拍//SYSTICK的时钟固定为HCLK时钟的1/8//SYSCLK:系统时钟voiddelay_init(){#ifSYSTEM_SUPPORT_OS //如果需要支持OS. u32reload;#endif SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8#ifSYSTEM_SUPPORT_OS //如果需要支持OS. reload=SystemCoreClock/8000000; //每秒钟的计数次数单位为M reload*=1000000/delay_ostickspersec; //根据delay_ostickspersec设定溢出时间 //reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右 fac_ms=1000/delay_ostickspersec; //代表OS可以延时的最少单位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断 SysTick->LOAD=reload; //每1/delay_ostickspersec秒中断一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK#else fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数#endif} #ifSYSTEM_SUPPORT_OS //如果需要支持OS.//延时nus//nus为要延时的us数. voiddelay_us(u32nus){ u32ticks; u32told,tnow,tcnt=0; u32reload=SysTick->LOAD; //LOAD的值 ticks=nus*fac_us; //需要的节拍数 tcnt=0; delay_osschedlock(); //阻止OS调度,防止打断us延时 told=SysTick->VAL; //刚进入时的计数器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了. elsetcnt+=reload-tnow+told; told=tnow; if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出. } }; delay_osschedunlock(); //恢复OS调度 }//延时nms//nms:要延时的ms数voiddelay_ms(u16nms){ if(delay_osrunning&&delay_osintnesting==0) //如果OS已经在跑了,并且不是在中断里面(中断里面不能任务调度) { if(nms>=fac_ms) //延时的时间大于OS的最少时间周期 { delay_ostimedly(nms/fac_ms); //OS延时 } nms%=fac_ms; //OS已经无法提供这么小的延时了,采用普通方式延时 } delay_us((u32)(nms*1000)); //普通方式延时}#else//不用OS时//延时nus//nus为要延时的us数. voiddelay_us(u32nus){ u32temp; SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL=0X00; //清空计数器 }//延时nms//注意nms的范围//SysTick->LOAD为24位寄存器,所以,最大延时为://nms<=0xffffff*8*1000/SYSCLK//SYSCLK单位为Hz,nms单位为ms//对72M条件下,nms<=1864voiddelay_ms(u16nms){ u32temp; SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit) SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL=0X00; //清空计数器 }#endif#include"tim.h"/*定时器模块,该模块基本作用提供一个系统运行的时间基准,定时方式选择TIMER2定时器,放弃滴答时钟和RTC避免移植带来的问题*/sys_timsys_running_timer;//定时器初始化,系统以毫秒计时,初始化的参数为:system_Time_Init(9,7199);//8M晶振voidsystem_Time_Init(u16arr,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//时钟使能 TIM_TimeBaseStructure.TIM_Period=arr;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler=psc;//设置用来作为TIMx时钟频率除数的预分频值10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision=0;//设置时钟分割:TDTS=Tck_tim TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上计数模式 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ClearITPendingBit(TIM2,TIM_IT_Update); TIM_ITConfig(//使能或者失能指定的TIM中断 TIM2,//TIM2 TIM_IT_Update, ENABLE//使能 ); NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道被使能 NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_Cmd(TIM2,ENABLE);//使能TIMx外设 sys_running_timer.ms=0; sys_running_timer.sec=0;}voidTIM2_IRQHandler(void)//TIM3中断{ if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)//检查指定的TIM中断发生与否:TIM中断源 { TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除TIMx的中断待处理位:TIM中断源 sys_running_timer.ms+=1; if(sys_running_timer.ms%1000==0)sys_running_timer.sec++; }}#include"usart.h" #include"string.h"#include"app.h"#include"timer.h"u8DMA_UART1_data[DMA_UART1_data_len];voidUSART1_Config(u32bound){//GPIO端口设置GPIO_InitTypeDefGPIO_InitStructure; USART_InitTypeDefUSART_InitStructure; NVIC_InitTypeDefNVIC_InitStructure; DMA_InitTypeDefDMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //USART1_TXGPIOA.9GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//PA.9GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.9//USART1_RX GPIOA.10初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.10//Usart1NVIC配置NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4;//抢占优先级4 NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器//USART初始化设置USART_DeInit(USART1); USART_InitStructure.USART_BaudRate=bound;//串口波特率 USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits=USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity=USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //收发模式USART_Init(USART1,&USART_InitStructure);//初始化串口1 USART_ITConfig(USART1,USART_IT_IDLE,ENABLE); USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);USART_Cmd(USART1,ENABLE);//使能串口1 DMA_DeInit(DMA1_Channel5); DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)(&USART1->DR); DMA_InitStructure.DMA_MemoryBaseAddr=(u32)DMA_UART1_data; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=DMA_UART1_data_len; DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode=DMA_Mode_Normal; DMA_InitStructure.DMA_Priority=DMA_Priority_High; DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA1_Channel5,&DMA_InitStructure); DMA_Cmd(DMA1_Channel5,ENABLE);}voidUSART1_IRQHandler(void) //串口1中断服务程序{ u16
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度建筑用钢材料采购合同范本
- 二零二五年度房地产项目普法合同执行与消费者权益保护合同3篇
- 2025版编剧聘用合同范本(原创剧本创作)3篇
- 2025年酒类团购服务及产品经销一体化合同
- 二零二五年度毛巾品牌授权及销售合同
- 二零二五年度智慧社区土地租赁合同模板
- 2025年度个人交通事故损害赔偿法律援助合同
- 课题申报参考:明清尺牍选本书画文献研究
- 2025年度个人信用保证保险合同范本大全2篇
- 课题申报参考:宁海古戏台建造技艺与匠作谱系研究
- 内科学(医学高级):风湿性疾病试题及答案(强化练习)
- 音乐剧好看智慧树知到期末考试答案2024年
- 办公设备(电脑、一体机、投影机等)采购 投标方案(技术方案)
- 查干淖尔一号井环评
- 案卷评查培训课件模板
- 体检中心分析报告
- 2024年江苏省样卷五年级数学上册期末试卷及答案
- 波浪理论要点图解完美版
- 金融交易数据分析与风险评估项目环境敏感性分析
- 牛顿环与劈尖实验论文
- 移动商务内容运营(吴洪贵)任务四 其他平台载体的运营方式
评论
0/150
提交评论