STM32F10 x_IIC.doc_第1页
STM32F10 x_IIC.doc_第2页
STM32F10 x_IIC.doc_第3页
STM32F10 x_IIC.doc_第4页
STM32F10 x_IIC.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

11.1 I2C寄存器结构.134 11.2 I2C库函数.135No函数名描述1I2C_DeInit将外设I2Cx寄存器重设为缺省值2I2C_Init根据I2C_InitStruct中指定的参数初始化外设I2Cx寄存器3I2C_StructInit把I2C_InitStruct中的每一个参数按缺省值填入4I2C_Cmd使能或失能I2C外设5I2C_DMACmd使能或失能指定I2C的DMA请求6I2C_DMALastTransferCmd使下一次DMA传输为最后一次传输7I2C_GenerateSTART产生I2Cx传输START条件8I2C_GenerateSTOP产生I2Cx传输STOP条件9I2C_AcknowledgeConfig使能或失能指定I2C的应答功能10I2C_OwnAddress2Config设置指定I2C的自身地址2 11I2C_DualAddressCmd使能或失能指定I2C的双地址模式12I2C_GeneralCallCmd使能或失能指定I2C的广播呼叫功能13I2C_ITConfig使能或失能指定的I2C中断14I2C_SendData通过外设I2Cx发送一个数据15I2C_ReceiveData返回通过I2Cx最近接收的数据16I2C_Send7bitAddress向指定的从I2C设备传送地址字17I2C_ReadRegister读取指定的I2C寄存器并返回其值18I2C_SoftwareResetCmd使能或失能指定I2C的软件复位19I2C_SMBusAlertConfig驱动指定I2Cx的SMBusAlert管脚电平为高或低20I2C_TransmitPEC使能或失能指定I2C的PEC传输21I2C_PECPositionConfig选择指定I2C的PEC位置22I2C_CalculatePEC使能或失能指定I2C的传输字PEC值计算23I2C_GetPEC返回指定I2C的PEC值24I2C_ARPCmd使能或失能指定I2C的ARP 25I2C_StretchClockCmd使能或失能指定I2C的时钟延展26I2C_FastModeDutyCycleConfig选择指定I2C的快速模式占空比27I2C_GetLastEvent返回最近一次I2C事件28I2C_CheckEvent【】检查最近一次I2C事件是否是输入的事件29I2C_GetFlagStatus检查指定的I2C标志位设置与否30I2C_ClearFlag清除I2Cx的待处理标志位31I2C_GetITStatus检查指定的I2C中断发生与否32I2C_ClearITPendingBit清除I2Cx的中断待处理位11 内部集成电路(I2C)I2C总线接口连接微控制器和串行I2C 总线。它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBus 2.0 兼容。I2C总线有多种用途,包括CRC 码的生成和校验、SMBus(系统管理总线System Management Bus)、PMBus(电源管理总线Power Management Bus)。I2C驱动可以用来通过I2C界面发送和接收数据,还可以返回传输操作的状态。Section 11.1 I2C寄存器结构描述了固件函数库所使用的数据结构,Section 11.2 固件库函数介绍了函数库里的所有函数。11.1 I2C寄存器结构 I2C寄存器结构,I2C_TypeDeff,在文件中定义如下: typedef struct vu16 CR1; u16 RESERVED0; vu16 CR2; u16 RESERVED1; vu16 OAR1; u16 RESERVED2; vu16 OAR2; u16 RESERVED3; vu16 DR; u16 RESERVED4; vu16 SR1; u16 RESERVED5; vu16 SR2; u16 RESERVED6; vu16 CCR; u16 RESERVED7; vu16 TRISE; u16 RESERVED8; I2C_TypeDef;Table 204.例举了I2C所有寄存器 Table 204. I2C寄存器寄存器描述CR1I2C控制寄存器1CR2I2C控制寄存器2OAR1I2C自身地址寄存器1OAR2I2C自身地址寄存器2DRI2C数据寄存器SR1I2C状态寄存器1SR2I2C状态寄存器2CCRI2C时钟控制寄存器TRISEI2C上升时间寄存器2 个I2C外设声明于文件“sm32f10x_map.h: . #define PERIPH_BASE (u32)0x40000000) #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) .#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) #define I2C2_BASE (APB1PERIPH_BASE + 0x5800) . #ifndef DEBUG . #ifdef _I2C1 #define I2C1 (I2C_TypeDef *) I2C1_BASE) #endif /*_I2C1 */ #ifdef _I2C2 #define I2C2 (I2C_TypeDef *) I2C2_BASE) #endif /*_I2C2 */ . #else /* DEBUG */ . #ifdef _I2C1 EXT I2C_TypeDef *I2C1; #endif /*_I2C1 */ #ifdef _I2C2 EXT I2C_TypeDef *I2C2; #endif /*_I2C2 */ . #endif 使用Debug模式时,初始化指针I2C1, I2C2于文件:. #ifdef _I2C1 I2C1 = (I2C_TypeDef *) I2C1_BASE; #endif /*_I2C1 */ #ifdef _I2C2 I2C2 = (I2C_TypeDef *) I2C2_BASE; #endif /*_I2C2 */ . 为了访问I2C寄存器,_I2C,_I2C1, _I2C2必须在文件“stm2f10x_conf.h中定义如下: . #define _I2C #define _I2C1 #define _I2C2 . 11.2 I2C库函数 I2C库函数【见首页】11.2.1 函数I2C_DeInit Table 206. 函数I2C_DeInit 函数名I2C_DeInit 函数原形void I2C_DeInit(I2C_TypeDef* I2Cx)功能描述将外设I2Cx寄存器重设为缺省值输入参数I2Cx:x可以是1或2来选择I2C外设输出参数无返回值无先决条件无被调用函数RCC_APB1PeriphClockCmd().例: /* Deinitialize I2C2 interface*/ I2C_DeInit(I2C2); 函数原型如下:void I2C_DeInit(I2C_TypeDef* I2Cx) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx);/ #define I2C1_BASE (APB1PERIPH_BASE + 0x5400)/ #define I2C2_BASE (APB1PERIPH_BASE + 0x5800)/ #define APB1PERIPH_BASE PERIPH_BASE/ #define PERIPH_BASE (u32)0x40000000) switch (*(u32*)&I2Cx) case I2C1_BASE:/ (u32)0x00200000) /* Enable I2C1 reset state */ RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE);/开启I2C1 /* Release I2C1 from reset state */ RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); break; case I2C2_BASE:/ (u32)0x00400000) /* Enable I2C2 reset state */ RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, ENABLE);/开启I2C2 /* Release I2C2 from reset state */ RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, DISABLE); break; default: break; 11.2.2 函数I2C_Init Table 207. 函数I2C_Init 函数名I2C_Init 函数原形void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct)功能描述根据I2C_InitStruct中指定的参数初始化外设I2Cx寄存器输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2I2C_InitStruct:指向结构I2C_InitTypeDef的指针,包含了外设GPIO的配置信息输出参数无返回值无先决条件无被调用函数无I2C_InitTypeDef structure I2C_InitTypeDef定义于文件: typedef struct u16 I2C_Mode;/Fast Mode?Standard Mode?u16 I2C_DutyCycle;/占空比:1:1?1:2?9:16?u16 I2C_OwnAddress1;/自地址?u16 I2C_Ack;/应答?u16 I2C_AcknowledgedAddress;/应答地址?u32 I2C_ClockSpeed;/时钟频率?I2C_InitTypeDef;I2C_Mode :用以设置I2C的模式。Table 208. 给出了该参数可取的值 Table 208. I2C_Mode值参数I2C_Mode取值描述/IIC_CR1.bit4/2定义值SMBTYPE SMBUS意义I2C_Mode_I2C设置I2C为I2C模式0x0000-0设置为IICI2C_Mode_SMBusDevice设置I2C为SMBus设备模式0x000201SMBus设备模式I2C_Mode_SMBusHost设置I2C为SMBus主控模式0x000A11SMBus主控模式I2C_DutyCycle:I2C_DutyCycle用以设置I2C的占空比。 Table 209. I2C_DutyCycle值参数I2C_DutyCycle取值描述/I2C_CCR.DUTY/bit14定义值备注I2C_DutyCycle_16_9I2C快速模式Tlow/Thigh = 16/9(u16)0x4000或操作I2C_DutyCycle_2I2C快速模式Tlow/Thigh = 2(u16)0xBFFF与操作 注意:该参数只有在I2C工作在快速模式(时钟工作频率高于100KHz)下才有意义。I2C_OwnAddress1:该参数用来设置第一个设备自身地址,它可以是一个7位或10位地址(I2C_Mode); assert_param(IS_I2C_DUTY_CYCLE(I2C_InitStruct-I2C_DutyCycle); assert_param(IS_I2C_OWN_ADDRESS1(I2C_InitStruct-I2C_OwnAddress1); assert_param(IS_I2C_ACK_STATE(I2C_InitStruct-I2C_Ack); assert_param(IS_I2C_ACKNOWLEDGE_ADDRESS(I2C_InitStruct-I2C_AcknowledgedAddress); assert_param(IS_I2C_CLOCK_SPEED(I2C_InitStruct-I2C_ClockSpeed);/*- I2Cx CR2 Configuration (外设时钟配置)-*/ /* Get the I2Cx CR2 value */ tmpreg = I2Cx-CR2; /* Clear frequency FREQ5:0 bits */ tmpreg &= CR2_FREQ_Reset;/0xFFE0 /* Get pclk1 frequency value */ RCC_GetClocksFreq(&rcc_clocks);/选择HSI? HSE? PLLCLK? pclk1 = rcc_clocks.PCLK1_Frequency;/参看RCC_Clock结构体 /* Set frequency bits depending on pclk1 value */ freqrange = (u16)(pclk1 / 1000000);/freqrange的单位是MHz(2MHz-36MHz) tmpreg |= freqrange; /* Write to I2Cx CR2 */ I2Cx-CR2 = tmpreg;/*- I2Cx CCR Configuration (设置分频系数和Trise时间)-*/ /* Disable the selected I2C peripheral to configure TRISE */ I2Cx-CR1 &= CR1_PE_Reset;/0xFFFE /* Reset tmpreg value */ /* Clear F/S, DUTY and CCR11:0 bits */ tmpreg = 0;/清除CCR的三中控制:F/S、DUTY、CCR11:0 /* Configure speed in standard mode */ if (I2C_InitStruct-I2C_ClockSpeed I2C_ClockSpeed 1);/标准模式下的CCR.CCR11:0的值 /* Test if CCR value is under 0x4*/标准模式下,CCR11:0的最小值规定为4。 if (result TRISE = freqrange + 1; /主模式的标准模式刚好是IIC模块的驱动频率:/TRISE5:0=Trise_scl*Fpclk1+1=1000ns*Fpclk1+1,(Fpclk1=freqrange MHz),=freqrange+1 /* Configure speed in fast mode */ else /*(I2C_InitStruct-I2C_ClockSpeed I2C_DutyCycle = I2C_DutyCycle_2) /* Fast mode speed calculate: Tlow/Thigh = 2 */ result = (u16)(pclk1 / (I2C_InitStruct-I2C_ClockSpeed * 3);/计算CCR11:0的公式 else /*I2C_InitStruct-I2C_DutyCycle = I2C_DutyCycle_16_9*/ /* Fast mode speed calculate: Tlow/Thigh = 16/9 */ result = (u16)(pclk1 / (I2C_InitStruct-I2C_ClockSpeed * 25); /计算CCR11:0的公式 /* Set DUTY bit */ result |= I2C_DutyCycle_16_9;/16:9的DUTY模式下,CCR.DUTY=1(bit14) /* Test if CCR value is under 0x1*/ if (result & CCR_CCR_Set) = 0)/ 0x0FFF /* Set minimum allowed value */ result |= (u16)0x0001; /快速模式下,CCR11:0的最小值规定为1。 /* Set speed value and set F/S bit for fast mode */ tmpreg |= result | CCR_FS_Set;/0x8000(bit15=1Fast) /* Set Maximum Rise Time for fast mode */ I2Cx-TRISE = (u16)(freqrange * 300) / 1000) + 1); /主模式的快速模式的Trise_scl=300ns。 /* Write to I2Cx CCR */ I2Cx-CCR = tmpreg; /* Enable the selected I2C peripheral */ I2Cx-CR1 |= CR1_PE_Set;/0x0001/*- I2Cx CR1 Configuration (模式设置和ACK设置)-*/ /* Get the I2Cx CR1 value */ tmpreg = I2Cx-CR1; /* Clear ACK, SMBTYPE and SMBUS bits */ tmpreg &= CR1_CLEAR_Mask;/ 0xFBF5 /* Configure I2Cx: mode and acknowledgement */ /* Set SMBTYPE and SMBUS bits according to I2C_Mode value */ /* Set ACK bit according to I2C_Ack value */ tmpreg |= (u16)(u32)I2C_InitStruct-I2C_Mode | I2C_InitStruct-I2C_Ack); /* Write to I2Cx CR1 */ I2Cx-CR1 = tmpreg;/*- I2Cx OAR1 Configuration (自地址设置)-*/ /* Set I2Cx Own Address1 and acknowledged address */ I2Cx-OAR1 = (I2C_InitStruct-I2C_AcknowledgedAddress | I2C_InitStruct-I2C_OwnAddress1);/I2C_OwnAddress1的地址怎么选择、设置?11.2.3 函数I2C_StructInit Table 212. 函数I2C_StructInit函数名I2C_StructInit函数原形void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct)功能描述把I2C_InitStruct中的每一个参数按缺省值填入输入参数I2C_InitStruct:指向结构I2C_InitTypeDef的指针,待初始化输出参数无返回值无先决条件无被调用函数无Table 213. 给出了I2C_InitStruct各个成员的缺省值 Table 213. I2C_InitStruct缺省值 成员缺省值备注I2C_ModeI2C_Mode_I2CIIC模式I2C_DutyCycleI2C_DutyCycle_21:2占空I2C_OwnAddress10自地址为0I2C_AckI2C_Ack_Disable无ACK应答I2C_AcknowledgedAddresI2C_AcknowledgedAddress_7bit7位地址I2C_ClockSpeed50005KHz例: /* Initialize an I2C_InitTypeDef structure */ I2C_InitTypeDef I2C_InitStructure; I2C_StructInit(&I2C_InitStructure); 函数原型如下:void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct)/*- Reset I2C init structure parameters values -*/ /* Initialize the I2C_Mode member */ I2C_InitStruct-I2C_Mode = I2C_Mode_I2C; /* Initialize the I2C_DutyCycle member */ I2C_InitStruct-I2C_DutyCycle = I2C_DutyCycle_2; /* Initialize the I2C_OwnAddress1 member */ I2C_InitStruct-I2C_OwnAddress1 = 0; /* Initialize the I2C_Ack member */ I2C_InitStruct-I2C_Ack = I2C_Ack_Disable; /* Initialize the I2C_AcknowledgedAddress member */ I2C_InitStruct-I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; /* initialize the I2C_ClockSpeed member */ I2C_InitStruct-I2C_ClockSpeed = 5000; 11.2.4 函数I2C_Cmd Table 214. 函数I2C_ Cmd函数名I2C_ Cmd 函数原形void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState)功能描述使能或失能I2C外设输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2NewState: 外设I2Cx的新状态(ENABLE或DISABLE)输出参数无返回值无先决条件无被调用函数无例: /* Enable I2C1 peripheral */ I2C_Cmd(I2C1, ENABLE); 函数原型如下:void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); assert_param(IS_FUNCTIONAL_STATE(NewState); if (NewState != DISABLE) /* Enable the selected I2C peripheral */ I2Cx-CR1 |= CR1_PE_Set;/开启IIC。 else /* Disable the selected I2C peripheral */ I2Cx-CR1 &= CR1_PE_Reset; /关闭IIC。 11.2.5 函数I2C_DMACmd Table 215. 函数I2C_DMACmd 函数名I2C_ DMACmd 函数原形I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState)功能描述使能或失能指定I2C的DMA请求输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2NewState: I2Cx DMA传输的新状态(ENABLE或DISABLE)输出参数无返回值无先决条件无被调用函数无例: /* Enable I2C2 DMA transfer */ I2C_DMACmd(I2C2, ENABLE); 函数原型如下:void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); assert_param(IS_FUNCTIONAL_STATE(NewState); if (NewState != DISABLE) /* Enable the selected I2C DMA requests */ I2Cx-CR2 |= CR2_DMAEN_Set;/0x0800: 1(当TxE=1或RxNE =1时,允许DMA请求)。 else /* Disable the selected I2C DMA requests */ I2Cx-CR2 &= CR2_DMAEN_Reset;/ 0xF7FF 11.2.6 函数I2C_DMALastTransferCmd Table 216. 函数I2C_ DMALastTransferCmd函数名I2C_ DMALastTransferCmd 函数原形I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)功能描述使下一次DMA传输为最后一次传输输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2NewState: I2Cx DMA最后一次传输的新状态(ENABLE或DISABLE)输出参数无返回值无先决条件无被调用函数无例: /* Specify that the next I2C2 DMA transfer is the last one */I2C_DMALastTransferCmd(I2C2, ENABLE); 函数原型如下:void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); assert_param(IS_FUNCTIONAL_STATE(NewState); if (NewState != DISABLE) /* Next DMA transfer is the last transfer */ I2Cx-CR2 |= CR2_LAST_Set;/0x1000,bit12 else /* Next DMA transfer is not the last transfer */ I2Cx-CR2 &= CR2_LAST_Reset;/0xEFFF 11.2.7 函数I2C_GenerateSTART Table 217. 函数I2C_ GenerateSTART 函数名I2C_ GenerateSTART 函数原形void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState) 功能描述产生I2Cx传输START条件输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2NewState: I2Cx START条件的新状态(ENABLE或DISABLE)输出参数无返回值无先决条件无被调用函数无例: /* Generate a START condition on I2C1 */ I2C_GenerateSTART(I2C1, ENABLE); 函数原型如下:void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); assert_param(IS_FUNCTIONAL_STATE(NewState); if (NewState != DISABLE) /* Generate a START condition */ I2Cx-CR1 |= CR1_START_Set;/0x0100,bit8 else /* Disable the START condition generation */ I2Cx-CR1 &= CR1_START_Reset;/0xFEFF 11.2.8 函数I2C_GenerateSTOP Table 218. 函数I2C_ GenerateSTOP函数名I2C_ GenerateSTOP 函数原形void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState) 功能描述产生I2Cx传输STOP条件输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2NewState: I2Cx STOP条件的新状态(ENABLE或者DISABLE)输出参数无返回值无先决条件无被调用函数无例: /* Generate a STOP condition on I2C2 */ I2C_GenerateSTOP(I2C2, ENABLE); 函数原型如下:void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); assert_param(IS_FUNCTIONAL_STATE(NewState); if (NewState != DISABLE) /* Generate a STOP condition */ I2Cx-CR1 |= CR1_STOP_Set;/0x0200,bit9 else /* Disable the STOP condition generation */ I2Cx-CR1 &= CR1_STOP_Reset;/0xFDFF 11.2.9 函数I2C_AcknowledgeConfig Table 219. 函数I2C_ AcknowledgeConfig 函数名I2C_ AcknowledgeConfig 函数原形void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState) 功能描述使能或失能指定I2C的应答功能输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2NewState: I2Cx应答的新状态(ENABLE或DISABLE )输出参数无返回值无先决条件无被调用函数无例: /* Enable the I2C1 Acknowledgement */ I2C_AcknowledgeConfig(I2C1, ENABLE); 函数原型如下:void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState) /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); assert_param(IS_FUNCTIONAL_STATE(NewState); if (NewState != DISABLE) /* Enable the acknowledgement */ I2Cx-CR1 |= CR1_ACK_Set; /0x0400,bit10 else /* Disable the acknowledgement */ I2Cx-CR1 &= CR1_ACK_Reset;/0xFBFF 11.2.10 函数I2C_OwnAddress2Config Table 220. 函数I2C_ OwnAddress2Config 函数名I2C_ OwnAddress2Config 函数原形void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, u8 Address)功能描述设置指定I2C的自身地址2输入参数1I2Cx:x可以是1或2,来选择I2C外设输入参数2Address: 指定的7位I2C自身地址2输出参数无返回值无先决条件无被调用函数无例: /* Set the I2C1 own address2 to 0x38 */ I2C_OwnAddress2Config(I2C1, 0x38); 函数原型如下:void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, u8 Address) u16 tmpreg = 0; /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx); /* Get the old register value */ tmpreg = I2Cx-OAR2; /* Reset I2Cx Own address2 bit 7:1 */ tmpreg &= OAR2_ADD2_Reset;/ 0xFF01 /* Set I2Cx Own address2 */ tmpreg |= (u16)(Address & (u16)0x00FE);/bit

温馨提示

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

评论

0/150

提交评论