嵌入式技术及应用(STM32CubeMX版)课件 任务20 用RTC制作数字钟_第1页
嵌入式技术及应用(STM32CubeMX版)课件 任务20 用RTC制作数字钟_第2页
嵌入式技术及应用(STM32CubeMX版)课件 任务20 用RTC制作数字钟_第3页
嵌入式技术及应用(STM32CubeMX版)课件 任务20 用RTC制作数字钟_第4页
嵌入式技术及应用(STM32CubeMX版)课件 任务20 用RTC制作数字钟_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

任务20 用RTC制作数字钟电子工业出版社任务要求STM32用RTC记录当前日期(年、月、日、星期)和时间(时、分、秒),用串口1与计算机进行串行通信。计算机通过串口调试助手向STM32发送控制命令,用来设置或者显示当前的日期与时间。串口的波特率BR=115200bps,数据位8位,停止位1位。要求用RTC和串口1制作一个带有闹钟功能的数字钟。具体要求如下:(1)RTC的初始日期为2023年1月1日星期日,时间为17:02:04。(2)可通过串口发送命令来显示当前的日期和时间。(3)可设置当前的日期和时间、设置闹钟的时间,设置数据的格式为BCD码。(4)闹钟时间到后,每隔10s自动输出当前时间,输出格式为“定时时间到,当前时间为:hh:mm:ss”(5)计算机发送的控制命令以及调试助手中显示的数据如表所示。任务要求控制命令及回显数据命令功能串口调试助手显示的数据55AA015A显示当前的日期和时间按格式要求输出当前日期与时间55AA02yymmdd5A设置日期设置日期是:20yy/mm/dd55AA03hhmmss5A设置时间设置时间是:hh:mm:ss55AA04ahamas5A设置闹时设置的闹钟时间是:ah:am:as其他非法输入非法表中,命令数据为16进制数,55AA为数据头,5A为数据尾,yymmdd、hhmmss、ahamas为设置值,数据格式为BCD码,例如,STM32的串口接收到0x55AA022211145A,就是要将日期设置为2022/11/14,此时需要用串口向计算机发送“设置日期是:2022/11/14”。任务要求控制命令及回显数据命令功能串口调试助手显示的数据55AA015A显示当前的日期和时间按格式要求输出当前日期与时间55AA02yymmdd5A设置日期设置日期是:20yy/mm/dd55AA03hhmmss5A设置时间设置时间是:hh:mm:ss55AA04ahamas5A设置闹时设置的闹钟时间是:ah:am:as其他非法输入非法串口接收到0x55AA015A命令后,STM32需要输出当前的日期和时间,输出格式如下:当前日期:2023/01/01,星期日当前时间:17:02:04知识储备

1.STM32中RTC的应用特性RTC是RealTimeClock的缩写,其含义是实时时钟。STM32中集成有一个RTC,其实质是一个独立的定时器,用来记录时间(时、分、秒)和日期(年、月、日),STM32中的RTC具有以下特性:(1)RTC主要由APB1总线接口和RTC核心部分组成。APB1总线接口负责RTC核心部分与APB1总线连接,这一部分由STM32的主电源供电。(2)RTC核心部分由预分器、计数器、闹钟等几部分组成,分别产生最长周期为1s的计数脉冲、并对脉冲计数和产生定时闹钟。RTC核心部分由后备电源供电,因此,STM32的主电源断电后,只要后备电源不断电,RTC仍会正常走时。RTC的实质是一个掉电后仍能继续运行的特殊定时器。

(3)RTC的核心部分工作在备份域中,STM32复位或者从待机模式唤醒等状态都不影响RTC的设置和时间的走时。(4)RTC的核心部分需通过备份域复位信号复位。(5)RTC具有日期(年、月、日、星期)和时间(时、分、秒)计时功能,还可以提供亚秒,小时具有12或24小时2种制式。(6)RTC具有闰年处理功能,能自动将月份的天数调整为28、29(闰年的2月)、30和31天。(7)RTC的时钟源有3种选择。1.STM32中RTC的应用特性

LSI为内部的RC振荡器,其频率约为40KHz,存在较大的误差。在实际应用中,RTC的时钟源一般选择频率为32.768KHz的外部低速晶体振荡器,其电路如图所示。(8)RTC有秒中断、闹钟中断和溢出中断等3个可屏蔽中断。1.STM32中RTC的应用特性函数的用法(1)HAL_RTC_GetTime()函数2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_GetTime(RTC_HandleTypeDef*hrtc,RTC_TimeTypeDef*sTime,uint32_tFormat);功能获取当前时间,并存入指定时间型结构体变量中。参数2sTime:获取的时间所存放的地址。该参数是一个指向RTC_TimeTypeDef(时间结构体)型变量的指针。RTC_TimeTypeDef类型的定义如下:typedefstruct{uint8_tHours;/*小时,取值为0~23*/uint8_tMinutes;/*分钟,取值为0~59*/uint8_tSeconds;/*秒,取值为0~59*/}RTC_TimeTypeDef;函数的用法(1)HAL_RTC_GetTime()函数2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_GetTime(RTC_HandleTypeDef*hrtc,RTC_TimeTypeDef*sTime,uint32_tFormat);功能获取当前时间,并存入指定时间型结构体变量中。参数1hrtc:指向时实钟结构体变量的指针。在HAL库中,时实钟结构体变量为hrtc,用来保存RTC的配置信息。参数3Format:输出数据的格式。取值如下:RTC_FORMAT_BIN:二进制数RTC_FORMAT_BCD:BCD码返回值HAL的状态。先定义一个RTC_TimeTypeDef类型的结构体变量tim,然后用HAL_RTC_GetTime()函数获取当前时间,并存入结构体变量tim中,然后从tim的各成员中读取小时、分钟和秒值。例如,获取当前时间,并存入时间变量time中的程序如下:RTC_TimeTypeDef time;HAL_RTC_GetTime(&hrtc,&time,RTC_FORMAT_BIN);上述程序执行后,则time.Hours中存放的是小时值,time.Minutes中存放的是分钟值,time.Seconds中存放的是秒值。获取当前时间的方法2.HAL库中有关RTC的操作函数函数的用法(2)HAL_RTC_GetDate()函数2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_GetDate(RTC_HandleTypeDef*hrtc,RTC_DateTypeDef*sDate,uint32_tFormat);功能获取当前日期,并存入指定日期型结构体变量中。参数2sDate:获取的日期所存放的地址。该参数是一个指向RTC_DateTypeDef(日期结构体)型变量的指针。RTC_DateTypeDef类型的定义如下:typedefstruct{uint8_tWeekDay;/*星期,取值为1(星期一)~6(星期六)、0(星期日)*/uint8_tMonth;/*月,取值为1~12*/uint8_tDate;/*日,取值为1~31*/uint8_tYear;/*年,取值为0~99*/}RTC_DateTypeDef;函数的用法2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_GetDate(RTC_HandleTypeDef*hrtc,RTC_DateTypeDef*sDate,uint32_tFormat);功能获取当前时间,并存入指定时间型结构体变量中。参数1hrtc:指向时实钟结构体变量的指针。在HAL库中,时实钟结构体变量为hrtc,用来保存RTC的配置信息。参数3Format:输出数据的格式。取值如下:RTC_FORMAT_BIN:二进制数RTC_FORMAT_BCD:BCD码返回值HAL的状态。(2)HAL_RTC_GetDate()函数先定义一个RTC_DateTypeDef类型的结构体变量dat,然后用HAL_RTC_GetDate()函数获取当前日期,并存入结构体变量dat中,然后从dat的各成员中读取星期、年、月、日的值。例如,获取当前日期,并存入日期变量date中的程序如下:RTC_DateTypeDef date;HAL_RTC_GetDate(&hrtc,&date,RTC_FORMAT_BIN);上述程序执行后,则date.WeekDay中存放的是星期值,date.Month中存放的是月值,date.Date中存放的是日值,date.Year中存放的是年值。获取当前日期的方法2.HAL库中有关RTC的操作函数函数的用法2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_SetTime(RTC_HandleTypeDef*hrtc,RTC_TimeTypeDef*sTime,uint32_tFormat);功能设置当前时间。参数1hrtc:指向时实钟结构体变量的指针。参数2sTime:时间变量的指针。该时间变量是一个RTC_TimeTypeDef(时间结构体)型变量,用来保存所要设置的时间值。参数3Format:输出数据的格式。取值如下:RTC_FORMAT_BIN:二进制数RTC_FORMAT_BCD:BCD码返回值HAL的状态。(3)HAL_RTC_SetTime()函数先定义一个RTC_TimeTypeDef类型的结构体变量tim,然后对tim变量的各成员赋值,再用HAL_RTC_SetTime()函数设置当前时间。例如,将当前时间设为18:23:48的程序如下:RTC_TimeTypeDeftime;time.Hours=18;time.Minutes=23;time.Seconds=48;HAL_RTC_SetTime(&hrtc,&time,RTC_FORMAT_BIN);设置当前时间的方法2.HAL库中有关RTC的操作函数函数的用法2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_SetDate(RTC_HandleTypeDef*hrtc,RTC_DateTypeDef*sDate,uint32_tFormat);功能设置当前日期。参数1hrtc:指向时实钟结构体变量的指针。参数2sDate:日期变量的指针。该日期变量是一个RTC_DateTypeDef(日期结构体)型变量,用来保存所要设置的日期值。参数3Format:输出数据的格式。取值如下:RTC_FORMAT_BIN:二进制数RTC_FORMAT_BCD:BCD码返回值HAL的状态。(4)HAL_RTC_SetDate()函数先定义一个RTC_DateTypeDef类型的结构体变量dat,然后对dat变量的各成员赋值,再用HAL_RTC_SetDate()函数设置当前日期。例如,将当前日期设为21-11-16的程序如下:RTC_DateTypeDefdate;date.Year=21;date.Month=11;date.Date=16;HAL_RTC_SetDate(&hrtc,&date,RTC_FORMAT_BIN);设置当前日期的方法2.HAL库中有关RTC的操作函数函数的用法(5)HAL_RTC_SetAlarm()函数2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_SetAlarm(RTC_HandleTypeDef*hrtc,RTC_AlarmTypeDef*sAlarm,uint32_tFormat);功能设置闹钟时间。参数2sAlarm:指向闹钟结构体变量的指针。该变量是一个RTC_AlarmTypeDef(闹钟结构体)型的结构变量,用来保存所要设置的闹钟时间。RTC_AlarmTypeDef类型的定义如下:typedefstruct{RTC_TimeTypeDefAlarmTime;/*闹钟时间*/uint32_tAlarm;/*闹钟ID号,对于STM32F1x其ID号为0*/}RTC_AlarmTypeDef;函数的用法2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_SetAlarm(RTC_HandleTypeDef*hrtc,RTC_AlarmTypeDef*sAlarm,uint32_tFormat);功能设置闹钟时间。参数1hrtc:指向时实钟结构体变量的指针。在HAL库中,时实钟结构体变量为hrtc,用来保存RTC的配置信息。参数3Format:输出数据的格式。取值如下:RTC_FORMAT_BIN:二进制数RTC_FORMAT_BCD:BCD码返回值HAL的状态。(5)HAL_RTC_SetAlarm()函数先定义一个RTC_AlarmTypeDef类型的结构体变量alarm,然后对alarm变量的各成员赋值,再用HAL_RTC_SetAlarm()函数设置闹钟时间。例如,将闹钟时间设为18:23:48的程序如下:RTC_AlarmTypeDefalarm; //定义闹钟变量alarm.Alarm=0; //设置闹钟ID号alarm.AlarmTime.Hours=18; //设置闹钟的小时:18时alarm.AlarmTime.Minutes=23; //设置闹钟的分:23分alarm.AlarmTime.Seconds=48; //设置闹钟的秒:48秒HAL_RTC_SetAlarm(&hrtc,&alarm,RTC_FORMAT_BIN);//设置闹钟2.HAL库中有关RTC的操作函数用HAL_RTC_SetAlarm()函数设置闹钟时间的方法函数的用法2.HAL库中有关RTC的操作函数原型HAL_StatusTypeDefHAL_RTC_SetAlarm_IT(RTC_HandleTypeDef*hrtc,RTC_AlarmTypeDef*sAlarm,uint32_tFormat);功能设置闹钟时间并开启闹钟中断。参数1hrtc:指向时实钟结构体变量的指针。参数2sAlarm:指向闹钟结构体变量的指针。该变量是一个RTC_AlarmTypeDef(闹钟结构体)型的结构变量,用来保存所要设置的闹钟时间。参数3Format:输出数据的格式。取值如下:RTC_FORMAT_BIN:二进制数RTC_FORMAT_BCD:BCD码返回值HAL的状态。(6)HAL_RTC_SetAlarm_IT()函数先定义一个RTC_AlarmTypeDef类型的结构体变量alarm,然后对alarm变量的各成员赋值,再用HAL_RTC_SetAlarm()函数设置闹钟时间。例如,将闹钟时间设为18:23:48,并开启闹钟中断,其程序如下:RTC_AlarmTypeDefalarm; //定义闹钟变量alarm.Alarm=0; //设置闹钟ID号alarm.AlarmTime.Hours=0x18; //设置闹钟的小时:18时alarm.AlarmTime.Minutes=0x23; //设置闹钟的分:23分alarm.AlarmTime.Seconds=0x48; //设置闹钟的秒:48秒HAL_RTC_SetAlarm_IT(&hrtc,&alarm,RTC_FORMAT_BCD);/*设置闹钟,并开启闹钟中断,数据为BCD码*/用HAL_RTC_SetAlarm_IT()函数设置闹钟时间的方法2.HAL库中有关RTC的操作函数函数的用法2.HAL库中有关RTC的操作函数原型__weakvoidHAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef*hrtc);功能闹钟中断的回调函数。若使能了闹钟中断,则当闹钟时间到,STM32就会执行此函数。参数hrtc:指向时实钟结构体变量的指针。返回值HAL的状态。(7)HAL_RTC_AlarmAEventCallback()函数注意:在HAL中,该函数为弱函数,内部无操作,需用户重新定义。重定义的内容为闹钟时间到后STM32所要处理的工作。voidHAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef*hrtc){ /*闹钟时间到时的处理*/ HAL_RTC_SetAlarm_IT(hrtc,&alarm,RTC_FORMAT_BIN);/*再次设置闹钟,并开启闹钟中断,数据为二进制数,如果不需要再设开闹钟,则去掉此句*/}2.HAL库中有关RTC的操作函数重定义HAL_RTC_AlarmAEventCallback()函数的框架结构说明:STM32进入闹钟中断服务函数中后会关闭闹钟中断,所以,在用户自定义的闹钟中断的回调函数中,如果要再闹钟中断,则需在函数最后面重新开启闹钟中断,否则闹钟中断服务函数执行后,STM32将不再闹钟。2.HAL库中有关RTC的操作函数回调函数的形参是一个指针,参数名是hrtc。在回调函数中hrtc为局部变量,它虽与全局量hrtc同名,但两者并不是同一个变量,在函数体中若局变量与全局变量同名,则所用的变量为局部变量,而不是全局变量。在第4行,HAL_RTC_SetAlarm_IT()函数的第1个形数也是一个指针,它与回调函数的参数为同一参数。因此,第4行中HAL_RTC_SetAlarm_IT()函数的第1个实参为hrtc。如果回调函数的形参为RTC_HandleTypeDef*shrtc(参数名与hrtc不同),则第4行代码应为:HAL_RTC_SetAlarm_IT(&hrtc,&alarm,RTC_FORMAT_BIN);//全局变量hrtc的地址或者:HAL_RTC_SetAlarm_IT(shrtc,&alarm,RTC_FORMAT_BIN);//回调函数中的形参2.HAL库中有关RTC的操作函数例如,STM32每隔1分钟就用串口1输出当前时间,如果用闹钟中断编程,则用户重定义的闹钟中断的回调函数如下:voidHAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef*shrtc){ RTC_AlarmTypeDefiAlarm; RTC_TimeTypeDef iTime; HAL_RTC_GetTime(shrtc,&iTime,RTC_FORMAT_BIN); printf("当前时间为:%2d:%2d:%2d\r\n",iTime.Hours,iTime.Minutes,iTime.Seconds); iTime.Minutes+=1; if(iTime.Minutes>59) { iTime.Minutes=0; iTime.Hours+=1; if(iTime.Hours>23) iTime.Hours=0; }2.HAL库中有关RTC的操作函数例如,STM32每隔1分钟就用串口1输出当前时间,如果用闹钟中断编程,则用户重定义的闹钟中断的回调函数如下: iAlarm.Alarm=0; iAlarm.AlarmTime=iTime; HAL_RTC_SetAlarm_IT(shrtc,&iAlarm,RTC_FORMAT_BIN);/*再次设置闹钟,并开启闹钟中断,数据为二进制数*/}实现方法与步骤任务20的硬件电路:

1.搭建电路

2.生成RTC的初始化代码步骤(1)启动STM32CubeMX,然后新建STM32CubeMX工程、配置SYS、RCC和时钟,配置的结果与任务10相同。(2)配置通用串口1(USART1)按照前面任务中介绍的方法将串口1配置成异步通信口,波特率为115200bps,8位数据位,1位停止位,接收中断的优先级为1级。

2.生成RTC的初始化代码(3)配置RTC第1步:设置RCC

2.生成RTC的初始化代码(3)配置RTC第2步:激活RTC的时钟源和日历功能。第3步:配置RTC的参数。

2.生成RTC的初始化代码(3)配置RTC第4步:设置RTC闹钟中断。

2.生成RTC的初始化代码(3)配置RTC第5步:设置RTC的时钟源。(4)配置工程将工程名设置成Task20,并设置保存工程的位置、所用的IDE以及代码生器的相关选项,将工程保存至“D:\ex”文件夹中,然后生成Keil工程代码。

3.编写数字钟的应用程序步骤(1)将任务10中的User子文件夹复制至“D:\ex\Task20”文件夹中。User子文件夹中保存的是串行通信文件Serial.c和Serial.h。(2)打开任务20的Keil工程,并在Keil工程中新建User组,然后将“D:\ex\Task20\User”文件夹中的Serial.c文件添加至User组中。(3)在Keil工程的include路径中添加“D:\ex\Task20\User”文件夹,该文件夹是Serial.h头文件所在的文件夹。(4)在main.c文件中编写用户应用程序,程序代码如下:

12345678910111213141516…#include "stdio.h"#include "string.h"#include "Serial.h"…const uint8_tComStr[3]={0x55,0xaa}; //命令头const uint8_t ComStr1[5]={0x55,0xaa,0x01,0x5a};//命令1:显示日期和时间…void RxDataProc(void);//接收数据处理函数说明…intmain(void){

…HAL_UART_Receive_IT(&huart1,&aRxBuf,1); /*使能串口1接收中断,并指定接收缓冲区和接收数据长度*/while(1){3.编写数字钟的应用程序

1617

1819202122232425262728293031{

if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET) /*判断是否是空闲中断(IDLE)发生*/

{/****************************************************************/ RxDataProc();//接收数据处理/****************************************************************/ memset(UserRxBuf,0,UserRxCnt);//串口接收缓冲区清0 UserRxCnt=0; //串口接收计数值清0 __HAL_UART_CLEAR_IDLEFLAG(&huart1); /*清除IDLE中断请求标志*/

}}}…/********************************************************************** RxDataProc()功能:串口接收数据处理3.编写数字钟的应用程序

3233343536373839404142434445464748

参数:无返回值:无***********************************************************************/void RxDataProc(void){char * fp;RTC_TimeTypeDef iTime; //定义时间变量RTC_DateTypeDef iDate; //定义日期变量RTC_AlarmTypeDef iAlarm; //定义闹钟变量if((strstr((constchar*)UserRxBuf,(constchar*)ComStr1))!=NULL){ //收到0x55aa015a 显示日期和时间 HAL_RTC_GetTime(&hrtc,&iTime,RTC_FORMAT_BIN);//获取当前时间 HAL_RTC_GetDate(&hrtc,&iDate,RTC_FORMAT_BIN);//获取当前日期 printf("当前日期:%d/%02d/%02d,",2000+iDate.Year, iDate.Month,iDate.Date); switch(iDate.WeekDay) //输出星期 {3.编写数字钟的应用程序

4950515253545556575859606162636465 case 0: printf("星期日\r\n"); break; case 1: printf("星期一\r\n"); break; case 2: printf("星期二\r\n"); break; case 3: printf("星期三\r\n"); break; case 4: printf("星期四\r\n"); break; case 5: printf("星期五\r\n");3.编写数字钟的应用程序

6667686970717273747576777879808182 break; case 6: printf("星期六\r\n"); break; } printf("当前时间:%02d:%02d:%02d\r\n",iTime.Hours, iTime.Minutes,iTime.Seconds); return;

}

if((fp=strstr((constchar*)UserRxBuf,(constchar*)ComStr))!=NULL){ //收到0x55aa if(*(fp+6)==0x5a) //检查是否收到了帧尾0x5a { //收到了帧尾0x5a switch(*(fp+2)) //判断命令的类型

即命令的第3字节 { case 2: //55AA02yymmdd5A设置日期 iDate.Year=*(fp+3);3.编写数字钟的应用程序

8384858687888990919293949596979899 iDate.Month=*(fp+4); iDate.Date=*(fp+5); HAL_RTC_SetDate(&hrtc,&iDate,RTC_FORMAT_BCD); printf("设置日期是:%x/%02x/%02x\r\n", 0x2000+iDate.Year,iDate.Month,iDate.Date); break; case 3: //55AA03hhmmss5A设置时间 iTime.Hours=*(fp+3); //修改小时 iTime.Minutes=*(fp+4);//修改分 iTime.Seconds=*(fp+5);//修改秒 HAL_RTC_SetTime(&hrtc,&iTime,RTC_FORMAT_BCD); printf("设置时间是:%02x:%02x:%02x\r\n",iTime.Hours, iTime.Minutes,iTime.Seconds); break; case 4: //55AA04ahamas5A设置闹时 iAlarm.Alarm=0; //设置闹钟ID号 iAlarm.AlarmTime.Hours=*(fp+3); //设置闹钟的小时3.编写数字钟的应用程序

100101102103104105106107108109110111112113114115116

iAlarm.AlarmTime.Minutes=*(fp+4); //设置闹钟的分 iAlarm.AlarmTime.Seconds=*(fp+5); //设置闹钟的秒 /*设置闹钟,并开启闹钟中断,数据为BCD码*/ HAL_RTC_SetAlarm_IT(&hrtc,&iAlarm,RTC_FORMAT_BCD); printf("设置的闹钟时间是:%02x:%02x:%02x\r\n", iAlarm.AlarmTime.Hours, iAlarm.AlarmTime.Minutes, iAlarm.AlarmTime.Seconds ); break; default: printf("命令编号错误!\r\n"); } } else {/*没收到数据尾0x5a*/ printf("数据的个数非法或者数据尾非法!\r\n"); }3.编写数字钟的应用程序

117118119120121122123124125126127128129130131132133

}else{ /*没收到数据头*/ printf("数据头非法!\r\n");}}/********************************************************************** HAL_RTC_AlarmAEventCallback()功能:RTC闹钟事件回调函数参数:指向时实钟结构体变量的指针返回值:无***********************************************************************/voidHAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef*hrtc){

温馨提示

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

评论

0/150

提交评论