詳解stm32的CAN控制器(程序分享)_第1頁
詳解stm32的CAN控制器(程序分享)_第2頁
詳解stm32的CAN控制器(程序分享)_第3頁
詳解stm32的CAN控制器(程序分享)_第4頁
詳解stm32的CAN控制器(程序分享)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

詳解stm32的CAN控制器(程序分享)首先簡單介紹一下CAN總線,關(guān)于CAN總線是誰發(fā)明的,CAN總線的歷史,CAN總線的發(fā)展,CAN總線的應(yīng)用場合,這些,通通不說。這里只是以我個人理解,簡單說說CAN通信。CAN總線的端點沒有地址(除非自己在幀里定義地址),CAN總線通信不用地址,用標(biāo)識符,不是單獨的誰發(fā)給誰,而是,你總是發(fā)送給整個網(wǎng)絡(luò)。然后每個節(jié)點都有過濾器,對網(wǎng)絡(luò)上的傳播的幀的標(biāo)識符進行過濾,自己想要什么樣的幀,可以設(shè)置自己的過濾器,接收相關(guān)的幀信息。如果兩個節(jié)點同時發(fā)送怎么辦?這個不用我們擔(dān)心,CAN控制器會自己仲裁,讓高優(yōu)先級的幀先發(fā)。然后我們可以了解一下stm32的CAN控制器。如上圖所示,stm32有兩個can控制器,can1(主),和can2(從),其中過濾器的設(shè)置是通過can1來設(shè)置,其他工作模式,波特率等,可以各自設(shè)置。每個控制器有三個發(fā)送郵箱,兩個fifo,每個fifo有三個接收郵箱。發(fā)送:選擇一個空的發(fā)送郵箱,把幀信息寫到該發(fā)送郵箱的寄存器里,請求發(fā)送,控制器就會根據(jù)標(biāo)識符的優(yōu)先級把幀先后發(fā)送出去。接收:如果接收到的幀的標(biāo)識符能過過濾表的一系列過濾,該幀信息就會保存在fifo接收郵箱的寄存器里。過濾器:stm32f407共有28組過濾器,每組過濾器可以設(shè)置關(guān)聯(lián)到fifo0或者fifo1,每組都包括兩個32位存儲器,可以配置成一個32位有位屏蔽功能的標(biāo)識符過濾器,或者兩個32位完全匹配的標(biāo)識符過濾器,或者兩個16位有位屏蔽功能的標(biāo)識符過濾器,或者四個16位完全匹配的標(biāo)識符過濾器。如下圖所示:我所說的完全匹配的意思是,接收到的幀的標(biāo)識符每一位都要跟過濾器對應(yīng)的位一樣,才能過得了這個過濾器。有位屏蔽功能的意思是一個寄存器放標(biāo)識符,一個放屏蔽掩碼,屏蔽掩碼為1的位對應(yīng)的接收到的幀的標(biāo)識符的位與對應(yīng)的放標(biāo)識符的寄存器的位一致,就能通過。傳輸一位的時間和波特率的計算:CAN控制器的波特率是由APB時鐘線和CAN位時序寄存器CAN_BTR的TS2[3:0]、TS1[2:0]和BRP[9:0]確定的,其中,TS1[2:0]定義了時間段1占用多少個時間單元,TS2[3:0]定義了時間段2占用多少個時間單元,BRP[9:0]定義對APB1時鐘的分頻。PS:設(shè)置波特率為1M其中Tpclk為APB1的時鐘周期,假設(shè)為Tpclk=1/42M0≦TS1≦70≦TS2≦150≦BRP≦1021根據(jù)以上數(shù)據(jù),有(TS2+TS1+3)(BRP+1)=42令BRP=2,有TS2+TS1=11令TS1=8,TS2=3設(shè)置步驟:1.設(shè)置中斷優(yōu)先級分組(如果之前沒有設(shè)置),這個最好一個程序里只在開頭設(shè)置一次。2.使能相關(guān)GPIO時鐘。3.選擇相關(guān)GPIO引腳的復(fù)用功能。4.設(shè)置相關(guān)GPIO引腳為復(fù)用模式。5.設(shè)置相關(guān)GPIO引腳的速度,方式。6.設(shè)置主控制寄存器MCR,進入初始化模式7.等待進入初始化模式8.設(shè)置波特率。9.其他設(shè)置。10.如果要用到中斷,在中斷使能寄存器IER中使能相關(guān)中斷響應(yīng)。11.如果要用到中斷,設(shè)置相關(guān)中斷優(yōu)先級(NVIC_IP)。12.如果要用到中斷,使能相關(guān)中斷(NVIC_ISER)。13.設(shè)置主控制寄存器MCR,進入正常工作模式。14.設(shè)置FMR,使過濾器組工作在初始化模式。15.設(shè)置FMR的CAN2SB,確定CAN2的過濾器組從哪一組開始。16.設(shè)置用到的過濾器組的工作方式。17.設(shè)置用到的過濾器組的位寬。18.給fifo0和fifo2劃分(關(guān)聯(lián))過濾組。19.禁用用到的過濾器組。20.設(shè)置過濾器組的標(biāo)識符,幀類型等。21.使能相關(guān)過濾器組。22.設(shè)置FMR,使過濾器組工作在正常模式。23.如果要用中斷,編寫中斷服務(wù)函數(shù)(函數(shù)名是固定的)。24.中斷服務(wù)函數(shù)里檢查是哪個中斷。25.編寫相應(yīng)服務(wù)程序。電路請參見本博客:小工具之——CAN收發(fā)器程序:[plain]viewplaincopy/************************************標(biāo)題:操作CAN的練習(xí)軟件平臺:IARforARM6.21硬件平臺:stm32f4-discovery主頻:168M描述:通過硬件收發(fā)器連接CAN1,CAN2組成一個兩個端點的網(wǎng)絡(luò)CAN1循環(huán)發(fā)出數(shù)據(jù)幀CAN2接收過濾數(shù)據(jù)幀用uart把CAN2接收到的數(shù)據(jù)幀發(fā)到超級終端author:小船data:2012-08-14*************************************/#include《stm32f4xx.h》#include“MyDebugger.h”#defineRECEIVE_BUFFER_SIZE20u32CAN2_receive_buffer[RECEIVE_BUFFER_SIZE][4];u8UART_send_buffer[1800];u8Consumer=0;u8Producer=0;u32Gb_TimingDelay;voidDelay(uint32_tnTime);voidTIM7_init();//定時1su32get_rece_data();voidCAN_GPIO_config();voidmain(){u32empty_box;SysTick_Config(SystemCoreClock/1000);//設(shè)置systemtick一毫秒中斷SCB-》AIRCR=0x05FA0000|0x400;//中斷優(yōu)先級分組搶占:響應(yīng)=3:1MyDebugger_Init();TIM7_init();MyDebugger_Message(“\n\rtesting.。。.。。\n\r”,sizeof(“\n\rtesting.。。.。。\n\r”)/sizeof(char));CAN_GPIO_config();RCC-》APB1ENR|=((1《《25)|(1《《26));//使能CAN1、CAN2時鐘CAN1-》MCR=0x00000000;/*請求進入初始化模式禁止報文自動重傳自動喚醒模式*/CAN1-》MCR|=((1《《0)|(1《《4)|(1《《5));CAN1-》MCR&=~(1《《16);//在調(diào)試時,CAN照常工作while(!(CAN1-》MSR&0xfffffffe))//等待進入初始化模式{MyDebugger_LEDs(orange,on);}MyDebugger_LEDs(orange,off);/*正常模式重新同步跳躍寬度(1+1)tqTS2[2:0]=3TS1[3:0]=8BRP[9:0]=2ps:tq=(BRP[9:0]+1)xtPCLK,tBS2=tqx(TS2[2:0]+1),tBS1=tqx(TS1[3:0]+1),NominalBitTime=1×tq+tBS1+tBS2,BaudRate=1/NominalBitTime波特率設(shè)為1M*/CAN1-》BTR=((0《《30)|(0x01《《24)|(3《《20)|(8《《16)|(2《《0));CAN1-》MCR&=~(0x00000001);//正常工作模式CAN2-》MCR=0x00000000;/*請求進入初始化模式禁止報文自動重傳自動喚醒模式*/CAN2-》MCR|=((1《《0)|(1《《4)|(1《《5));CAN2-》MCR&=~(1《《16);//在調(diào)試時,CAN照常工作while(?。–AN2-》MSR&0xfffffffe))//等待進入初始化模式{MyDebugger_LEDs(orange,on);}MyDebugger_LEDs(orange,off);/*正常模式重新同步跳躍寬度(1+1)tqTS2[2:0]=3TS1[3:0]=8BRP[9:0]=2ps:tq=(BRP[9:0]+1)xtPCLK,tBS2=tqx(TS2[2:0]+1),tBS1=tqx(TS1[3:0]+1),NominalBitTime=1×tq+tBS1+tBS2,BaudRate=1/NominalBitTime波特率設(shè)為1M*/CAN2-》BTR=((0《《30)|(0x01《《24)|(3《《20)|(8《《16)|(2《《0));CAN2-》IER&=0x00000000;/*FIFO1消息掛號中斷使能FIFO1滿中斷使能FIFO1溢出中斷使能*/CAN2-》IER|=((1《《4)|(1《《5)|(1《《6));NVIC-》IP[65]=0xa0;//搶占優(yōu)先級101,響應(yīng)優(yōu)先級0NVIC-》ISER[2]|=(1《《1);//使能中斷線65,也就是can2_rx1中斷CAN2-》MCR&=~(0x00000001);//正常工作模式//總共有28組過濾器CAN1-》FMR|=1;//過濾器組工作在初始化模式CAN1-》FMR&=0xffffc0ff;//CAN2的過濾器組從14開始CAN1-》FMR|=(14《《8);CAN1-》FM1R|=(1《《14);//過濾器組14的寄存器工作在標(biāo)識符列表模式//位寬為16位,2個32位分為四個16位寄存器,過濾四個標(biāo)識符//CAN1-》FS1R|=(1《《15);//過濾器組15為單個32位寄存器,用于擴展標(biāo)識符CAN1-》FFA1R=0x0fffc000;//0~13號過濾器組關(guān)聯(lián)到fifo0,14~27號過濾器組關(guān)聯(lián)到fifo1CAN1-》FA1R&=~(1《《14);//禁用過濾器組14/*過濾器組0寄存器分為4個十六位過濾器:標(biāo)識符列表:過濾器編號匹配標(biāo)準(zhǔn)標(biāo)識符RTRIDEEXID[17:15]00x7cb(11111001011b)數(shù)據(jù)幀標(biāo)準(zhǔn)標(biāo)識符000b10x4ab(10010101011b)數(shù)據(jù)幀標(biāo)準(zhǔn)標(biāo)識符000b20x7ab(11110101011b)數(shù)據(jù)幀標(biāo)準(zhǔn)標(biāo)識符000b30x40b(10000001011b)數(shù)據(jù)幀標(biāo)準(zhǔn)標(biāo)識符000b*/CAN1-》sFilterRegister[14].FR1&=0x00000000;CAN1-》sFilterRegister[14].FR2&=0x00000000;CAN1-》sFilterRegister[14].FR1|=((0x7cb《《5)|(0《《4)|(0《《3));CAN1-》sFilterRegister[14].FR1|=((0x4ab《《21)|(0《《20)|(0《《19));CAN1-》sFilterRegister[14].FR2|=((0x7ab《《5)|(0《《4)|(0《《3));CAN1-》sFilterRegister[14].FR2|=((0x40b《《21)|(0《《20)|(0《《19));CAN1-》FA1R|=(1《《14);//使能過濾器組14CAN1-》FMR&=~1;//過濾器組正常工作while(1){/*選擇空的發(fā)送郵箱:標(biāo)準(zhǔn)標(biāo)識符0x7ab(11110101011b)數(shù)據(jù)幀不使用擴展標(biāo)識符*/if(CAN1-》TSR&((1《《26)|(1《《27)|(1《《28))){empty_box=((CAN1-》TSR》》24)&0x00000003);CAN1-》sTxMailBox[empty_box].TIR=(0x7ab《《21);CAN1-》sTxMailBox[empty_box].TDTR&=0xfffffff0;CAN1-》sTxMailBox[empty_box].TDTR|=0x00000008;//發(fā)送數(shù)據(jù)長度為8CAN1-》sTxMailBox[empty_box].TDLR=0x12345678;CAN1-》sTxMailBox[empty_box].TDHR=0x9abcdef0;CAN1-》sTxMailBox[empty_box].TIR|=(1《《0);//請求發(fā)送}else{MyDebugger_LEDs(orange,on);}Delay(100);/*選擇空的發(fā)送郵箱:標(biāo)準(zhǔn)標(biāo)識符0x4ab(10010101011b)數(shù)據(jù)幀不使用擴展標(biāo)識符*/if(CAN1-》TSR&((1《《26)|(1《《27)|(1《《28))){empty_box=((CAN1-》TSR》》24)&0x00000003);CAN1-》sTxMailBox[empty_box].TIR=(0x4ab《《21);CAN1-》sTxMailBox[empty_box].TDTR&=0xfffffff0;CAN1-》sTxMailBox[empty_box].TDTR|=0x00000008;//發(fā)送數(shù)據(jù)長度為8CAN1-》sTxMailBox[empty_box].TDLR=0x56781234;CAN1-》sTxMailBox[empty_box].TDHR=0x9abcdef0;CAN1-》sTxMailBox[empty_box].TIR|=(1《《0);//請求發(fā)送}else{MyDebugger_LEDs(orange,on);}Delay(100);/*選擇空的發(fā)送郵箱:標(biāo)準(zhǔn)標(biāo)識符0x7cb(10010101011b)數(shù)據(jù)幀不使用擴展標(biāo)識符*/if(CAN1-》TSR&((1《《26)|(1《《27)|(1《《28))){empty_box=((CAN1-》TSR》》24)&0x00000003);CAN1-》sTxMailBox[empty_box].TIR=(0x7cb《《21);CAN1-》sTxMailBox[empty_box].TDTR&=0xfffffff0;CAN1-》sTxMailBox[empty_box].TDTR|=0x00000006;//發(fā)送數(shù)據(jù)長度為6CAN1-》sTxMailBox[empty_box].TDLR=0x56781234;CAN1-》sTxMailBox[empty_box].TDHR=0x00009abc;CAN1-》sTxMailBox[empty_box].TIR|=(1《《0);//請求發(fā)送}else{MyDebugger_LEDs(orange,on);}Delay(100);/*選擇空的發(fā)送郵箱:標(biāo)準(zhǔn)標(biāo)識符0x40b(10000001011b)數(shù)據(jù)幀不使用擴展標(biāo)識符*/if(CAN1-》TSR&((1《《26)|(1《《27)|(1《《28))){empty_box=((CAN1-》TSR》》24)&0x00000003);CAN1-》sTxMailBox[empty_box].TIR=(0x40b《《21);CAN1-》sTxMailBox[empty_box].TDTR&=0xfffffff0;CAN1-》sTxMailBox[empty_box].TDTR|=0x00000004;//發(fā)送數(shù)據(jù)長度為4CAN1-》sTxMailBox[empty_box].TDLR=0x56781234;CAN1-》sTxMailBox[empty_box].TDHR=0x00000000;CAN1-》sTxMailBox[empty_box].TIR|=(1《《0);//請求發(fā)送}else{MyDebugger_LEDs(orange,on);}Delay(100);}}/****************************************函數(shù)名:CAN_GPIO_config參數(shù):無返回值:無功能:設(shè)置CAN1,2控制器用到IO口CAN1_TX---------PD1CAN1_RX---------PB8CAN2_TX---------PB13CAN2_RX---------PB5****************************************/voidCAN_GPIO_config(){RCC-》AHB1ENR|=((1《《1)|(1《《3));//使能GPIOB、D時鐘GPIOB-》AFR[0]|=0x00900000;//AF9GPIOB-》AFR[1]|=0x00900009;GPIOD-》AFR[0]|=0x00000090;GPIOB-》MODER&=0xF3FCF3FF;//第二功能GPIOB-》MODER|=0x08020800;GPIOD-》MODER&=0xFFFFFFF3;GPIOD-》MODER|=0x00000008;GPIOB-》OSPEEDR&=0xF3FCF3FF;//50MGPIOB-》OSPEEDR|=0x08020800;GPIOD-》OSPEEDR&=0xFFFFFFF3;GPIOD-》OSPEEDR|=0x00000008;GPIOB-》PUPDR&=0xF3FCF3FF;//上拉GPIOB-》PUPDR|=0x04010400;GPIOD-》PUPDR&=0xFFFFFFF3;GPIOD-》PUPDR|=0x00000004;}/****************************************函數(shù)名:CAN2_RX1_IRQHandler參數(shù):無返回值:無功能:CAN2fifo1接收中斷處理把信息存進循環(huán)隊列****************************************/voidCAN2_RX1_IRQHandler(){if(CAN2-》RF1R&(0x00000003))//接收到新的消息,fifo1非空{(diào)Producer++;if(Producer==RECEIVE_BUFFER_SIZE)Producer=0;if(Producer!=Consumer){CAN2_receive_buffer[Producer][0]=CAN2-》sFIFOMailBox[1].RIR;CAN2_receive_buffer[Producer][1]=CAN2-》sFIFOMailBox[1].RDTR;CAN2_receive_buffer[Producer][2]=CAN2-》sFIFOMailBox[1].RDLR;CAN2_receive_buffer[Producer][3]=CAN2-》sFIFOMailBox[1].RDHR;}else{if(Producer==0)Producer=RECEIVE_BUFFER_SIZE;Producer--;MyDebugger_LEDs(blue,on);}CAN2-》RF1R|=(1《《5);//釋放郵箱}if(CAN2-》RF1R&(1《《3))//fifo0滿{MyDebugger_LEDs(red,on);CAN2-》RF1R&=~(1《《3);}if(CAN2-》RF1R&(1《《4))//fifo0溢出{MyDebugger_LEDs(red,on);CAN2-》RF1R&=~(1《《4);}}/****************************************函數(shù)名:TIM7_init參數(shù):無返回值:無功能:初始化定時器7作1s定時用****************************************/voidTIM7_init(){RCC-》APB1ENR|=(1《《5);//打開TIM7時鐘TIM7-》PSC=8399;//對時鐘84M進行8400分頻,使得計數(shù)頻率為10kTIM7-》ARR=10000;//定時一秒TIM7-》CNT=0;//清空計數(shù)器TIM7-》CR1|=(1《《7);//自動重裝載預(yù)裝載使能TIM7-》DIER|=1;//使能中斷NVIC-》IP[55]=0xe0;NVIC-》ISER[1]|=(1《《(55-32));TIM7-》CR1|=1;//開始計時}/****************************************函數(shù)名:TIM7_IRQHandler參數(shù):無返回值:無功能:定時器7中斷處理1s定時到把can2收到的信息轉(zhuǎn)換格式用usrt發(fā)送到超級終端顯示****************************************/voidTIM7_IRQHandler(void){u32length;if(TIM7-》SR){length=get_rece_data();MyDebugger_Message(UART_send_buffer,length);TIM7-》SR&=~(0x0001);}}/****************************************函數(shù)名:get_rece_data參數(shù):無返回值:length整理后要發(fā)送數(shù)據(jù)的長度功能:把循環(huán)隊列的信息取出進行格式轉(zhuǎn)換把信息存到uart發(fā)送緩沖區(qū)****************************************/u32get_rece_data(){u8filter_No;u8Data_length;chari;u32length=0;constcharascii[16]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};while(1){if(Producer!=Consumer){Consumer++;if(Consumer==RECEIVE_BUFFER_SIZE)Consumer=0;UART_send_buffer[length++]=‘\n’;UART_send_buffer[length++]=‘\r’;//FilterNo.xxUART_send_buffer[length++]=‘F’;UART_send_buffer[length++]=‘i’;UART_send_buffer[length++]=‘l’;UART_send_buffer[length++]=‘t’;UART_send_buffer[length++]=‘e’;UART_send_buffer[length++]=‘r’;UART_send_buffer[length++]=‘’;UART_send_buffer[length++]=‘N’;UART_send_buffer[length++]=‘o’;UART_send_buffer[length++]=‘。’;filter_No=(CAN2_receive_buffer[Consumer][1]》》8)&0x000000ff;UART_send_buffer[length++]=filter_No%100/10+‘0’;UART_send_buffer[length++]=filter_No%10+‘0’;UART_send_buffer[length++]=‘\n’;UART_send_buffer[length++]=‘\r’;//DataLength:xUART_send_buffer[length++]=‘D’;UART_send_buffer[length++]=‘a(chǎn)’;UART_send_buffer[length++]=‘t’;UART_send_buffer[length++]=‘a(chǎn)’;UART_send_buffer[length++]=‘L’;UART_send_buffer[length++]=‘e’;UART_send_buffer[length++]=‘n’;UART_send_buffer[length++]=‘g’;UART_send_buffer[length++]=‘t’;UART_send_buffer[length++]=‘h’;UART_send_buffer[length++]=‘:’;Data_length=CAN2_receive_buffer[Consumer][1]&0x0000000f;UART_send_buffer[length++]=Data_length%10+‘0’;UART_send_buffer[length++]=‘\n’;UART_send_buffer[length++]=‘\r’;if(CAN2_receive_buffer[Consumer][0]&(1《《1)){UART_send_buffer[length++]=‘R’;UART_send_buffer[length++]=‘e’;UART_send_buffer[length++]=‘m’;UART_send_buffer[length++]=‘o’;UART_send_buffer[length++]=‘t’;UART_send_buffer[length++]=‘e’;UART_send_buffer[length++]=‘F’;UART_send_buffer[length++]=‘r’;UART_send_buffer[length++]=‘a(chǎn)’;UART_send_buffer[length++]=‘m’;UART_send_buffer[length++]=‘e’;}else{UART_send_buffer[length++]=‘D’;UART_send_buffer[length++]=‘a(chǎn)’;UART_send_buffer[length++]=‘t’;UART_send_buffer[length++]=‘a(chǎn)’;UART_send_buffer[length++]=‘F’;UART_send_buffer[length++]=‘r’;UART_send_buffer[length++]=‘a(chǎn)’;UART_send_buffer[length++]=‘m’;UART_send_buffer[length++]=‘e’;}UART_send_buffer[length++]=‘\n’;UART_send_buffer[length++]=‘\r’;if(CAN2_receive_buffer[Consumer][0]&(1《《2)){UART_send_buffer[length++]=‘e’;UART_send_buffer[length++]=‘x’;UART_send_buffer[length++]=‘t’;UART_send_buffer[length++]=‘’;UART_send_buffer[length++]=‘I’;UART_send_buffer[length++]=‘D’;UART_send_buffer[length++]=‘:’;UART_send_buffer[length++]=ascii[CAN2_receive_buffer[Consumer][0]》》31];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》27)&0x0000000f];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》23)&0x0000000f];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》19)&0x0000000f];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》15)&0x0000000f];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》11)&0x0000000f];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》7)&0x0000000f];UART_send_buffer[length++]=ascii[(CAN2_receive_buffer[Consumer][0]》》3)&0x0000000f];}else{UART_send_b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論