删减部分-IIC重力感应实例_第1页
删减部分-IIC重力感应实例_第2页
删减部分-IIC重力感应实例_第3页
删减部分-IIC重力感应实例_第4页
删减部分-IIC重力感应实例_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

-第 2 页- 1.1 加速度、倾角传感器加速度、倾角传感器 I2C 常用在传输速率要求不高的传感器与主机之间的互联,通过 I2C 接口, 主机能够控制,读取传感器模块的数据。本小节使用 STM32 的 I2C 接口控制一 种常用的加速度传感器模块 MMA7455,让大家更加熟悉 STM32 的 I2C 接口应 用,并实现加速度和倾角的检测。 MMA7455 是一款数字三轴加速度传感器,即可以同时测量三个方向上的加 速度大小,这三个方向是以传感器模块为中心的,传感器模块的丝印层标有这 个坐标系,即指示了 X、Y、Z 的加速度正方向。见图 1。 图 1 传感器芯片坐标图 使用传感器时,我们可以读取出基于这三个方向的加速度值,这个加速度 值可以为负,表示沿该方向的反向加速度。 接下来给大家补充一下物理知识,_。在地球上,重力加速度是一直存 在的,若我们利用这个传感器来测量重力加速度 g 在某个方向上的加速度分量, 则可以根据物理公式来计算器件与水平面间的夹角,而测量这个夹角是很多有 趣应用的基础。 当传感器处于如图 2 的倾斜状态时,我们对 X 方向进行物理的受力分析为 例,见图 3。 X方向方向 传感器芯片传感器芯片 Y方向方向 Z方向方向 -第 3 页- 图 2 倾角测量示例 图 3 受力分析 从受力分析图可知我们要求的传感器 X 方向与水平面的倾角为1,已知重 力加速度 g,而重力加速度在传感器 X 方向的分量 a 可以通过读取传感器计算 得出。已和 g 和 a,用三角函数公式就可以求出1。对于其它方向也是通过这 样的原理计算出来。 1.1.1 实验描述及工程文件清单实验描述及工程文件清单 实验描述:实验描述: 控制倾角传感器(MMA7455)测量加速度和倾角,通过串口打印测量得的 数据。本实验采用 I2C 方式与传感器通讯,控制传感器用 2g 的量程。在测量前 对传感器进行校准。 硬件连接:硬件连接: X方向方向 竖直向下的竖直向下的 重力加速度方向重力加速度方向 传感器芯片传感器芯片 Z方向方向 Y方向方向 1 1 加速度分量加速度分量a 重力加速度重力加速度g a A g -第 4 页- PB6-I2C1_SCL PB7-I2C1_SDA 库文件库文件 : 使用 3.5 版本固件库 startup/start_stm32f10 x_hd.c CMSIS/core_cm3.c CMSIS/system_stm32f10 x.c FWlib/stm32f10 x_gpio.c FWlib/stm32f10 x_rcc.c FWlib/stm32f10 x_usart.c FWlib/stm32f10 x_i2c.c 用户文件用户文件: USER/main.c USER/stm32f10 x_it.c USER/usart1.c USER/I2C_MMA.c 在这个加速度传感器例程中野火采用使用集成模块,只需要把模块的电源 线和 SDA,SCL 端口连接到开发板上的 I2C 总线即可,要注意电源是使用 3.3V 的。如果使用的是野火 V3 开发板只要把这个模块插入到 MMA 的接口即可。 图 4 重力感应传感器连接 -第 5 页- 1.1.2 配置工程环境配置工程环境 本 I2C-MMA7455 实验中我们用到了GPIO、RCC、USART 及 I2C外设,所 以我们先要把以下库文件添加到工程stm32f10 x_gpio.c、stm32f10 x_rcc.c stm32f10 x_usart.c、stm32f10 x_i2c.c。本实验中没有使用中断,是使用轮询的 方式来完成 I2C 的收发数据的。 接下来添加旧工程中的外设用户文件usart.c,以便调试和观察实验效果。 新建I2C_MMA.c及I2C_MMA.h文件。并在 stm32f10 x_conf.h 中把使用到的 ST 库的头文件注释去掉。见代码清单 1。 代码清单 1:加速度传感器例程的stm32f10 x_conf.h 文件配置 1. /* 2. * 3. * file Project/STM32F10 x_StdPeriph_Template/stm32f10 x_con f.h 4. * author MCD Application Team 5. * version V3.5.0 6. * date 08-April-2011 7. * brief Library configuration file. 8. */ 9. #include stm32f10 x_gpio.h 10. #include stm32f10 x_i2c.h 11. #include stm32f10 x_rcc.h 12. #include stm32f10 x_usart.h 1.1.3 main 文件文件 配置好所需的库文件之后,我们就从main函数开始分析,见代码清单 2。 代码清单 2:加速度传感器例程的 main 函数 1. * 2. * 函数名:main 3. * 描述 :主函数 4. * 输入 :无 5. * 输出 :无 6. * 返回 :无 7. */ 8. int main(void) 9. 10. 11. /* 串口 1 初始化 */ 12. USART1_Config(); 13. 14. /*重力传感器初始化*/ 15. I2C_MMA_Init() ; 16. -第 6 页- 17. /*重力传感器校准*/ 18. I2C_MMA_Cal(); 19. 20. printf(rn-这是一个重力传感器测试程序- rn); 21. 22. 23. /* 检测倾角*/ 24. I2C_MMA_Test( 25. I2C_MMA_Test( 26. I2C_MMA_Test( 27. 28. printf(rn-X 方向的数据-rn); 29. I2C_MMA_Printf( 30. 31. printf(rn-Y 方向的数据-rn); 32. I2C_MMA_Printf( 33. 34. printf(rn-Z 方向的数据-rn); 35. I2C_MMA_Printf( 36. 37. /*进入省电模式*/ 38. if(I2C_MMA_Standby()= SUCCESS ) 39. 40. printf(rn Acceleration enter standby mode! rn); 41. else 42. printf(rn Standby mode ERROR! rn); 43. 44. 本实验的 main 函数的执行流程很自然,调用USART1_Config()和 I2C_MMA_Init()初始化了串口和用于与 MMA 通讯的 I2C 接口。由于传感器存在 一定的误差,所以我们调用I2C_MMA_Cal()进行误差补偿。补偿完成后调用 I2C_MMA_Test()函数分别从 MMA 模块读取它的 X、Y、Z 方向的检测值。接着 调用I2C_MMA_Printf()函数把这些信息打印到终端。最后调用 I2C_MMA_Standby()进入省电模式。结束流程。 1.1.4 初始化初始化 I2C 接口接口 初始化 I2C 接口是与 MMA 模块通讯的前提,我们来看看这个 I2C_MMA_Init()函数的内容,见代码清单 3。 代码清单 3:I2C_MMA_Init()函数 1. /* 2. * 函数名:I2C_MMA_Init 3. * 描述 :I2C 外设(MMA7455)初始化 4. * 输入 :无 5. * 输出 :无 6. * 调用 :外部调用 7. */ 8. void I2C_MMA_Init(void) -第 7 页- 9. 10. I2C_GPIO_Config(); 11. I2C_Mode_Config(); 12. I2C_MMA_Init()调用了I2C_GPIO_Config()配置了 I2C 复用的 I/O 端口,调 用 I2C_Mode_Configu()设置 I2C 的工作模式,并使能相关外设的时钟。这部分 与 I2C 读写 EEPROM 的例程是一样的,就不再贴代码了。 1.1.5 读取传感器数据读取传感器数据 初始化完成并校正误差后,我们可以调用I2C_MMA_Test()函数来读取传 感器测出来的各方向的数据,我们先来分析这个函数,见代码清单 4。 代码清单 4:I2C_MMA_Test()函数 1. /* 2. * 函数名:I2C_MMA_Test 3. * 描述 :测量倾角 和 加速度 (量程 0-2g) 4. * 输入 :数据结构体的指针 5. * 输出 :无 6. * 调用 :外部调用 7. */ 8. void I2C_MMA_Test(MMA_Dat* MMA_Value) 9. 10. u8 temp; 11. 12. /*MMA 进入 2g 量程测试模式*/ 13. I2C_MMA_ByteWrite(0 x05,MMA_MCTL_Addr); 14. 15. /*DRDY 标置位,等待测试完毕*/ 16. while(!(I2C_MMA_ByteRead(MMA_STATUS_Addr) 17. 18. /*读取测得的数据*/ 19. MMA_Value-Out = I2C_MMA_ByteRead(MMA_Value-Addr); 20. 21. if(MMA_Value-Out 24. 25. /*将原始值转换为加速度,乘以 -1 为方向处理*/ 26. MMA_Value-Acc = (float)(-1)*temp *ACC_Gravity/64; 27. 28. /*将原始值转换为角度*/ 29. if(temp =64) 30. /*加速度值大于 1g */ 31. MMA_Value-Angle = 90.0; 32. 33. else 34. /*加速度小于 1 g, Angle = asin(Acc/9.8)*57.32; 弧度制转换 57.32 = 180/3.14*/ 35. MMA_Value- Angle = asin(float)temp/64)*57.32; 36. 37. 38. /*读出的原始值为负数 */ -第 8 页- 39. else 40. 41. temp = MMA_Value-Out; 42. 43. /*二补码转换*/ 44. temp -= 1; 45. temp = temp; 46. 47. /*将原始值转换为加速度*/ 48. MMA_Value-Acc = (float) temp *ACC_Gravity/64; 49. 50. /*将原始值转换为角度,乘以 -1 为方向处理*/ 51. if(temp=64) 52. MMA_Value-Angle = -90.0; 53. else 54. /* Angle = asin(Acc/9.8)*57.32 */ 55. MMA_Value-Angle =(- 1)*asin(float)temp/64)*57.32; 56. 57. 这个函数的传入参数为 MMA_Dat 类型结构体指针,这是野火自定义的用 于保存某个方向的寄存器地址、方向名、原始测量值、加速度值、及倾角值。 它的定义见代码清单 5。 代码清单 5:MMA_Dat 类型结构体定义 1. typedef struct 2. 3. uc8 Addr; /*寄存器的地址*/ 4. uc8 Name; /*数据的方向,X,Y 或 Z*/ 5. s8 Out; /*寄存器的值*/ 6. float Acc; /*加速度值 */ 7. float Angle; /*角度值 */ 8. MMA_Dat; 在 main 文件中用它定义了这 X、Y、Z 三个方向的结构体,并向它们赋了 寄存器名、相应方向在 MMA 模块的寄存器地址 的初值。在调用 I2C_MMA_Test()函数时这些结构体用作实参。见代码清单 6。 代码清单 6:X、Y、Z 三个方向的结构体 1. /*/ 2. MMA_Dat X_Value=MMA_XOUT8_Addr,X; 3. MMA_Dat Y_Value=MMA_YOUT8_Addr,Y; 4. MMA_Dat Z_Value=MMA_ZOUT8_Addr,Z; 代码清单 7:I2C_MMA_Test()函数流程如下: (1) 第 13 行,调用 I2C_MMA_ByteWrite()函数,通过 I2C 向 MMA 模 块写入控制参数,使 MMA 模块工作在 2g 量程模式。见表 1。根据 MMA 模 块的说明,它可以工作在 8g、4g、2g 模式下(g 即为重力加速度的常量, -第 9 页- 约 9.8),即量程分别为-8g8g,-4g4g 及-2g2g。在我们选择的 2g 量程 模式下,最小量化单位 1LSB=1/64g 。即我们从 MMA 读取出原始数据为 64 时,代表该方向的加速度大小等于重力加速度 g。 表 1 MMA 模块数据手册中的量程说明 Configuring the g-Select for 8-bit output using Register $16 with GLVL1:0 bits. GLVL 1:0 g-Range Sensitivity 0 8g 16 LSB/g 1 2g 64 LSB/g 10 4g 32 LSB/g (2) 第 16 行,当我们向 MMA 模块写入控制参数后,我们需要等待它 检测倾角,我们调用I2C_MMA_ByteRead()轮询 MMA 模块的状态寄存器的 DRDY 位,确保读出来的是已经由 MMA 转换好的加速度数据。 (3) 第 19 行,调用I2C_MMA_ByteRead()把转换好的数据读取到结构 体中的Out成员,即它保存了 MMA 模块转换的原始数据。在这行调用函数 I2C_MMA_ByteRead()时,我们输入的参数为结构体成员Addr,这个实际 上就是我们要读取的方向相应的寄存器的地址。 (4) 第 21 行,读取得数据后,我们就开始一系列的转化了,首先根据 原始数据的正负,作不同的处理。 (5) 第 26 行,根据 LSB =1/64g 的公式,把原始数据转化为加速度值, 其中的ACC_Gravity为自定义的宏,代表重力加速度常量, 数值为 9.8。 为什么乘以-1?这其实是野火根据自己手上 MMA 模块丝印层的坐标系调整 的,是为了使加速度值的方向与丝印层坐标系的正方向一致。不同厂商生 产的 MMA 模块丝印层上也许有些区别,读者应根据自己使用的情况作出调 整。 (6) 第 2935 行,把该方向的加速度值转化为角度值,在转换时使用 了 ANSI C 标准库的 asin()函数求反正弦值,要注意的是这个函数的输出为 弧度制,所以我们要乘以 57.32 把它转换为角度。 (7) 3955 行,为 MMA 模块原始值为负数时的转化情况。在 MMA 模 块中,数据的存储形式为补码,见表 2 说明(Signed byte data 2s compliment),数据为负数时,数值与补码不相等,所以我们首先要对补码 进行转换,然后再计算加速度、角度值。 表 2 MMA 模块数据手册中对存储形式的说明 $00: 10bits Output Value X LSB (Read only) D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 Bi t X OUT 7 X OUT 6 X OUT 5 X OUT 4 X OUT 3 X OUT 2 X OUT 1 X OUT0 Fu nction -第 10 页- 0 0 0 0 0 0 0 0 D efault Signed byte data (2s compliment): 0g = 10h000 Reading low byte XOUTL latches high byte XOUTH to allow 10-bit reads. XOUTH should be read directly following XOUTL read. $01: 10bits Output Value X MSB (Read only) D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 Bi t - - - - - - X OUT 9 X OUT8 Fu nction 0 0 0 0 0 0 0 0 D efault Signed byte data (2s compliment): 0g = 10h000 Reading low byte XOUTL latches high byte XOUTH to allow 10-bit reads. 在这个I2C_MMA_Test()函数中,我们调用了用户函数 I2C_MMA_ByteWrite()及I2C_MMA_ByteRead() ,其函数原型见代码清单 8。 代码清单 8:I2C_MMA_ByteWrite()函数 1. /* 2. * 函数名:I2C_MMA_ByteWrite 3. * 描述 :写一个字节到 I2C MMA 寄存器中 4. * 输入 :-pBuffer 缓冲区指针 5. * -WriteAddr 接收数据的 MMA 寄存器的地址 6. * 输出 :无 7. * 返回 :无 8. * 调用 :内部调用 9. */ 10. static void I2C_MMA_ByteWrite(u8 pBuffer, u8 WriteAddr) 11. 12. /*wait until I2C bus is not busy*/ 13. while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY); 14. 15. /* Send START condition */ 16. I2C_GenerateSTART(I2C1, ENABLE); 17. 18. /* Test on EV5 and clear it */ 19. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); 20. 21. /* Send MMA address for write */ 22. I2C_Send7bitAddress(I2C1, MMA_ADRESS, I2C_Direction_Transmitt er); 23. 24. /* Test on EV6 and clear it */ 25. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE _SELECTED); 26. 27. /* Send the MMAs Register address to write to */ 28. I2C_SendData(I2C1, WriteAddr); 29. 30. /* Test on EV8 and clear it */ 31. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ); -第 11 页- 32. 33. /* Send the byte to be written */ 34. I2C_SendData(I2C1, pBuffer); 35. 36. /* Test on EV8 and clear it */ 37. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ); 38. 39. /* Send STOP condition */ 40. I2C_GenerateSTOP(I2C1, ENABLE); 41. 42. 这与 EEPROM 的I2C_EE_PageWrite()函数很类似,第一个参数为要写入的 数值,第二个参数为待写入寄存器的地址。这些寄存器的地址在I2C_MMA.h文 件中都有宏定义。 其中要强调的地方方是 MMA7455 的器件地址(即 I2C 器件的 7 位寻址), 在 MMA7455 的 DataSheet 中查到的器件地址为0X1D,但这个地址是不正确 的,与野火使用的这块芯片有区别,市面上的传感器这个器件地址一般也为 0 x3A。 在用Jlink调试程序的时候,程序循环运行,停在第 25 行就可以知道是器 件地址出了问题,其它通讯的错误也可以用这样的方式查找出来,省了示波器。 I2C_MMA_ByteRead()函数原型见代码清单 9,它实现的功能就是从 MMA 模块中读取出某寄存器的数值。 代码清单 9:I2C_MMA_ByteRead()函数 1. /* 2. * 函数名:I2C_MMA_ByteRead 3. * 描述 :从 MMA 寄存器里面读取一块数据。 4. * 输入 : -ReadAddr 接收数据的 MMA 寄存器的地址。 5. * 输出 :无 6. * 返回 :读取出的寄存器数据 7. * 调用 :内部调用 8. */ 9. static u8 I2C_MMA_ByteRead(u8 ReadAddr) 10. 11. u8 RxData; 12. /*wait until I2C bus is not busy*/ 13. while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY); 14. 15. /* Send START condition */ 16. I2C_GenerateSTART(I2C1, ENABLE); 17. 18. /* Test on EV5 and clear it */ 19. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); 20. 21. /* Send MMA address for write */ -第 12 页- 22. I2C_Send7bitAddress(I2C1, MMA_ADRESS, I2C_Direction_Transmitt er); 23. 24. /* Test on EV6 and clear it */ 25. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE _SELECTED); 26. 27. /* Clear EV6 by setting again the PE bit */ 28. I2C_Cmd(I2C1, ENABLE); 29. 30. /* Send the MMAs Register address to write to */ 31. I2C_SendData(I2C1, ReadAddr); 32. 33. /* Test on EV8 and clear it */ 34. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ); 35. 36. /* Send STRAT condition a second time */ 37. I2C_GenerateSTART(I2C1, ENABLE); 38. 39. /* Test on EV5 and clear it */ 40. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); 41. 42. /* Send MMA address for read */ 43. I2C_Send7bitAddress(I2C1, MMA_ADRESS, I2C_Direction_Receiver) ; 44. 45. /* Test on EV6 and clear it */ 46. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SE LECTED); 47. 48. /* Test on wait for EV7 */ 49. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED); 50. 51. /* Read a byte from the MMA Register */ 52. RxData = I2C_ReceiveData(I2C1); 53. 54. /* Disable Acknowledgement */ 55. I2C_AcknowledgeConfig(I2C1, DISABLE); 56. 57. /* Send STOP Condition */ 58. I2C_GenerateSTOP(I2C1, ENABLE); 59. 60. /*Retrun Data*/ 61. return RxData; 62. 1.1.6 MMA 校准函数校准函数 MMA 模块的校准是一个麻烦的过程,我们来分析一下 这个校准函数 I2C_MMA_Cal(),见代码清单 10。 代码清单 10: I2C_MMA_Cal()函数 1. /* 2. * 函数名:I2C_MMA_Cal 3. * 描述 :MMA7455 校准 4. * 输入 :无 5. * 输出 :无 6. * 调用 :外部调用,在初始化后调用 -第 13 页- 7. */ 8. void I2C_MMA_Cal(void) 9. 10. I2C_MMA_ByteWrite(0 x00,MMA_YOFFL_Addr); /*校正 x 值 00 */ 11. I2C_MMA_ByteWrite(0 x30,MMA_YOFFL_Addr); /*校正 y 值 48*/ 12. I2C_MMA_ByteWrite(0 xE2,MMA_ZOFFL_Addr); /*校正 Z 值 -30 的补 码 */ 13. I2C_MMA_ByteWrite(0 xFF,MMA_ZOFFH_Addr); /*校正 Z 值,校正值为负 数,要把高位写 1;*/ 14. MMA 传感器校正,称为0g 校准。这个函数在第一次测量前必须调用,而 且每个传感器的校正值都有点不同,其中的校正参数就要大家亲手去调试出来 啦。 参照 DataSheetAN3745按以下步骤校准: (1) 把传感器按水平方式放置,读取各方向寄存器输出值。 这个情况下,Z 轴方向标准输出应为1g,X 轴和 Y 轴均为0。对应到各 个寄存器的原始数据就应是ZOUT8 = 64,XOUT8 = 0,YOUT8 = 0。但是未 校准前,各个寄存器的输出会有一定的偏差。 见图 5 水平放置时,未校准测量结果,这是在传感器水平放置时,野火的 例程中未校准得出的结果。 图 5 水平放置时,未校准测量结果 -第 14 页- (2) 根据偏差情况,向相应的OffSet 寄存器(校准寄存器)写入校准值, 这个校准值即为偏差补偿,偏差情况我们应以原始数据来计算。但要注意 两个问题:一是校准寄存器中的值为1/2 LSB,所以我们写入的误差补偿要 相应地乘以 2 倍,见表 3。 根据图 5 的偏差和中寄存器权值为1/2 LSB,计算出应写入的补偿值如 下: XOUT8很标准,不用写入校准值,或向XOFFL写入 0; YOUT8输出为-19,所以应向YOFFL写入 38 = 2*19; ZOUT8输出为 75,所以应写入 -22 = 2*(64-75); 表 3 MMA 模块数据手册的校准寄存器说明 $10: Offset Drift X LSB (Read/Write) The following Offset Drift Registers are used for setting and storing the offset calibrations to eliminate the 0g offset. Please refer to Freescale application note AN3745 for detailed instructions on the process to set and store the calibration values. D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 B it X OFF7 X OFF 6 X OFF 5 X OFF 4 X OFF 3 X OFF 2 X OFF 1 X OFF 0 F unction 0 0 0 0 0 0 0 0 D efault Signed byte data (2s compliment): User level offset trim value for X-axis *Bit weight is for 8g 10bit data output. Typical value for reference only. Variation is specified in “Electrical Characteristics” section. B it X OFF7 X OFF6 X OFF5 X OFF4 X OFF3 X OFF2 X OFF1 X OFF0 w eight 64 LSB 32 LSB 16 LSB 8 LSB 4 LSB 2 LSB 1 LSB 0. 5 LSB $11: Offset Drift X MSB (Read/Write) D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 B it - - - - - X OFF 10 X OFF 9 X OFF 8 F unction 0 0 0 0 0 0 0 0 D efault Signed byte data (2s compl

温馨提示

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

评论

0/150

提交评论