版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于STM32的多点温度采集系统设计课程名称:嵌入式系统开发专业班级:学生学号:学生姓名:所属院部:指导教师:2023—2023学年第2学期目录1、系统分析..............................................21.1任务分析...........................................21.2STM32芯片.........................................21.3DS18B20............................................51.4TFTLCD模块........................................61.5LABVIEW............................................62、硬件设计..............................................72.1STM32.............................................72.2TFTLCD............................................82.3内部温度测量......................................93、软件设计..............................................103.1STM32的程序设计..................................103.2LABVIEW的程序设计................................143.3调试过程与结果....................................154、总结与体会............................................17参考资料.................................................17附录.....................................................20系统分析1.1、任务分析本系统是基于STM32微控制器所设计的温度测量系统,通过温度芯片DS18B20测量外部温度,通过STM32内部测温系统测量内部温度,微控制器驱动液晶模块显示当前测得的内部与外部温度,然后由串口将温度信息发送至LABVIEW,同时接收从LABVIEW反应的控制信息。
整个系统模块分为四个局部:STM32芯片、DS18B20温度模块、液晶显示、LABVIEW。MCU是STM32主芯片的最小板,上面有芯片工作需要的最少资源:时钟控制电路、复位电路、JTAG控制口以及与外围电路相连的接口。DS18B20和液晶分别是温度测量、控制显示局部。而LABVIEW负责完成与芯片间的异步双工通信。1.2、STM32芯片STM32系列基于专为要求高性能、低本钱、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型〞系列和STM32F101“根本型〞系列。增强型系列时钟频率到达72MHz,是同类产品中性能最高的产品;根本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最正确选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
STM32的高性能Cortex-M3内核为1.25DMips/MHz;含有一流的外设:1us的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHZ的I/O翻转速度;在72MHz时消耗36mA,待机时下降的2uA。
内核:ARM32位Cortex-M3
CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。
存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。
时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。POR、PDR和可编程的电压探测器〔PVD〕。4-16MHz的晶振。内嵌出厂前调校的8MHzRC振荡电路。内部40kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振。
低功耗:3种低功耗模式:休眠,停止,待机模式。为RTC和备份存放器供电的VBAT。调试模式:串行调试〔SWD〕和JTAG接口。
DMA:12通道DMA控制器。支持的外设:定时器,ADC,DAC,SPI,IIC和USART。2个12位的us级的A/D转换器〔16通道〕:A/D测量范围:0-3.6V。双采样和保持能力。片上集成一个温度传感器。
2通道12位D/A转换器:STM32F103xC,STM32F103xD,STM32F103xE独有。最多高达112个的快速I/O端口:根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。除了模拟输入,所有的都可以接受5V以内的输入。
最多多达11个定时器:4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。2个16位的6通道高级控制定时器:最多6个通道可用于PWM输出。2个看门狗定时器〔独立看门狗和窗口看门狗〕。Systick定时器:24位倒计数器。2个16位根本定时器用于驱动DAC。
最多多达13个通信接口:2个IIC接口〔SMBus/PMBus〕。5个USART接口〔ISO7816接口,LIN,IrDA兼容,调试控制〕。3个SPI接口〔18
Mbit/s〕,两个和IIS复用。CAN接口〔2.0B〕。USB
2.0全速接口。SDIO接口。
ECOPACK封装:STM32F103xx系列微控制器采用ECOPACK封装形式。
集成嵌入式Flash和SRAM存储器的ARM
Cortex-M3内核。和8/16位设备相比,ARM
Cortex-M3
32位RISC处理器提供了更高的代码效率。STM32F103xx微控制器带有一个嵌入式的ARM核,所以可以兼容所有的ARM工具和软件。
嵌入式Flash存储器和RAM存储器:内置多达512KB的嵌入式Flash,可用于存储程序和数据。多达64KB的嵌入式SRAM可以以CPU的时钟速度进行读写〔不待等待状态〕。
外部中断/事件控制器〔EXTI〕:外部中断/事件控制器由用于19条产生中断/事件请求的边沿探测器线组成。每条线可以被单独配置用于选择触发事件〔上升沿,下降沿,或者两者都可以〕,也可以被单独屏蔽。有一个挂起存放器来维护中断请求的状态。当外部线上出现长度超过内部APB2时钟周期的脉冲时,EXTI能够探测到。多达112个GPIO连接到16个外部中断线。
时钟和启动:在启动的时候还是要进行系统时钟选择,但复位的时候内部8MHz的晶振被选用作CPU时钟。可以选择一个外部的4-16MHz的时钟,并且会被监视来判定是否成功。在这期间,控制器被禁止并且软件中断管理也随后被禁止。同时,如果有需要〔例如碰到一个间接使用的晶振失败〕,PLL时钟的中断管理完全可用。多个预比拟器可以用于配置AHB频率,包括高速APB(PB2)和低速APB〔APB1〕,高速APB最高的频率为72MHz,低速APB最高的频率为36MHz。
电源供电方案:VDD,电压范围为2.0V-3.6V,外部电源通过VDD引脚提供,用于I/O和内部调压器。VSSA和VDDA,电压范围为2.0-3.6V,外部模拟电压输入,用于ADC,复位模块,RC和PLL,在VDD范围之内〔ADC被限制在2.4V〕,VSSA和VDDA必须相应连接到VSS和VDD。VBAT,电压范围为1.8-3.6V,当VDD无效时为RTC,外部32KHz晶振和备份存放器供电〔通过电源切换实现〕。
电源管理:设备有一个完整的上电复位〔POR〕和掉电复位〔PDR〕电路。这条电路一直有效,用于确保从2V启动或者掉到2V的时候进行一些必要的操作。当VDD低于一个特定的下限VPOR/PDR时,不需要外部复位电路,设备也可以保持在复位模式。设备特有一个嵌入的可编程电压探测器〔PVD〕,PVD用于检测VDD,并且和VPVD限值比拟,当VDD低于VPVD或者VDD大于VPVD时会产生一个中断。中断效劳程序可以产生一个警告信息或者将MCU置为一个平安状态。PVD由软件使能。
电压调节:调压器有3种运行模式:主〔MR〕,低功耗〔LPR〕和掉电。MR用在传统意义上的调节模式〔运行模式〕,LPR用在停止模式,掉电用在待机模式:调压器输出为高阻,核心电路掉电,包括零消耗〔存放器和SRAM的内容不会丧失〕。
低功耗模式:STM32F103xx支持3种低功耗模式,从而在低功耗,短启动时间和可用唤醒源之间到达一个最好的平衡点。休眠模式:只有CPU停止工作,所有外设继续运行,在中断/事件发生时唤醒CPU;停止模式:允许以最小的功耗来保持SRAM和存放器的内容。1.8V区域的时钟都停止,PLL,HSI和HSE
RC振荡器被禁能,调压器也被置为正常或者低功耗模式。设备可以通过外部中断线从停止模式唤醒。外部中断源可以使16个外部中断线之一,PVD输出或者TRC警告。待机模式:追求最少的功耗,内部调压器被关闭,这样1.8V区域断电。PLL,HSI和HSE
RC振荡器也被关闭。在进入待机模式之后,除了备份存放器和待机电路,SRAM和存放器的内容也会丧失。当外部复位〔NRST引脚〕,IWDG复位,WKUP引脚出现上升沿或者TRC警揭发生时,设备退出待机模式。进入停止模式或者待机模式时,TRC,IWDG和相关的时钟源不会停止。
选型片的原那么是:看功耗,本次设计的温度系统需要在外场长时间工作,那么就需要功耗较低;看本钱,在能满足性能要求的前提下,选择本钱较低的。
从这两个方面来看,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz,时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能。1.3、DS18B20DS18B20是由DALLAS半导体公司推出的一种的“一线总线〞接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念。现场温度直接以“一线总线〞的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~l2位的数字值读数方式。它工作在3—5.5
V的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
目前常用的单片机与外设之间进行数据传输的串行总线主要有I2C,SPI和SCI总线。其中I2C总线以同步串行二线方式进行通信:一条时钟线,一条数据线。SPI总线那么以同步串行三线方式进行通信:一条时钟线,一条数据输入线,一条数据输出线。SCI总线是以异步方式进行通信:一条数据输入线,一条数据输出线。而DS18B20的单总线采用单条信号线,既可传输时钟,又可传输数据,而且数据传输是双向的,因而具有线路简单,硬件开销少,本钱低廉,便于总线扩展和维护等优点。
ROM中的64位序列号是出厂前被光记好的,它可以看作是该DS18B20的地址序列码,每DS18B20的64位序列号均不相同。64位ROM的排列是:前8位是产品家族码,接着48位是DS18B20的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5
+X4
+1)。ROM作用是使每一个DS18B20都各不相同,这样就可实现一根总线上挂接多个。
DS18B20适应电压范围宽,电压范围在3.0~5.5V,在寄生电源方式下可由数据线供电。在使用中不需要任何外围元件,全部传感元件及转换电路继承在形如一只三极管的集成电路内。可编程分辨率为9~12位,对应的可分辨温度分别为0.5度,0.25度,0.125度,0.0625度,可实现高精度测温。1.4、TFTLCD模块TFT-LCD即薄膜晶体管液晶显示器。液晶先后避开了困难的发光问题,利用液晶作为光阀的优良特性把发光显示器件分解成两局部,即光源和对光源的控制。作为光源,无论从发光效率、全彩色,还是寿命,都已取得了辉煌的成果,而且还在不断深化之中。LCD创造以来,背光源在不断地进步,由单色到彩色,由厚到薄,由侧置荧光灯式到平板荧光灯式。在发光光源方面取得的最新成果都会为LCD提供新的背光源。随着光源科技的进步,会有更新的更好的光源出现并为LCD所应用。余下的就是对光源的控制,把半导体大规模集成电路的技术和工艺移植过来,研制成功了薄膜晶体管〔TFT〕生产工艺,实现了对液晶光阀的矩阵寻址控制,解决了液晶显示器的光阀和控制器的配合,从而使液晶显示的优势得以实现。
TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管〔TFT〕,可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。
TFT实际上指的是薄膜晶体管,可以对屏幕上的各个独立的像素进行控制。显示屏由许多可以发出任意颜色的光线的像素组成,只要控制各个像素显示相应的颜色就能到达目的了。在TFTLCD中采用背光技术,为了能精确地控制每一个像素的颜色和亮度就需要在每一个像素之后安装一个类似百叶窗的开关,当“百叶窗〞翻开时光线可以透过来,而“百叶窗〞关上后光线就无法透过来。技术上的实现就是利用了液晶的特性,在上下两层都有沟槽,上层的是纵向排列,下层的是横向排列,当不加电压时液晶处于自然状态,通过适当的结构设计,光线从上层通过夹层后会发生90度的扭曲,从而能在下层顺利通过,加上电压就会生成一个电场,使得液晶都垂直排列,这时光线就无法通过下层。1.5、LABVIEWLabVIEW是一种用图标代替文本行创立应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序的执行顺序,而LabVIEW那么采用数据流编程方式,程序框图中节点之间的数据决定了程序的执行顺序。LabVIEW提供很多外观与传统仪器〔如示波器,万用表〕类似的控件,可用来方便地创立用户界面。用户界面在LabVIEW中称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G〔Graphisc〕代码。LabVIEW的图形化源代码在某种程度上类似于数据流程图,因此又被称作程序框图代码。前面板上的每一个控件对应程序框图中的一个对象,当数据“流向〞该控件时,控件就会根据自己的特性以一定的方式显示数据例如开关,数字和图形。选择LabVIEW开发测试和测量用程序的一大决定性因素是其开发速度。通常,使用LabVIEW开发应用系统的速度比使用其他编程语言快4~10倍。这一惊人速度背后的原因在于LabVIEW易用易学,它所提供的工具使创立测试和测量应用变得更为轻松。
LabVIEW的具体优势主要表达在以下几个方面。
〔1〕提供了丰富的图形化控件,并采用图形化的编程方法,彻底把工程师们从负责苦涩的文本编程中解放出来。
〔2〕内建的编译器在用户编写程序的同时就在后台自动完成了编译。因此用户在编写程序的过程中如果有错误,它会被立即显示出来。
〔3〕由于采用数据流模型,它实现了自动的多线程,从而能充分利用处理器尤其是多处理器的处理能力。
〔4〕通过DLL、CIN节点、ActiveX、.NET或MATLAB脚本节点等技术,可以轻松实现LabVIEW与其它编程语言混合编程。
〔5〕通过应用程序生成器可以轻松地发布EXE、动态链接库或安装包。
〔6〕LabVIEW提供了大量的驱动与专用工具,几乎能与任何接口硬件轻松连接。〔7〕LabVIEW内建了大量600多个分析函数,用于数据分析和信号处理。
2、硬件设计2.1、STM32ALIENTEKMiniSTM32V3版开发板选择的是STM32F103RCT6作为MCU,它拥有的资源包括:48KBSRAM、256KBFLASH、2个根本定时器、4个通用定时器、2个高级定时器、2个DMA控制器〔共12个通道〕、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口及51个通用IO口。该芯片性价比极高,MCU局部的原理图如下:P3和P1分别用于PORTA和PORTB的IO口引出,其中P1有局部用于PORTC口的引出。PORTA和PORTB都是按顺序排列的,这样设计的目的是为了让大家更方便地与外部设备连接。P2连接了DS18B20的数据口以及红外传感器的数据线,它们分别对应着PA0和PA1,只需要通过跳线帽将P2和P3连接起来就可以使用了。这里不直接连在一起的原因有二:1,防止红外传感器和DS18B20对这两个IO口作为其他功能使用的时候的影响;2,DS18B20和红外传感器还可以用来给其他板子提供输入,等于我们的板子为别的板子提供了红外接口和温度传感器,在调试的时候,还是蛮有用的。P4口连接了CH340G的串口输出,对应着STM32的串口1〔PA9/PA10〕,在使用的时候,也是通过跳线帽将这两处连接起来。这样设计有两个好处:1,使得PA9和PA10用作其他用途使用的时候〔比方串口1连接其他串口设备〕,不受到CH340G的影响。2,USB转串口可以用作他用,并不仅限这个板上的STM32使用,也可以连接到其他板子上,这样ALIENEKMiniSTM32开发板就相当于一个USB转TTL串口。P5口是另外一组IO引出排针,将PORTC和PORTD等的剩余IO口从这里引出。在此局部原理图中,我们还可以看到STM32F103RCT6的各个IO口与外设的连接关系。2.2、TFTLCDALIENTEKMiniSTM32开发板载有目前比拟通用的液晶显示模块接口,还有其比拟有特色的兼容性接口,不仅支持ALIENTEK各种尺寸〔2.4、2.8、3.5、4.3、7寸等〕的TFTLCD,还支持OLED显示器。同时,该接口支持电阻触摸屏以及电容触摸屏等不同类型的触摸屏接口,其原理图如下:TFT_LCD是一个通用的液晶模块接口。OLED是一个给OLED显示模块供电的接口,它和TFT_LCD拼接在一起。当使用TFTLCD时,我们接到TFT_LCD上〔靠右插〕就可以了,而当我们使用ALIENTEK的OLED模块时,那么接OLED排针做电源,同时会连接到TFT_LCD上〔靠左插〕的局部管脚,从而实现OLED与MCU的连接。ALIENTEKMiniSTM32的LCD接口兼容ALIENTEK各种尺寸的TFTLCD模块,包括:2.4寸(320*240,电阻屏)、2.8寸〔320*240,电阻屏〕、3.5寸〔480*320,电阻屏〕、4.3寸〔800*480,电容屏〕、7寸〔800*480,电容屏〕等,同时还兼容ALIENTEK的0.96寸OLED模块。2.3、内部温度测量STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是17.1μs。STM32的内部温度传感器支持的温度范围为:-40~125度,精度为±1.5℃左右〔实际效果不咋地〕。STM32内部温度传感器的使用很简单,只要设置一下内部ADC,并激活其内部通道就差不多了。关于ADC的设置,我们在第上一章已经进行了详细的介绍,这里就不再多说。接下来我们介绍一下和温度传感器设置相关的2个地方。第一个地方,我们要使用STM32的内部温度传感器,必须先激活ADC的内部通道,这里通过ADC_CR2的AWDEN位〔bit23〕设置。设置该位为1那么启用内部温度传感器。第二个地方,STM32的内部温度传感器固定的连接在ADC的通道16上,所以,我们在设置好ADC之后只要读取通道16的值,就是温度传感器返回来的电压值了。根据这个值,我们就可以计算出当前温度。计算公式如下:T〔℃〕={〔V25-Vsense〕/Avg_Slope}+25上式中:V25=Vsense在25度时的数值〔典型值为:1.43〕。Avg_Slope=温度与Vsense曲线的平均斜率〔单位:mv/℃或uv/℃〕〔典型值:4.3mv/℃〕。利用以上公式,我们就可以方便的计算出当前温度传感器的温度了。通过库函数设置STM32内部温度传感器的步骤如下:1〕设置ADC,开启内部温度传感器。关于如何设置ADC,内部温度传感器相当与把通道端口连接在内部温度传感器上。所以这里,我们要开启内部温度传感器功能:ADC_TempSensorVrefintCmd(ENABLE);2〕读取通道16的AD值,计算结果。3、软件设计3.1、STM32的程序设计主程序设计:#include"led.h"#include"delay.h"#include"sys.h"#include"usart.h"#include"lcd.h"#include"ds18b20.h"#include"tsensor.h"#include"malloc.h"#include"MMC_SD.h"#include"ff.h"#include"exfuns.h"#include"fontupd.h"#include"text.h"#include"spi.h"intmain(void){u8t=0;u8i;u8len;u32tmp;u16time=0;u8LED1ON_buf[]={"led1on"};u8LED1OFF_buf[]={"led1off"};u16adcx;floattemp;floattemperate;shorttemperature;u16tmp_buf[2];delay_init();uart_init(9600);LED_Init();LCD_Init();T_Adc_Init();font_init();POINT_COLOR=RED;Show_Str(60,30,200,16,"多点温度测量系统",16,0);Show_Str(60,50,200,16,"日期:2023年6月",16,0);Show_Str(60,70,200,16,"学号:00000000",16,0);Show_Str(60,90,200,16,"姓名:某某某",16,0);Show_Str(60,110,200,16,"学号:11111111",16,0);Show_Str(60,130,200,16,"姓名:某某某",16,0);Show_Str(60,150,200,16,"学号:22222222",16,0);Show_Str(60,170,200,16,"姓名:某某某",16,0);Show_Str(60,190,200,16,"学号:33333333",16,0);Show_Str(60,210,200,16,"姓名:某某某",16,0);POINT_COLOR=BLUE;//LCD_ShowString(60,200,200,16,16,"TEMP_VAL:");//LCD_ShowString(60,220,200,16,16,"TEMP_VOL:0.000V");LCD_ShowString(60,290,200,16,16,"TEMPERATE:00.0C");while(DS18B20_Init()){LCD_ShowString(60,230,200,16,16,"DS18B20Error");delay_ms(200);LCD_Fill(60,230,239,130+16,WHITE);delay_ms(200);}LCD_ShowString(60,230,200,16,16,"DS18B20OK");POINT_COLOR=BLUE;LCD_ShowString(60,250,200,16,16,"Temp:.C");while(1){if(USART_RX_STA&0x8000){len=USART_RX_STA&0x3fff;for(i=0;i<len;i++){if(LED1ON_buf[i]!=USART_RX_BUF[i])break;else{if(i==(len-1))LED1=0;}}for(i=0;i<len;i++){if(LED1OFF_buf[i]!=USART_RX_BUF[i])break;else{if(i==(len-1))LED1=1;}}USART_RX_STA=0;}if(t%10==0){time++;adcx=T_Get_Adc_Average(ADC_CH_TEMP,10);temp=(float)adcx*(3.3/4096);temperate=temp;temperate=(1.43-temperate)/0.0043+25;tmp_buf[0]=temperate*10;LCD_ShowxNum(140,290,(u8)temperate,2,16,0);temperate-=(u8)temperate;LCD_ShowxNum(164,290,temperate*10,1,16,0X80);temperature=DS18B20_Get_Temp();if(temperature<0){LCD_ShowChar(60+40,250,'-',16,0);temperature=-temperature;}elseLCD_ShowChar(60+40,250,'',16,0);LCD_ShowNum(60+40+8,250,temperature/10,2,16);LCD_ShowNum(60+40+32,250,temperature%10,1,16);if(time==10){time=0;tmp=tmp_buf[0]*1000+tmp_buf[1];printf("%d\r\n",tmp);}}tmp_buf[1]=temperature;delay_ms(10);t++;if(t==10){t=0;LED0=!LED0;}}}3.2、LABVIEW的程序设计1、设计前面板框图:说明:上图中,VISA资源名称的作用是用来选择串口,以此与STM32开发板建立通信,传输数据。波特率、数据比特、奇偶数位、停止位、流控制需与串口设置一致。等待时间可自由设置,例如10ms、20ms。时间显示框是用来显示程序运行时的实时时间,格式为年月日时分秒。用来显示温度曲线的波形图中,红色实线代表DS18B20所测的外部温度,白色实线代表STM32内部测温系统所测的内部温度。两个开关用来选择是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论