接口实验报告_第1页
接口实验报告_第2页
接口实验报告_第3页
接口实验报告_第4页
接口实验报告_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于STM32实时时钟设计接口实验课程结课报告学号、专业: 控制工程 1508202024 姓 名: * 报 告 题 目: 基于STM32的实时时钟设计 指 导 教 师: 潘 明 所 属 学 院: 电子工程与自动化学院 成绩评定教师签名 桂林电子科技大学研究生院2016年 6 月 4 日 摘 要本设计以STM32F103芯片为控制核心,利用其内部的RTC设计了一个实时时钟。本系统主要由以下几个部分组成:微处理器,实时时钟模块,显示模块,调节模块。其中MCU采用STM32F103芯片,实时时钟采用RTC实时时钟,显示模块为4.3寸的TFTLCD显示屏,采用独立按键调节。另外整个系统是在系统软件控

2、制下工作的,能实现年、月、日、时、分、秒的实时显示及闹钟功能,并增加了温度显示。关键字:STM32F103;实时时钟(RTC);TFTLCD显示屏IIAbstractThis design with STM32F103 chip as the control core, using its internal RTC design a real-time clock. The system is mainly composed of the following parts: microprocessor, real-time clock module, display module, contr

3、ol module. MCU using STM32F103 chip, real-time clock using RTC , display module use the 4.3 inch TFTLCD display screen, using independent buttons to adjust . In addition, the whole system is under the control of the system software,and accomplish the year, month, day, hour, minute, second real-time

4、display and alarm clock function,and added to temperature display.Key words: STM32F103;real time clock(RTC); TFTLCD display screenIV目 录摘 要IAbstractII第一章 绪 论11.1实时时钟研究的背景和意义1第二章 系统总体方案设计32.1 系统结构32.2 系统的基本原理32.3 系统各单元模块的功能介绍3第三章 硬件单元简介43.1 STM32F103简介43.3 TFTLCD简介103.4 FSMC简介113.5 DS18B20简介12第四章 软件设计

5、流程图134.1 主程序流程图134.2 RTC初始化流程图144.3 TFTLCD的使用流程144.4 DS18B20温度读取流程图15第五章 硬件单元电路设计165.1 电源模块165.2 复位电路模块165.3 外部时钟模块175.4 外部晶振模块175.5 JTAG下载模块175.6 主控制器模块185.7 BootLoader配置模块18第六章 运行与调试19参考文献20第一章 绪 论1.1实时时钟研究的背景和意义 近年来,随着电子产品的发展,随着社会竞争的激烈,人们对数字时钟的要求越来越高。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间,忘记了要做的事情,当

6、事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。因此从人们的日常生活到工厂的自动控制,从民用时钟到科学发展所需的时钟,现代人对时间的精度和观察时间的方便有了越来越多的需求。人们要求随时随地都能快速准确的知道时间,并且要求时钟能够更直观、更可靠、价格更便宜。这种要求催生了新型时钟的产生。除此之外,由于对社会责任的更多承担,人们要求所设计的产品能够产生尽量少的垃圾、能够消耗尽量少的能量。因此人们对时钟的又有了体积小、功耗低的要求。传统的机械表由于做工的高精细要求,造价的昂贵,材料的限制,时间指示精度的限制,使用寿命方面,以及其它方面的限制,已不能满足人们的需求。

7、另外,近些年随着科技的发展和社会的进步,人们对时钟的要求也越来越高,而使得新型电子钟表成了大势所趋。20世纪末,电子技术获得了飞速的发展,在其推动下微机开始向社会各个领域渗透同时大规模集成电路获得了高速发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。另外单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思

8、想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。这正符合了现代时钟的设计要求。另一方面,电子技术的告诉发展,有力地推动了社会生产力的发展和社会信息化程度的提高,这些使时间显得更加宝贵,从时间就是生命,时间就是效率这些名言警句中就能看出。数字钟是采用数字电路实现对时、分、秒、数字显示的计时装置,广泛

9、用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。 第二章 系统总体方案设计2.1 系统结构 本系统的结构框图如图2.1所示。2.2 系统的基本原理本系统利用STM32F103自带的RTC

10、完成秒计数,然后将当然的计数值送到微处理器,微处理器依据当前的计数值根据算法分别算出当前的年、月、日、时、分、秒、星期。然后并将它们在TFTLCD显示屏上显示出来,并且可以通过按键来调节当前需要调节的对象。另外本系统还附带了一个温度传感器DS18B20,用来测量当前环境的温度并将其值送到TFTLCD显示屏上显示出来。2.3 系统各单元模块的功能介绍1) STM32F103芯片是控制核心,负责各模块的执行及处理各模块的数据。2) RTC实时时钟负责秒计数。3) TFTLCD显示屏负责显示万年历及温度。4) 温度传感器DS18B20负责环境温度的检测。5) 按键负责调节万年历及闹钟。第三章 硬件单

11、元简介3.1 STM32F103简介 Cortex-M3 采用 ARM V7 构架,不仅支持 Thumb-2 指令集,而且拥有很多新特性。较之ARM7 TDMI,Cortex-M3 拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成本、低功耗等众多优势。STM32 的优异性体现在如下几个方面:1 超低的价格。以 8 位机的价格,得到 32 位机,是STM32 最大的优势。2 超多的外设。STM32 拥有包括: FSMC、 TIMER、 SPI、 IIC、 USB、 CAN、 IIS、 SDIO、ADC、 DAC、 RTC、 DMA 等众多外设及功能,具有极高的集成度。3 丰富的型号。

12、STM32 仅 M3 内核就拥有 F100、 F101、 F102、 F103、 F105、 F107、 F207、F217 等8个系列上百种型号,具有 QFN、 LQFP、 BGA 等封装可供选择。同时 STM32还推出了STM32L 和STM32W 等超低功耗和无线应用型的 M3 芯片。4 优异的实时性能。84 个中断,16 级可编程优先级,并且所有的引脚都可以作为中断输入。5 杰出的功耗控制。STM32 各个外设都有自己的独立时钟开关,可以通过关闭相应外设的时钟来降低功耗。6 极低的开发成本。STM32 的开发不需要昂贵的仿真器,只需要一个串口即可下载代码,并且支持 SWD 和 JTAG

13、 两种调试口。SWD 调试可以为你的设计带来跟多的方便,只需要 2 个 IO 口,即可实现仿真调试。Stm32其主要配置如下:1) 内核: ARM 32位的Cortex-M3 CPU 最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone2.1) 单周期乘法和硬件除法2) 存储器 从256K至512K字节的闪存程序存储器 高达64K字节的SRAM 带4个片选的静态存储器控制器。支持CF卡、 SRAM、 PSRAM、 NOR和NAND存储器 并行LCD接口,兼容8080/6800模式3) 时钟、复位和电源管理 2.03.6伏供电和I/O引脚 上电/断

14、电复位(POR/PDR)、可编程电压监测器(PVD) 416MHz晶体振荡器 内嵌经出厂调校的8MHz的RC振荡器 内嵌带校准的40kHz的RC振荡器 带校准功能的32kHz RTC振荡器4) 低功耗 睡眠、停机和待机模式 VBAT为RTC和后备寄存器供电5) 3个12位模数转换器,1s转换时间(多达21个输入通道) 转换范围: 0至3.6V 三倍采样和保持功能 温度传感器 2 通道 12 位 D/A 转换器6) DMA: 12 通道 DMA 控制器 支持的外设:定时器、 ADC、 DAC、 SDIO、I2S、 SPI、 I2C和USART7) 调试模式 串行单线调试(SWD)和JTAG接口

15、Cortex-M3内嵌跟踪模块(ETM) 多达112个快速I/O端口 51/80/112个多功能双向的I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V8) 多达11个定时器 多达4个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PW或脉冲计数的通道和增量编码器输入 2个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器 2个看门狗定时器(独立的和窗口型的) 系统时间定时器:24位自减型计数器 2个16位基本定时器用于驱动DAC9) 多达13个通信接口 多达2个I2C接口(支持SMBus/PMBus) 多达5个USART接口(支持ISO7816,

16、LIN,IrDA接口和调制解调控制) 多达3个SPI接口(18M位/秒), 2个可复用I2S接口 CAN接口(2.0B 主动) USB 2.0全速接口 SDIO接口10) 系统总线 ICode总线 该总线将Cortex-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 DCode总线 该总线将Cortex-M3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访问)。 系统总线 此总线连接Cortex-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。 DMA总线 此总线将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DC

17、ode和DMA到SRAM、闪存和外设的访问。 总线矩阵 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。在互联型产品中,总线矩阵包含5个驱动部件(CPU的DCode、系统总线、以太网DMA、 DMA1总线和DMA2总线)和3个从部件(闪存存储器接口(FLITF)、 SRAM和AHB2APB桥)。在其它产品中总线矩阵包含4个驱动部件(CPU的DCode、系统总线、 DMA1总线和DMA2总线)和4个被动部件(闪存存储器接口(FLITF)、 SRAM、 FSMC和AHB2APB桥)。AHB外设通过总线矩阵与系统总线相连,允许DMA访问。 AHB/APB桥(APB) 两个A

18、HB/APB桥在AHB和2个APB总线间提供同步连接。 APB1操作速度限于36MHz, APB2操作于全速(最高72MHz)。在每一次复位以后,所有除SRAM和FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟。3.2 RTC时钟简介 STM32 的实时时钟(RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置

19、和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)。RTC的简化框图,如图3.2所示图3.2 RTC框图 RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连。此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口由 APB1 总线时钟驱动,用来与 APB1 总线连接。 另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是 RTC 的预分频模块,它可编程产生 1 秒的 RTC 时间基准 TR_CLK。

20、RTC 的预分频模块包含了一个 20位的可编程分频器(RTC 预分频器)。如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。第二个模块是一个 32 位的可编程计数器,可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算,可以记录 4294967296 秒,约合 136 年左右,作为一般应用,这已经是足够了的。 RTC还有一个闹钟寄存器 RTC_ALR,用于产生闹钟。系统时间按 TR_CLK 周期累加并与存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生

21、一个闹钟中断。 RTC内核完全独立于 RTC APB1 接口,而软件是通过 APB1 接口访问 RTC 的预分频值、计数器值和闹钟值的。但是相关可读寄存器只在 RTC APB1 时钟进行重新同步的 RTC 时钟的上升沿被更新, RTC 标志也是如此。这就意味着,如果 APB1 接口刚刚被开启之后,在第一次的内部寄存器更新之前,从 APB1 上读取的 RTC 寄存器值可能被破坏了(通常读到 0)。因此,若在读取 RTC 寄存器曾经被禁止的 RTC APB1 接口,软件首先必须等待 RTC_CRL 寄存器的 RSF位(寄存器同步标志位,bit3)被硬件置 1。RTC 正常工作的一般配置步骤如下:1

22、) 使能电源时钟和备份区域时钟。前面已经介绍了,我们要访问 RTC 和备份区域就必须先使能电源时钟和备份区域时钟。RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);2) 取消备份区写保护。要向备份区域写入数据,就要先取消备份区域写保护(写保护在每次硬复位之后被使能),否则是无法向备份区域写入数据的。我们需要用到向备份区域写入一个字节,来标记时钟已经配置过了,这样避免每次复位之后重新配置时钟。 取消备份区域写保护的库函数实现方法是:PWR_BackupAccessCmd(ENABLE); /使能 RTC

23、 和后备寄存器访问3) 复位备份区域,开启外部低速振荡器。在取消备份区域写保护之后,我们可以先对这个区域复位,以清除前面的设置,当然这个操作不要每次都执行,因为备份区域的复位将导致之前存在的数据丢失,所以要不要复位,要看情况而定。然后我们使能外部低速振荡器,注意这里一般要先判断 RCC_BDCR 的 LSERDY位来确定低速振荡器已经就绪了才开始下面的操作。备份区域复位的函数是:BKP_DeInit();/复位备份区域开启外部低速振荡器的函数是: RCC_LSEConfig(RCC_LSE_ON);/ 开启外部低速振荡器4) 选择 RTC 时钟,并使能。这里我们将通过 RCC_BDCR 的 R

24、TCSEL 来选择选择外部 LSI 作为 RTC 的时钟。然后通过RTCEN 位使能 RTC 时钟。库函数中,选择 RTC 时钟的函数是:RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /选择 LSE 作为 RTC 时钟对于 RTC 时钟的选择,还有 RCC_RTCCLKSource_LSI 和 RCC_RTCCLKSource_HSE_Div128两个,顾名思义,前者为 LSI,后者为 HSE 的 128 分频,这在时钟系统章节有讲解过。使能 RTC 时钟的函数是:RCC_RTCCLKCmd(ENABLE); /使能 RTC 时钟5) 设置 RTC 的分频,以

25、及配置 RTC 时钟。在开启了 RTC 时钟之后,我们要做的就是设置 RTC 时钟的分频数,通过 RTC_PRLH 和RTC_PRLL 来设置,然后等待 RTC 寄存器操作完成,并同步之后,设置秒钟中断。然后设置RTC 的允许配置位( RTC_CRH 的 CNF 位),设置时间(其实就是设置 RTC_CNTH 和 RTC_CNTL两个寄存器)。下面我们一一这些步骤用到的库函数:在进行 RTC 配置之前首先要打开允许配置位(CNF),库函数是:RTC_EnterConfigMode(); / 允许配置在配置完成之后,千万别忘记更新配置同时退出配置模式,函数是:RTC_ExitConfigMode

26、(); /退出配置模式,更新配置设置 RTC 时钟分频数,库函数是:void RTC_SetPrescaler(uint32_t PrescalerValue);这个函数只有一个入口参数,就是 RTC 时钟的分频数,很好理解。然后是设置秒中断允许, RTC 使能中断的函数是:void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);这个函数的第一个参数是设置秒中断类型,这些通过宏定义定义的。 对于使能秒中断方法是:RTC_ITConfig(RTC_IT_SEC, ENABLE); /使能 RTC 秒中断ALIENTEK 战舰 ST

27、M32F103 V3 开发板教程313STM32F1 开发指南(库函数版)下一步便是设置时间了,设置时间实际上就是设置 RTC 的计数值,时间与计数值之间是需要换算的。库函数中设置 RTC 计数值的方法是:void RTC_SetCounter(uint32_t CounterValue)最后在配置完成之后通过这个函数直接设置 RTC 计数值。6) 更新配置,设置 RTC 中断分组。在设置完时钟之后,我们将配置更新同时退出配置模式,这里还是通过 RTC_CRH 的 CNF来实现。 库函数的方法是:RTC_ExitConfigMode();/退出配置模式,更新配置在退出配置模式更新配置之后我们在

28、备份区域 BKP_DR1 中写入 0X5050 代表我们已经初始化过时钟了,下次开机(或复位)的时候,先读取 BKP_DR1 的值,然后判断是否是 0X5050 来决定是不是要配置。接着我们配置 RTC 的秒钟中断,并进行分组。往备份区域写用户数据的函数是:void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的。 比如我们要往BKP_DR1 写入 0x5050,方法是:BKP_WriteBackupRegister(BKP_DR1, 0X5050);同时,有写便有读

29、,读取备份区域指定寄存器的用户数据的函数是:uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);这个函数就很好理解了,这里不做过多讲解。设置中断分组的方法之前已经详细讲解过, 调用 NVIC_Init 函数即可,这里不做重复讲解。7) 编写中断服务函数。最后,我们要编写中断服务函数,在秒钟中断产生的时候,读取当前的时间值,并显示到TFTLCD 模块上。通过以上几个步骤,我们就完成了对 RTC 的配置,并通过秒钟中断来更新时间。3.3 TFTLCD简介TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为: Thin Film Transistor-L

30、iquid Crystal Display。 TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体( TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 TFT-LCD 也被叫做真彩液晶显示器。ATK-4.3TFTLCD 模块采用 NT35510 作为 LCD 驱动器,该驱动器自带 LCD GRAM,无需外加独立驱动器,并且,在指令上,基本兼容 ILI9341,使用非常方便。模块采用 16 位 8080并口与外部连接(不支持其他接口方式,仅支持 16 位 8080 并口),在 8

31、080 并口模式下, LCD驱动需要用到的信号线如下: CS: LCD 片选信号。 WR:向 LCD 写入数据。 RD:从 LCD 读取数据。 D15:0:16 位双向数据线。 RST:硬复位 LCD。 RS:命令/数据标志( 0,读写命令; 1,读写数据)。 除了以上信号,我们一般还需要用到这 2 个信号RST 和BL_CTR,其中 RST 是液晶的硬复位脚,低电平有效,用于复位 NT35510 芯片,实现液晶复位,在每次初始化之前,建议大家先执行硬复位,再做初始化。 BL_CTR 则是背光控制引脚,高电平有效, BL_CTR自带了 100K 下拉电阻,所以如果这个引脚悬空,背光是不会亮的。

32、必须接高电平,背光才会亮,另外可以用 PWM 控制 BL_CTR 脚,从而控制背光的亮度。NT35510 自带 LCD GRAM ( 480*864*3 字节),并且最高支持 24 位颜色深度(1600万色),不过,我们一般使用 16 位颜色深度( 65K 色),RGB565 格式,这样,在 16 位模式下,可以达到最快的速度。3.4 FSMC简介FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位 PC 存储器卡连接,STM32 的 FSMC 接口支持包括 SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存储器。FSMC 的框图如图 2.4 所示:图3.

33、4 FSMC结构框图 从上图我们可以看出,STM32 的 FSMC 将外部设备分为 3 类: NOR/PSRAM 设备、 NAND设备、 PC 卡设备。他们共用地址数据总线等信号,他们具有不同的 CS 以区分不同的设备,比如本设计中用到的 TFTLCD 就是用的 FSMC_NE4 做片选, 其实就是TFTLCD 当成 SRAM 来控制。这里介绍下为什么可以把 TFTLCD 当成 SRAM 设备用:首先我们了解下外部 SRAM的连接,外部 SRAM 的控制一般有:地址线(如A0A18)、数据线(如D0D15)、写信号(WE)、读信号(OE)、片选信号(CS),如果 SRAM 支持字节控制,那么还

34、有 UB/LB 信号。而 TFTLCD的信号包括: RS、D0D15、WR、RD、CS、RST 和BL 等,其中真正在操作 LCD 的时候需要用到的就只有: RS、D0D15、WR、RD 和CS。其操作时序和SRAM的控制完全类似,唯一不同就是 TFTLCD 有 RS 信号,但是没有地址信号。3.5 DS18B20简介DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-55+125 ,精度为±0.5。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9l2 位的数字值读数方式。它工作在 35.5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论