STM32調(diào)試經(jīng)驗(yàn)_第1頁
STM32調(diào)試經(jīng)驗(yàn)_第2頁
STM32調(diào)試經(jīng)驗(yàn)_第3頁
STM32調(diào)試經(jīng)驗(yàn)_第4頁
STM32調(diào)試經(jīng)驗(yàn)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、PVD /可編程電壓檢測(cè)器1. Lib中加入stm32f10x_pwr.c和bkp.c文件。2. 去掉conf.h中的兩個(gè)注釋3. 開啟時(shí)鐘APB1的BKP和PWR4. PVD的中斷時(shí)位于EXTI16上的外部中斷5. 具體步驟:缺省值設(shè)置,清中斷標(biāo)志位,選擇中斷線路,模式,觸發(fā)方式,線路使能,初始化結(jié)構(gòu)體,后備寄存器操作使能,設(shè)置電壓的閥值,使能PVD6. 中斷的優(yōu)先級(jí)推薦選擇搶占最高級(jí)7. PVD中斷中保存的數(shù)據(jù)量和供電的電源上的電容大小有絕對(duì)關(guān)系。SPI /串行外設(shè)接口1. 加入spi.c文件,去掉conf.h中的兩個(gè)注釋2. 開啟時(shí)鐘APB2(SPI1),開啟端口復(fù)用3. 配置SPI的M

2、ISO,MOSI,Clock,NSS(復(fù)用推挽輸出,浮空輸入,NSS選擇軟件模式不需要配置,但是模塊的NSS還是需要設(shè)置的)4. 用開發(fā)板的話,需要失能其他不用的SPI模塊,避免出現(xiàn)問題。5. 結(jié)構(gòu)體數(shù)組初始化,模式,極性,相位,校驗(yàn),等等。6. SPI的發(fā)送和接收,SPI讀數(shù)據(jù)需要發(fā)送任意數(shù)據(jù)才能讀。(原因是主設(shè)備提供時(shí)鐘)7. SPI的NSS引腳在硬件模式下可輸入可輸出,設(shè)置主模式輸出模式的時(shí)候需要SPI_SSOutputCmd(SPI1, ENABLE);8. (16.6.14)SPI不用中斷的發(fā)送接收函數(shù)測(cè)試:SPI是全雙工,讀寫分別有數(shù)據(jù)線,共用SCK時(shí)鐘,寫,讀是同步進(jìn)行,不過操作

3、具體芯片的時(shí)候,返回值要根據(jù)芯片的datasheet操作。所以一般讀的時(shí)候都需要寫數(shù)據(jù)啟動(dòng)時(shí)鐘。9. (16.7.27)用IO口模擬時(shí)序的時(shí)候,MOSI和MISO的初始化引腳置高2016/3/11. B碼程序MAX485在無輸入信號(hào)的情況下,輸出保持高電平。2. 定時(shí)器輸入捕獲的時(shí)候,捕獲上升沿時(shí),捕獲引腳設(shè)置為下拉輸入。3. 上拉輸入:外部無信號(hào)輸入時(shí),引腳電平保持高電平(比如I2C)4. 在定時(shí)器輸入捕獲時(shí),捕獲引腳設(shè)置成浮空輸入的話,引腳電平狀態(tài)是不穩(wěn)定的,有波動(dòng)2016/3/30 I2C1. STM32的硬件I2C模塊不穩(wěn)定,使用軟件模擬時(shí)序的方式使用I2C模塊,硬件I2C存在Bug.

4、2. FATFS32的MP3程序在支持中文文件名之后存在目錄讀取英文文件名失敗的現(xiàn)象,此問題未解決(已解決,指針地址沒有回送)。2016/4/5CAN1. 在設(shè)置一個(gè)寄存器之前,相應(yīng)的位先清空,再設(shè)置。2. CAN總線告一段落,設(shè)置CAN總線CAN_InitTypeDef (設(shè)置工作模式,波特率)和 CAN_FilterInitTypeDef (設(shè)置屏蔽濾波器)。3. 設(shè)置發(fā)送報(bào)文的ID格式,IDE,RTR,數(shù)據(jù)等參數(shù)CanTxMsg 和 CanRxMsg。4. 相應(yīng)的中斷。屏蔽過濾寄存器關(guān)聯(lián)FIFO,F(xiàn)IFO0時(shí)是USB_LP_CAN1_RX0_IRQHandler。FIFO1時(shí)是CAN1_

5、RX1_IRQHandler。2016/4/5中斷1 Stm32f10x_it.c中的中斷名稱 是在startup_stm32f10x_hd.s中查找添加。2 NVIC組管理中的中斷通道名稱 是在 stm32f10x_it.h中查找添加。2016/4/13 Systick 和 TFT觸摸屏1. systick在設(shè)置成1us中斷時(shí),容易出現(xiàn)問題,具體的等液晶觸摸屏功能實(shí)現(xiàn)后再測(cè)試。2. TFT觸摸屏使用SPI通信時(shí),SPI的頻率選擇速度太快(8分頻)時(shí),高電平的時(shí)間達(dá)不到200ns,會(huì)丟失數(shù)據(jù)。3. 等差數(shù)列中位數(shù)(a0+an)/24. 觸摸屏使用中斷法畫點(diǎn)的時(shí)候,出現(xiàn)描點(diǎn)非常慢的現(xiàn)象。解決:因

6、為串口不停的在打印消息占用中斷資源,在描點(diǎn)的時(shí)候不要打印5. 液晶取模軟件的使用,字模3和 LCD2002完美版,取模的方式不同,字模3是整體取模,但是LCD是每個(gè)字單獨(dú)取模,所以編程上不同。2016/4/23 定時(shí)器延遲函數(shù) 1. 定時(shí)器更新標(biāo)志位放在結(jié)構(gòu)體初始化前清空標(biāo)志位2016/4/25 Modbus 之CRC校驗(yàn)1. 串口發(fā)送數(shù)據(jù)時(shí)或者檢測(cè)定時(shí)器更新事件時(shí),通過讀SR的相應(yīng)標(biāo)志位保證發(fā)送或者事件的發(fā)生。2.Modbus的CRC16校驗(yàn)在發(fā)送時(shí)是 低8位在前,高8位在后。3.注意運(yùn)算符的優(yōu)先級(jí)問題。4. 對(duì)于memcpy(目標(biāo)數(shù)組,源數(shù)組,個(gè)數(shù)) 。5. A? b:c 若A為真,則表達(dá)

7、式b;若B為假,則表達(dá)式C2016/4/27 SD response ,數(shù)據(jù)地址1. Some SDs command have response, their saved in SDIO_RESPx register.2. When write the addresss data, if address=0, Data width is 4. So when you write in the address 3, you should be 3*4=12 , Use 12 replace 3.Example: Address 0use 0 1 2 3 , Address1use 4 5 6

8、7 , Address2head address= 2*4=8 9 10 11.Example: Sector * block size 上面是應(yīng)用在字節(jié)一一對(duì)應(yīng)3. normal u16 a=1,2,3; a 的地址如果是m ,那么a1的地址就是m+2 u32的數(shù)組就是m+4 u8 的數(shù)組就是 m+12016/4/28 SPI1. SPI的接收寄存器SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /沒有數(shù)據(jù)傳輸?shù)臅r(shí)候,時(shí)鐘保持低電平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /在第一個(gè)時(shí)鐘邊沿處理數(shù)據(jù)2016

9、/4/29 1. 外部中斷模式的選擇,選擇是中斷模式還是事件模式2016/5/51.平年閏年判斷if(timesVal5%400=0)|(timesVal5%4=0)&&(timesVal5%100!=0) /如果為閏年DaysOfMouth1=29;elseDaysOfMouth1=28;2016/5/13 中斷一. 電平同時(shí)變化1. 中斷上下邊沿的時(shí)間間隔1us時(shí)。(即高電平保持1us) 結(jié)論:丟失STM32外部中斷比如,EXTI95的中斷,選擇PB6,PB7作為外部中斷輸入,如果外部中斷同時(shí)來的話,比如:先下降后上升,第一個(gè)邊沿都能進(jìn)中斷函數(shù),并且按照函數(shù)順序處理(只進(jìn)一

10、次中斷),但是,當(dāng)?shù)诙€(gè)邊沿來時(shí)會(huì)丟失函數(shù)順序靠后的中斷線函數(shù)。2. 中斷上下邊沿的時(shí)間間隔1ms時(shí)(即高電平保持1ms) 結(jié)論:不丟失STM32外部中斷線都能很好的進(jìn)入相應(yīng)的中斷處理函數(shù),比如Line6與Line7 都可以相應(yīng)的判斷處理。前提是中斷處理函數(shù)中的程序小于1ms3.一般在編程的時(shí)候中斷中函數(shù)用systick計(jì)算時(shí)間。Systick的us級(jí)中斷使用時(shí),在systick中斷函數(shù)中的程序就不能超過1us否則死中斷了。4.外部中斷設(shè)置上下降沿雙觸發(fā)時(shí),觸發(fā)上升沿后再觸發(fā)下降沿時(shí),STM32內(nèi)核可能需要時(shí)間設(shè)置,所以如果脈沖邊沿間隔時(shí)間太短容易丟失,1us會(huì)丟失。二. 電平單獨(dú)線路中斷1.

11、單個(gè)中斷線的中斷,當(dāng)中斷處理函數(shù)執(zhí)行時(shí)間t大于電平跳變時(shí)間t2時(shí),如果設(shè)置捕捉上升下降跳變中斷t2的下降(或上升)沿中斷會(huì)丟失。三. STM32的中斷與事件產(chǎn)生中斷一定產(chǎn)生事件,事件不可屏蔽,中斷可以屏蔽2016/5/18 串口不用microLib 的打印1. 不用microLib的printf函數(shù),自己的版本需要改寫。原子的源碼和自己寫的串口初始化程序有點(diǎn)問題,fput需要改動(dòng)待測(cè)的標(biāo)志位。2016/7/2LWIP源碼無法PING通對(duì)應(yīng)GPIO口需要改寫,在初始化的時(shí)候,尤其是復(fù)位口,還有片選口,一定需要給確定的狀態(tài),在移植時(shí),源碼的片選操作端口也要對(duì)應(yīng)的改2016/7/4 1. LWIP源

12、碼網(wǎng)頁無法打開 2. LWIP網(wǎng)頁無法刷新1. 數(shù)據(jù)包發(fā)送函數(shù)調(diào)用的寫buff函數(shù)時(shí)序邏輯錯(cuò)誤和datasheet不相符合(多加了一句空指令)。2. 發(fā)送函數(shù)的計(jì)數(shù)初值類型u8 過小,實(shí)際為u16 ,網(wǎng)頁實(shí)質(zhì)已經(jīng)刷新,但是前256個(gè)數(shù)據(jù)一樣,所以造成沒有刷新的假象。2016/7/142016/7/29 nrf24l01調(diào)試經(jīng)驗(yàn)1. 串口調(diào)試助手,在選HEX發(fā)送時(shí),發(fā)0x01時(shí),只要輸入 01 發(fā)送就是0x012. 在調(diào)試的時(shí)候,尤其是調(diào)試開發(fā)板的時(shí)候,一定需要檢查板子上一些模塊可能共用的總線有干擾3. STM32 在上電后只要是沒有初始化的端口,GPIO的屬性都是低電平4. 51單片機(jī)上電后只

13、要是沒有給初值的端口,IO口都是高電平5. NRF24L01工作在增強(qiáng)型shockburst 模式時(shí),發(fā)送和接收模式都需要設(shè)置自動(dòng)重發(fā)功能,增強(qiáng)型比普通型更加可靠,有應(yīng)答和自動(dòng)重發(fā)的功能。6. 操作新的模塊時(shí)一定需要把工作模式和寄存器的配置弄清楚7. 在頭文件里定義數(shù)組的時(shí)候,需要加static 否則,在放在STM32f10x.h一起包含的時(shí)候,會(huì)出現(xiàn)重復(fù)定義。函數(shù)聲明放在.h中就不會(huì)出現(xiàn)。8. 在配置無線模塊地址時(shí),地址寬度P0,P1的地址最長5位,模塊先寫地址低字節(jié),P1-P5的地址只有最低位可以設(shè)置。9. 自動(dòng)應(yīng)答模式和自動(dòng)重發(fā)關(guān)閉時(shí),實(shí)測(cè)速率可達(dá)64KB/s,自動(dòng)應(yīng)答模式下速率40KB

14、/s.10. 只有P0地址可以接受自動(dòng)應(yīng)答,而且發(fā)送端發(fā)送地址等于接收地址。 STM32下載完有變化的程序后,如果出現(xiàn)沒有變化,那么斷電再開。前一次和后一次外設(shè)時(shí)鐘關(guān)閉有可能沒關(guān)掉,得重啟2016/8/31STM32的I2C一. C語言編程函數(shù)1. Strstr(str1,str2) strstr(str1,str2) 函數(shù)用于判斷字符串str2是否是str1的子串。如果是,則該函數(shù)返回str2在str1中首次出現(xiàn)的地址;否則,返回NULL。char *strcpy(char* dest, const char *src);說明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間

15、來容納src的字符串。返回指向dest的指針。2. abs(int i)求絕對(duì)值3. sqrt(a) , a>=0開平方4. int sprintf( char *buffer, const char *format, argument );將 " String: %sn" 強(qiáng)制轉(zhuǎn)換寫入到buffer200的數(shù)組并且 %s處 已經(jīng)用s替換成”computer”char buffer200, s = "computer" ;sprintf( buffer, " String: %sn", s );返回值是寫入buffer 的字符數(shù)

16、。5. 高級(jí)宏應(yīng)用1. #define myprintf(.) printf("lch:File:%s, Line:%d, Function:%s, " _VA_ARGS_, _FILE_, _LINE_ , _FUNCTION_);宏定義myprintf() 中的省略號(hào)會(huì)原樣的替換在_VA_ARGS_處。并且_VA_ARGS_只能等于常量。2. #,#代表與一個(gè)字符串連接 / #n 就是以 "n" 的字符串#代表與符號(hào)連接,可以是宏符號(hào),或者是變量 /#n 就是和 #左邊的參數(shù)直接連接比如 a#5 就是a5例#define n 8+9#define n

17、n 123#define mm(n) printf( "這是一個(gè)測(cè)試" #n "測(cè)試 " "%d" , #nn)3.#define PDEBUG(fmt, args.) printk( KERN_DEBUG "scull: " fmt, # args) 宏定義中的省略號(hào)表示一串可變的參數(shù), 這一串參數(shù)可用args加以引用.例PDEBUG("a=%d, b=%d", a, b); 宏展開 print

18、k( KERN_DEBUG "scull: " "a=%d, b=%d", a, b);4. 字節(jié)內(nèi)存填充的問題 _packed 關(guān)鍵詞是編譯器語言typedef _packed struct_packed表示此結(jié)構(gòu)體成員變量不進(jìn)行內(nèi)存填充,優(yōu)點(diǎn)是方便指針讀數(shù)據(jù),缺點(diǎn)是不方便CPU操作比如:typedef struct typedef _packed struct   char x; char x;  int

19、0;y;  int y; struct1; struct2; 在32位的ARM SDT編譯器中,編譯sizeof(struct1)=8,  char x; 會(huì)在x后面填充3個(gè)字節(jié)sizeof(struct2)=5 5. assert(n!=0); 或者 ASSERT(n!=0) 參數(shù)檢查,程序判斷n不能等于0 ,否則報(bào)錯(cuò) System("pause"); 系統(tǒng)暫停程序,會(huì)打印“按任意鍵繼續(xù)”6. 1 ul定義1是unsigned long型數(shù)據(jù),同理1u 代表定義為unsigned int 型7.sizeof(數(shù)組

20、名)求占用空間長度8. int strncmp(str1, str2, n)比較前n個(gè)str1和str2的ASCII碼值,相等返回0, 若s1>s2,返回大于0 的值,s1<s2,返回小于0的值。 Int strcmp(const char*s1, const char *s2)當(dāng)s1<s2時(shí),返回為負(fù)數(shù);當(dāng)s1=s2時(shí),返回值= 0;當(dāng)s1>s2時(shí),返回正數(shù)。9.函數(shù)指針Void showNum(int n, void (*ptr)() );Void (*ptr)()這里是聲明了一個(gè)void類型的函數(shù)指針變量ptr 。這里的ptr需要用括號(hào)括起來void代表無返回值,

21、但是去掉括號(hào)就會(huì)有歧義混亂。所以函數(shù)指針一定要用括號(hào)括起來。10.聯(lián)合體:幾個(gè)不同的變量共同占用一段內(nèi)存的結(jié)構(gòu)。單片機(jī)中經(jīng)常會(huì)遇見分離高低字節(jié)的操作,比如進(jìn)行計(jì)時(shí)中斷復(fù)位操作時(shí)往往會(huì)進(jìn)行(65535-200)/256,(65535-200)%256這樣的操作,而一個(gè)除法消耗四個(gè)機(jī)器周期,取余也需要進(jìn)行一些列復(fù)雜的運(yùn)算,如果在短時(shí)間內(nèi)需要進(jìn)行很多次這樣的運(yùn)算無疑會(huì)給程序帶來巨大的負(fù)擔(dān)。其實(shí)進(jìn)行這些操作的時(shí)候我們需要的僅僅是高低字節(jié)的數(shù)據(jù)分離而已,這樣利用聯(lián)合體我們很容易降低這部分開銷。代碼:union chufaint n; /n中存放要進(jìn)行分離高低字節(jié)的數(shù)據(jù)char a2; /在keil c中

22、一個(gè)整形占兩個(gè)字節(jié),char占一個(gè)字節(jié),所以n與數(shù)組a占的字節(jié)數(shù)相同test;test.n=65535-200; /進(jìn)行完這句后就一切ok了,下面通過訪問test中數(shù)組a的數(shù)據(jù)來取出高低字節(jié)的數(shù)據(jù)TH1=test.a0; /test.a0中存儲(chǔ)的是高位數(shù)據(jù),這是由于keil的特性,如果其他編譯器還請(qǐng)自測(cè)TL1=test.a1; /test.a1中儲(chǔ)存了test.n的低位數(shù)據(jù)!that's good,僅僅用了一條減法指令就達(dá)到了除法、取余的操作,在進(jìn)行高頻率定時(shí)時(shí)尤為有用。11.C語言中四種存儲(chǔ)類別C語言中變量的聲明/定義格式如下:存儲(chǔ)類型 類型修飾符 數(shù)據(jù)類型 變量名;Static l

23、ong、const int、char aa Static變量(靜態(tài))(1)限制作用域。利用這一特性可以在不同的文件中定義同名函數(shù)和同名變量,而不必?fù)?dān)心命名沖突。(2)靜態(tài)存儲(chǔ)區(qū),類似全局變量,變量的內(nèi)存只分配一次,但是仍然有(1)中的作用。(3)static和全局變量一樣初始化默認(rèn)值為0。(4)static申明局部變量,當(dāng)?shù)诙芜M(jìn)入子函數(shù)時(shí),會(huì)將上次變量結(jié)果值賦給變量Extern (靜態(tài))Auto (動(dòng)態(tài))即局部變量,非全局變量的缺省值假定為auto。故基本不用。Register(動(dòng)態(tài))把變量?jī)?yōu)先放在寄存器中操作,提高速度,不常用。const 常量,數(shù)值不可以更改volatile 每次取值必須

24、讀內(nèi)存code在STM32中是把內(nèi)容放在片上flash12.負(fù)數(shù) = 正數(shù)取反+1 13.C語言中程序運(yùn)行時(shí)具有以下幾個(gè)存儲(chǔ)空間 (大體上分成數(shù)據(jù)區(qū)和代碼區(qū))靜態(tài)存儲(chǔ)區(qū):靜態(tài)數(shù)據(jù)、全局變量和常量棧區(qū):局部變量(結(jié)束自動(dòng)釋放)堆區(qū):動(dòng)態(tài)分配內(nèi)存(malloc,calloc,free) _msize(void* p) 得到malloc分配的內(nèi)存大小代碼區(qū):存放代碼文字常量區(qū):常量定義的字符串函數(shù)指針指向:代碼區(qū)數(shù)據(jù)指針指向:堆,棧,數(shù)據(jù)存儲(chǔ)區(qū)14. Program Size: Code=8044 RO-data=52 RW-data=56 ZI-data=5184Code指存儲(chǔ)到flash【Rom

25、】中的程序代碼,代碼被系統(tǒng)添加了一部分初始化ZI的代碼,編程者看不到這部分。 ZI英語是zero initial,就是程序中用到的,并且被系統(tǒng)初始化為0的變量的字節(jié)數(shù),keil編譯器默認(rèn)是把你沒有初始化的變量都賦值一個(gè)0,這些變量在程序運(yùn)行時(shí)是保存在RAM中的RW是可讀可寫變量,就是初始化時(shí)候就已經(jīng)賦值了的,RW + ZI就是你的程序總共使用的RAM字節(jié)數(shù)。RO,這個(gè)是初始化的常量,但是這些值是被保存到Rom中的,就放在主程序后面,這樣所寫的程序占用的rom的字節(jié)總數(shù)就是Code + RO + RW。為什么Rom中還要存RW,還有ZI函數(shù)呢,因?yàn)榈綦姾驲AM中所有數(shù)據(jù)都丟失了,每次上

26、電RAM中的數(shù)據(jù)是被重新賦值的,每次這些固定的值就是存儲(chǔ)在Rom中的。15. 回調(diào)函數(shù)一般形式Typedef void (*cbShow)(int n);void ShowNum(cbShow pFun, int n) pFun(n); /showNum就是一個(gè)回調(diào)函數(shù)void PrintNum(int n) printf("Test1 is called,the number is %dn",n); 主函數(shù)中ShowNum( PrintNum,11111);16. void *memset(void *s, int ch, size_t n);函數(shù)解釋:將s中前n個(gè)字節(jié)

27、(typedef unsigned int size_t )用 ch 替換并返回指向 s 的指針。memset:作用是在一段內(nèi)存塊中填充某個(gè)給定的值,它是對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法。17.htonl()函數(shù)字節(jié)順序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序,即改變大小尾格式18. strlen()求字符串長度不包含 019. 處理字符串尾部要加020. 對(duì)于短小函數(shù)的實(shí)現(xiàn), C中是宏定義 C+中是內(nèi)聯(lián)函數(shù)21. 內(nèi)存中的地址都是字節(jié)unsigned long *p2;p2=(unsigned long *)0x810000;p2+5 = 0x81001422.sizeof如用于數(shù)組,只能測(cè)出靜態(tài)數(shù)

28、組的大小,無法檢測(cè)動(dòng)態(tài)分配的或外部數(shù)組大小。23. 指針Char const * p = const char* p 讀出數(shù)據(jù)是常量,函數(shù)指針能夠?qū)θ我獾刂愤M(jìn)行只讀操作Char* const p 函數(shù)指針是常量, 只能對(duì)固定的位置進(jìn)行讀寫操作int (*p)n / 數(shù)組指針,初始化例子: int axn; (*p)n=a; 定義一個(gè)行指針,并指向二維數(shù)組的第0行int * pn / 指針數(shù)組24.無限循環(huán) u8 i;for(i=0;i<=255;i+)當(dāng)i執(zhí)行到255時(shí),i會(huì)255+1=0,則無限循環(huán)25. 系統(tǒng)暫停引入頭文件”stdlib.h”System("pause"

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論