




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章STM32通用同步/异步收发器本章讲述了STM32通用同步异步收发器,包括串行通信基础、STM32的USART工作原理、USART的HAL驱动程序、采用STM32Cube和HAL库的USART串行通信应用实例。8.1串行通信基础在串行通信中,参与通信的两台或多台设备通常共享一条物理通路。发送者依次逐位发送一串数据信号,按一定的约定规则为接收者所接收。由于串行端口通常只是规定了物理层的接口规范,所以为确保每次传送的数据报文能准确到达目的地,使每一个接收者能够接收到所有发向它的数据,必须在通信连接上采取相应的措施。8.1.1串行异步通信数据格式无论是RS-232还是RS-485,均可采用通用异步收发数据格式。串行异步收发(UART)通信的数据格式如图8-1所示。图8-1串行异步收发(UART)通信的数据格式8.1.2串行同步通信数据格式同步通信是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。同步通信传送的多字节数据由于中间没有空隙,因而传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。串行同步收发通信的数据格式如图8-2所示。图8-2串行同步收发通信的数据格式通信是嵌入式系统的重要功能之一嵌入式系统中使用的通信接口有很多,如UART、SPI、I2C、USB和CAN等。其中,UART(UniversalAsynchronousReceiver/Transmitter,通用异步收发器)是最常见、最方便、使用最频繁的通信接口。在嵌入式系统中,很多微控制器或者外设模块都带有UART接口。例如,STM32F407系列微控制器、6轴运动处理组件MPU6050(包括3轴陀螺仪和3轴加速器)、超声波测距模块US-100、GPS模块UBLOX、13.56MHz非接触式IC卡读卡模块RC522等。8.2STM32的USART工作原理它们彼此通过UART相互通信交换数据,但由于UART通信距离较短,一般仅能支持板级通信,因此,通常在UART的基础上,经过简单扩展或变换,就可以得到实际生活中常用的各种适于较长距离的串行数据通信接口,如R-S232、RS-485和IrDA等。出于成本和功能两方面的考虑,目前大多的半导体厂商选择在微控制器内部集成UART模块。ST有限公司的STM32F407系列微控制器也不例外,在它内部配备了强大的UART模块USART(UniversalSynchronous/AsynchronousReceiver/Transmitter,通用同步/异步收发器)。STM32F407的USART模块不仅具备UART接口的基本功能,而且还支持同步单向通信、LIN(局部互联网)协议、智能卡协议、IrDASIR编码/解码规范、调制解调器(CTS/RTS)操作。8.2.1USART介绍通用同步/异步收发器可以说是嵌入式系统中除了GPIO外最常用的一种外设。USART常用的原因不在于其性能超强,而是因为USART的简单、通用。USART通信的另一个优势是可以适应不同的物理层。例如,使用RS-232或RS-485可以明显提升USART通信的距离,无线FSK调制可以降低布线施工的难度。所以USART口在工控领域也有着广泛的应用,是串行接口的工业标准(IndustryStandard)。SM32F407微控制器的小容量产品有2个USART,中等容量产品有3个USART,大容量产品有3个USART+2个UART(UniversalAsynchronousReceiver/Transmitter)。8.2.2USART的主要特性USART主要特性如下:(1)全双工的,异步通信。(2)NRZ标准格式。(3)分数波特率发生器系统。发送和接收共用的可编程波特率,最高达10.5Mb/s。(4)可编程数据字长度(8位或9位)。(5)可配置的停止位-支持1或2个停止位。(6)LIN主发送同步断开符的能力以及LIN从检测断开符的能力。当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符。(7)发送方为同步传输提供时钟。(8)IRDASIR编码器解码器。在正常模式下支持3/16位的持续时间。(9)智能卡模拟功能。智能卡接口支持ISO7816-3标准里定义的异步智能卡协议;智能卡用到0.5和1.5个停止位。(10)单线半双工通信。(11)可配置的使用DMA的多缓冲器通信。在SRAM里利用集中式DMA缓冲接收/发送字节。(12)单独的发送器和接收器使能位。(13)检测标志。接收缓冲器满;发送缓冲器空;传输结束标志。(14)校验控制。发送校验位;对接收数据进行校验。(15)四个错误检测标志。溢出错误;噪声错误;帧错误;校验错误。(16)10个带标志的中断源。CTS改变;LIN断开符检测;发送数据寄存器空;发送完成;接收数据寄存器满;检测到总线为空闲;溢出错误;帧错误;噪声错误;校验错误。(17)多处理器通信。如果地址不匹配,则进入静默模式。(18)从静默模式中唤醒。通过空闲总线检测或地址标志检测。(19)两种唤醒接收器的方式。地址位(MSB,第9位),总线空闲。8.2.3USART的功能STM32F407微控制器USART接口通过三个引脚与其他设备连接在一起,其内部结构如图8-3所示。图8-3USART结构框图(1)总线在发送或接收前应处于空闲状态。(2)一个起始位。(3)一个数据字(8或9位),最低有效位在前。(4)0.5,1.5,2个的停止位,由此表明数据帧的结束。(5)使用分数波特率发生器-12位整数和4位小数的表示方法。(6)一个状态寄存器(USART_SR)。(7)数据寄存器(USART_DR)。(8)一个波特率寄存器(USART_BRR),12位的整数和4位小数。(9)一个智能卡模式下的保护时间寄存器(USART_GTPR)。1.波特率控制波特率控制即图8-3下部虚线框的部分。通过对USART时钟的控制,可以控制USART的数据传输速度。通过改变USART外设时钟源的分频系数USARTDIV,可以设置USART的波特率。波特率决定了USART数据通信的速率,通过设置波特率寄存器(USART_BRR)来配置波特率。标准USART的波特率计算公式:波特率=fPCLK/(8x(2-OVER8)xUSARTDIV)式中,fpcLk是USART总线时钟;OVER8是过采样设置;USARTDIV是需要存储在USART_BRR中的数据。一般根据需要的波特率计算USARTDIV,然后换算成存储到USART_BRR的数据。2.收发控制收发控制即图8-3的中间部分。该部分由若干个控制寄存器组成,如USART控制寄存器(controlregister)CR1、CR2、CR3和USART状态寄存器(statusregister)SR等。通过向以上控制寄存器写入各种参数,控制USART数据的发送和接收。同时,通过读取状态寄存器,可以查询USART当前的状态。USART状态的查询和控制可以通过库函数来实现,因此,无须深入了解这些寄存器的具体细节(如各个位代表的意义),而只需学会使用USART相关的库函数即可。3.数据存储转移数据存储转移即图8-3上部灰色的部分。它的核心是两个移位寄存器:发送移位寄存器和接收移位寄存器。这两个移位寄存器负责收发数据并做并串转换。(1)USART数据发送过程当USART发送数据时,内核指令或DMA外设先将数据从内存(变量)写入发送数据寄存器TDR。然后,发送控制器适时地自动把数据从TDR加载到发送移位寄存器,将数据一位一位地通过Tx引脚发送出去。(2)USART数据接收过程USART数据接收是USART数据发送的逆过程。当USART接收数据时,数据从Rx引脚一位一位地输入到接收移位寄存器中。然后,接收控制器自动将接收移位寄存器的数据转移到接收数据寄存器RDR中。最后,内核指令或DMA将接收数据寄存器RDR的数据读入内存(变量)中。8.2.4USART的通信时序字长可以通过编程USART_CR1寄存器中的M位,选择8或9位,如图8-4所示。图8-4中的LBCL,最后一位时钟脉冲(Lastbitclockpulse),为控制寄存器2(USART_CR2)的位8。在同步模式下,该位用于控制是否在CK引脚上输出最后发送的那个数据位(最高位)对应的时钟脉冲。0:最后一位数据的时钟脉冲不从CK输出;1:最后一位数据的时钟脉冲会从CK输出。(2)UART4和UART5上不存在这一位。
图8-4USART通信时序8.2.5USART的中断STM32F407系列微控制器的USART主要有以下各种中断事件:(1)发送期间的中断事件包括发送完成(TC)、清除发送(CTS)、发送数据寄存器空(TXE)。(2)接收期间:空闲总线检测(IDLE)、溢出错误(ORE)、接收数据寄存器非空(RXNE)、校验错误(PE)、LIN断开检测(LBD)、噪声错误(NE,仅在多缓冲器通信)和帧错误(FE,仅在多缓冲器通信)。如果设置了对应的使能控制位,这些事件就可以产生各自的中断,如表8-1所示。中断事件事件标志使能位发送数据寄存器空TXETXEIECTS标志CTSCTSIE发送完成TCTCIE接收数据就绪可读RXNERXNEIE检测到数据溢出OREOREIE检测到空闲线路IDLEIDLEIE奇偶检验错PEPEIE断开标志LBDLBDIE噪声标志、溢出错误和帧错误NE或ORT或FEEIE表8-1STM32F407系列微控制器USART的中断事件及其使能标志位8.2.6USART的相关寄存器现将STM32F407的USART相关寄存器名称介绍如下,可以用半字(16位)或字(32位)的方式操作这些外设寄存器,由于采用库函数方式编程,故不做进一步的探讨。(1)状态寄存器(USART_SR)。(2)数据寄存器(USART_DR)。(3)波特比率寄存器(USART_BRR)。(4)控制寄存器1(USART_CR1)。(5)控制寄存器2(USART_CR2)。(6)控制寄存器3(USART_CR3)。(7)保护时间和预分频寄存器(USART_GTPR)。8.3.1常用功能函数串口的驱动程序头文件是stm32f4xx_hal_uart.h。串口操作的常用HAL函数如表8-2所示。8.3USART的HAL驱动程序分组函数名功能说明初始化和总体功能
HAL_UART_Init()串口初始化,设置串口通信参数HAL_UART_MspInit()串口初始化的MSP弱函数,在HAL_UART_Init()中被调用。重新实现的这个函数一般用于串口引脚的GPIO初始化和中断设置HAL_UART_GetState()获取串口当前状态HAL_UART_GetError()返回串口错误代码HAL_UART_Transmit()阻塞方式发送一个缓冲区的数据,发送完成或超时后才返回HAL_UART_Receive()阻塞方式将数据接收到一个缓冲区,接收完成或超时后才返回阻塞式传输HAL_UART_Transmit_IT()以中断方式(非阻塞式)发送一个缓冲区的数据HAL_UART_Receive_IT()以中断方式(非阻塞式)将指定长度的数据接收到缓冲区中断方式传输HAL_UART_Transmit_DMA()以DMA方式发送一个缓冲区的数据HAL_UART_Receive_DMA()以DMA方式将指定长度的数据接收到缓冲区DMA方式传输HAL_UART_Transmit_DMA()以DMA方式发送一个缓冲区的数据HAL_UART_Receive_DMA()以DMA方式将指定长度的数据接收到缓冲区表8-2串口操作的常用HAL函数HAL_UART_DMAPause()暂停DMA传输过程HAL_UART_DMAResume()继续先前暂停的DMA传输过程HAL_UART_DMAStop()停止DMA传输过程HAL_UART_Abort()终止以中断方式或DMA方式启动的传输过程,函数自身以阻塞方式运行HAL_UART_AbortTransmit()终止以中断方式或DMA方式启动的数据发送过程,函数自身以阻塞方式运行HAL_UART_AbortReceive()终止以中断方式或DMA方式启动的数据接收过程,函数自身以阻塞方式运行HAL_UART_Abort_IT()终止以中断方式或DMA方式启动的传输过程,函数自身以非阻塞方式运行HAL_UART_AbortTransmit_IT()终止以中断方式或DMA方式启动的数据发送过程,函数自身以非阻塞方式运行HAL_UART_AbortReceive_IT()终止以中断方式或DMA方式启动的数据接收过程,函数自身以非阻塞方式运行1. 串口初始化函数HAL_UART_Init()用于串口初始化,主要是设置串口通信参数。其原型定义如下:HAL_StatusTypeDefHAL_UART_Init(UART_HandleTypeDef*huart)2. 阻塞式数据传输串口数据传输有两种模式:阻塞模式和非阻塞模式。(1)阻塞模式(blockingmode)就是轮询模式,例如,使用函数HAL_UART_Transmit()发送一个缓冲区的数据时,这个函数会一直执行,直到数据传输完成或超时之后,函数才返回。(2)非阻塞模式(non-blockingmode)是使用中断或DMA方式进行数据传输,例如,使用函数HAL_UART_Transmit_IT()启动一个缓冲区的数据传输后,该函数立刻返回。数据传输的过程引发各种事件中断,用户在相应的回调函数里进行处理。以阻塞模式发送数据的函数是HAL_UART_Transmit(),其原型定义如下:HAL_StatusTypeDefHAL_UART_Transmit(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize,uint32_tTimeout)3. 非阻塞式数据传输以中断或DMA方式启动的数据传输是非阻塞式的。我们将在第12章介绍DMA方式,在本章只介绍中断方式。以中断方式发送数据的函数是HAL_UART_Transmit_IT(),其原型定义如下:HAL_StatuaTypeDetHAL_UART_Transmit_IT(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize)8.3.2常用的宏函数在HAL驱动程序中,每个外设都有一些以“_HAL”为前缀的宏函数。这些宏函数直接操作寄存器,主要是进行启用或禁用外设、开启或禁止事件中断、判断和清除中断标志位等操作。串口操作常用的宏函数如表8-3所示。宏函数功能描述_HAL_UART_ENABLE(_HANDLE_)启用某个串口,例如_HAL_UART_ENABLE(&huart1)_HAL_UART_DISABLE(_HANDLE_)禁用某个串口,例如_HAL_UART_DISABLE(&huartl)_HAL_UART_ENABLE_IT(_HANDLE,INTERRUPT)允许某个事件产生硬件中断,例如_HAL_UART_ENABLE_IT(&huartl,UART_IT_IDLE)_HAL_UART_ENABLE_IT(_HANDLE,INTERRUPT)禁止某个事件产生硬件中断,例如_HAL_UART_ENABLE_IT(&huartl,UART_IT_IDLE)_HAL_UART_GET_IT_SOURCE(_HANDLE,IT)检查某个事件是否被允许产生硬件中断_HAL_UART_GET_FLAG(HANDLE,FLAG_)检查某个事件的中断标志位是否被置位_HAL_UART_CLEAR_FLAG(HANDLE,FLAG)清除某个事件的中断标志位表8-3串口操作常用的宏函数这些宏函数中的参数_HANDLE_是串口外设对象指针,参数_INTERRUPT_和_IT_都是中断事件类型。一个串口只有一个中断号,但是中断事件类型较多,文件stm32f4xx_hal_uart.h定义了这些中断事件类型的宏,全部中断事件类型定义如下:#defineUART_IT_PE((uint32_t)(UART_CR1_REG_INDEX<<28U|USART_CR1_PEIE))#defineUART_IT_TXE((uint32_t)(UART_CR1_REG_INDEX<<28U|USART_CR1_TXEIE))#defineUART_IT_TC((uint32_t)(UART_CR1_REG_INDEX<<28U|USART_CR1_TCIE))#defineUART_IT_RXNE((uint32_t)(UART_CR1_REG_INDEX<<28U|USART_CR1_RXNEIE))#defineUART_IT_IDLE((uint32_t)(UART_CR1_REG_INDEX<<28U|USART_CR1_IDLEIE))#defineUART_IT_LBD((uint32_t)(UART_CR2_REG_INDEX<<28U|USART_CR2_LBDIE))#defineUART_IT_CTS((uint32_t)(UART_CR3_REG_INDEX<<28U|USART_CR3_CTSIE))#defineUART_IT_ERR((uint32_t)(UART_CR3_REG_INDEX<<28U|USART_CR3_EIE))
8.3.3中断事件与回调函数一个串口只有一个中断号,也就是只有一个ISR,例如,USART1的全局中断对应的ISR是USART1_IRQHandler()。在STM32CubeMX自动生成代码时,其ISR框架会在文件stm32f4xx_it.c中生成,代码如下:voidUSART1_IRQHandler(void)//USART1中断ISR{HAL_UART_IRQHandler(&huart1);//串口中断通用处理函数}所有串口的ISR都是调用HAL_UART_IRQHandler()这个处理函数,这个函数是中断处理通用函数。这个函数会判断产生中断的事件类型、清除事件中断标志位、调用中断事件对应的回调函数。对函数HAL_UART_IRQHandler()进行代码跟踪分析,整理出如表8-4所示的串口中断事件类型与回调函数的对应关系。注意,并不是所有中断事件有对应的回调函数,例如,UART_IT_IDLE中断事件就没有对应的回调函数。中断事件类型宏定义中断事件描述对应的回调函数UARTIT_CTSCTS信号变化中断无UARTIT_LBDLIN打断检测中断无UART_IT_TXE发送数据寄存器非空中断无UART_IT_TC传输完成中断,用于发送完成HAL_UART_TxCpltCallback()UART_ITRXNE接收数据寄存器非空中断HAL_UART_RxCpltCallback()UART_IT_IDLE线路空闲状态中断无UART_IT_PE奇偶校验错误中断HAL_UART_ErrorCallback()UARTIT_ERR发生帧错误、噪声错误、溢出错误的中断HAL_UART_ErrorCallback()表8-4串口中断事件类型及其回调函数STM32通常具有3个以上的串行通信口(USART),可根据需要选择其中一个。在串行通信应用的实现中,难点在于正确配置、设置相应的USART。与51单片机不同的是,除了要设置串行通信口的波特率、数据位数、停止位和奇偶校验等参数外,还要正确配置USART涉及的GPIO和USART口本身的时钟,即使能相应的时钟。否则,无法正常通信。8.4采用STM32Cube和HAL库的USART串行通信应用实例8.4.1STM32的USART的基本配置流程STM32F4的USART的功能有很多。最基本的功能就是发送和接收。其功能的实现需要串口工作方式配置、串口发送和串口接收三部分程序。本节只介绍基本配置,其他功能和技巧都是在基本配置的基础上完成的,读者可参考相关资料。HAL库提供的串口相关操作函数。(1)串口参数初始化(波特率/停止位等),并使能串口。串口作为STM32的一个外设,HAL库为其配置了串口初始化函数。接下来看看串口初始化函数HAL_UART_Init相关知识,定义如下:HAL_StatusTypeDefHAL_UART_Init(UART_HandleTypeDef*huart);(2)使能串口和GPIO口时钟。要使用串口,所以必须使能串口时钟和使用到的GPIO口时钟。例如要使用串口1,所以必须使能串口1时钟和GPIOA时钟(串口1使用的是PA9和PA10)。(3)GPIO口初始化设置(速度,上下拉等)以及复用映射配置。在HAL库中GPIO口初始化参数设置和复用映射配置是在函数HAL_GPIO_Init中一次性完成的。这里只需要注意,要复用PA9和PA10为串口发送接收相关引脚,需要配置GPIO口为复用,同时复用映射到串口1。配置源码如下:GPIO_Initure.Pin=GPIO_PIN_9;//PA9GPIO_Initure.Mode=GPIO_MODE_AF_PP;//复用推挽输出GPIO
Initure.Pull=GPIO_PULLUP;//上拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(GPIOA,&GPIO_Initure);//初始化
PA9GPIO_Initure.Pin=GPIO_PIN_10;//PA10GPIO
Initure.Mode=GPIO_MODE_AF_INPUT;//模式要设置为复用输入模式!HAL_GPIO_Init(GPIOA,&GPIO_Initure);//初始化
PA10(4)开启串口相关中断,配置串口中断优先级。HAL库中定义了一个使能串口中断的标识符__HAL_UART_ENABLE_IT,可以把它当一个函数来使用,具体定义请参考HAL库文件stm32f4xx_hal_uart.h中该标识符定义。例如要使能接收完成中断,方法如下:HAL_UART_ENABLE_IT(huart,UART_IT_RXNE); //开启接收完成中断(5)编写中断服务函数。串口1中断服务函数为:voidUSART1_IRQHandler(void);当发生中断的时候,程序就会执行中断服务函数。然后在中断服务函数中编写们相应的逻辑代码即可。(6)串口数据接收和发送。STM32F4的发送与接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了TDR和RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。HAL库操作USART_DR寄存器发送数据的函数是:HAL_StatusTypeDefHAL_UART_Transmit(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize,uint32_tTimeout);通过该函数向串口寄存器USART_DR写入一个数据。HAL库操作USART_DR寄存器读取串口接收到的数据的函数是:HAL_StatusTypeDefHAL_UART_Receive(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize,uint32_tTimeout);通过该函数可以读取串口接收到的数据。8.4.2USART串行通信应用的硬件设计为利用USART实现开发板与计算机通信,需要用到一个USB转USART的IC电路,选择CH340G芯片来实现这个功能。CH340G是一个USB总线的转接芯片,实现USB转USART、USB转IrDA红外或者USB转打印机接口。使用其USB转USART功能,具体电路设计如图8-6所示。将CH340G的TXD引脚与USART1的RX引脚连接CH340G的RXD引脚与USART1的TX引脚连接。CH340G芯片集成在开发板上,其地线(GND)已与控制器的GND相连。在本实例中,编写一个程序实现STM32通过串口1和上位机对话,STM32在收到上位机发过来的字符串(以回车换行结束)后,会返回给上位机。同时每隔一定时间,通过串口1输出一段信息到电脑。DS0闪烁,提示程序在运行。图8-6USB转串行接口的硬件电路设计8.4.3 USART串行通信应用的软件设计STM32F407ZGT6有四个USART和两个UART,其中USART1和USART6的时钟来源于APB2总线时钟,其最大频率为84MHz,其他四个的时钟来源于APB1总线时钟,其最大频率为42MHz。USART_InitTypeDef结构体成员用于设置USART工作参数,并由外设初始化配置函数,比如MX_USART1_UART_Init()调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。初始化结构体定义在stm32f4xx_hal_usart.h文件中,初始化库函数定义在stm32f4xx_hal_usart.c文件中,编程时可以结合这两个文件内注释使用。USART_InitTypeDef结构体如下。typedefstruct{uint32_tBaudRate;//波特率uint32_tWordLength;//字长uint32_tStopBits;//停止位uint32_tParity;//校验位uint32_tMode;//UART模式uint32_tHwFlowCtl;//硬件流控制uint32_tOverSampling;//过采样模式}USART_InitTypeDef;1.通过STM32CubeMX新建工程通过STM32CubeMX新建工程的步骤如下:(1)新建文件夹Demo目录下新建文件夹USART,这是保存新建工程的文件夹。(2)新建STM32CubeMX工程在STM32CubeMX开发环境中新建工程。(3)选择MCU或开发板CommercialPartNumber和MCUs/MPUsList选择STM32F407ZGT6,选择StartProject启动工程。(4)保存STM32CubeMX工程使用STM32CubeMX菜单File→SaveProject,保存工程。(5)生成报告使用STM32CubeMX菜单File→GenerateReport生成当前工程的报告文件。(6)配置MCU时钟树STM32CubeMXPinout&Configuration子页面下,选择SystemCore→RCC,HighSpeedClock(HSE)根据开发板实际情况,选择Crystal/CeramicResonator(晶体/陶瓷晶振)。(7)配置MCU外设首先配置USART1,STM32CubeMXPinout&Configuration子页面下选择Connectivity→USART1,对USART1进行设置。Mode选择Asynchronous,HardwareFlowControl(RS232)选择Disable,ParameterSettings具体配置如图8-7所示。图8-7USART1配置页面NVIC配置页面如图8-8所示。
图8-8NVIC配置页面CodeGeneration页面Selectforinitsequenceordering栏勾选USART1globalinterrupt。NVICCodeGeneration配置页面如图8-9所示。
图8-9NVICCodeGeneration配置页面根据LED和USART1电路,整理出MCU连接的GPIO引脚的输入/输出配置,如表8-5所示。。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论