stm32學(xué)習(xí)筆記_第1頁
stm32學(xué)習(xí)筆記_第2頁
stm32學(xué)習(xí)筆記_第3頁
stm32學(xué)習(xí)筆記_第4頁
stm32學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目 錄Stm32學(xué)習(xí)筆記C語言基礎(chǔ)部分2Stm32學(xué)習(xí)筆記GPIO部分4Stm32學(xué)習(xí)筆記RCC部分6Stm32學(xué)習(xí)筆記AD部分7Stm32學(xué)習(xí)筆記CAN部分9Stm32學(xué)習(xí)筆記TIM部分9Stm32學(xué)習(xí)筆記USART部分12Stm32學(xué)習(xí)筆記超聲波測(cè)距部分14Stm32學(xué)習(xí)筆記程序調(diào)試部分21Stm32學(xué)習(xí)筆記C語言基礎(chǔ)部分1、C語言運(yùn)算符優(yōu)先級(jí) 詳細(xì)列表優(yōu)先級(jí)運(yùn)算符名稱或含義使用形式結(jié)合方向說明1數(shù)組下標(biāo)數(shù)組名常量表達(dá)式左到右()圓括號(hào)(表達(dá)式)/函數(shù)名(形參表).成員選擇(對(duì)象)對(duì)象.成員名->成員選擇(指針)對(duì)象指針->成員名2-負(fù)號(hào)運(yùn)算符-表達(dá)式右到左單目運(yùn)算符(類型)強(qiáng)

2、制類型轉(zhuǎn)換(數(shù)據(jù)類型)表達(dá)式+自增運(yùn)算符+變量名/變量名+單目運(yùn)算符-自減運(yùn)算符-變量名/變量名-單目運(yùn)算符*取值運(yùn)算符*指針變量單目運(yùn)算符&取地址運(yùn)算符&變量名單目運(yùn)算符!邏輯非運(yùn)算符!表達(dá)式單目運(yùn)算符按位取反運(yùn)算符表達(dá)式單目運(yùn)算符sizeof長度運(yùn)算符sizeof(表達(dá)式)3/除表達(dá)式/表達(dá)式左到右雙目運(yùn)算符*乘表達(dá)式*表達(dá)式雙目運(yùn)算符%余數(shù)(取模)整型表達(dá)式/整型表達(dá)式雙目運(yùn)算符4+加表達(dá)式+表達(dá)式左到右雙目運(yùn)算符-減表達(dá)式-表達(dá)式雙目運(yùn)算符5<<左移變量<<表達(dá)式左到右雙目運(yùn)算符>>右移變量>>表達(dá)式雙目運(yùn)算符6>大

3、于表達(dá)式>表達(dá)式左到右雙目運(yùn)算符>=大于等于表達(dá)式>=表達(dá)式雙目運(yùn)算符<小于表達(dá)式<表達(dá)式雙目運(yùn)算符<=小于等于表達(dá)式<=表達(dá)式雙目運(yùn)算符7=等于表達(dá)式=表達(dá)式左到右雙目運(yùn)算符!=不等于表達(dá)式!= 表達(dá)式雙目運(yùn)算符8&按位與表達(dá)式&表達(dá)式左到右雙目運(yùn)算符9按位異或表達(dá)式表達(dá)式左到右雙目運(yùn)算符10|按位或表達(dá)式|表達(dá)式左到右雙目運(yùn)算符11&&邏輯與表達(dá)式&&表達(dá)式左到右雙目運(yùn)算符12|邏輯或表達(dá)式|表達(dá)式左到右雙目運(yùn)算符13?:條件運(yùn)算符表達(dá)式1? 表達(dá)式2: 表達(dá)式3右到左三目運(yùn)算符14=賦值運(yùn)算符變量=

4、表達(dá)式右到左/=除后賦值變量/=表達(dá)式*=乘后賦值變量*=表達(dá)式%=取模后賦值變量%=表達(dá)式+=加后賦值變量+=表達(dá)式-=減后賦值變量-=表達(dá)式<<=左移后賦值變量<<=表達(dá)式>>=右移后賦值變量>>=表達(dá)式&=按位與后賦值變量&=表達(dá)式=按位異或后賦值變量=表達(dá)式|=按位或后賦值變量|=表達(dá)式15,逗號(hào)運(yùn)算符表達(dá)式,表達(dá)式,左到右從左向右順序運(yùn)算2、 數(shù)組:在程序設(shè)計(jì)中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個(gè)數(shù)組可以分解為多個(gè)數(shù)組

5、元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類別。3、 在語言中,字符常量有以下特點(diǎn):1) 字符常量只能用單引號(hào)括起來,不能用雙引號(hào)或者是括號(hào)2) 字符常量只能是單個(gè)字符,不能是字符串。3) 字符可以是字符集中任意字符。但數(shù)字被定義為字符之后就不能夠參與運(yùn)算。如'5'和5 是不同的。'5'是字符常量,不能參與運(yùn)算。Stm32學(xué)習(xí)筆記GPIO部分1、 函數(shù)名GPIO_ReadInputDataBit 功能描述 讀取指定端口管腳的輸入2、 對(duì)于GPIO的配置種類有8種之多:(1)

6、GPIO_Mode_AIN 模擬輸入(2)GPIO_Mode_IN_FLOATING 浮空輸入(3)GPIO_Mode_IPD 下拉輸入(4)GPIO_Mode_IPU 上拉輸入(5)GPIO_Mode_Out_OD 開漏輸出(6)GPIO_Mode_Out_PP 推挽輸出(7)GPIO_Mode_AF_OD 復(fù)用開漏輸出(8)GPIO_Mode_AF_PP 復(fù)用推挽輸出3、 推挽輸出:可以輸出高,低電平,連接數(shù)字器件; 推挽結(jié)構(gòu)一般是指兩個(gè)三極管分別受兩互補(bǔ)信號(hào)的控制,總是在一個(gè)三極管導(dǎo)通的時(shí)候另一個(gè)截止。高低電平由IC的電源低定。推挽電路是兩個(gè)參數(shù)相同的三極管或MOSFET,以推挽方式存在

7、于電路中,各負(fù)責(zé)正負(fù)半周的波形放大任務(wù),電路工作時(shí),兩只對(duì)稱的功率開關(guān)管每次只有一個(gè)導(dǎo)通,所以導(dǎo)通損耗小、效率高。輸出既可以向負(fù)載灌電流,也可以從負(fù)載抽取電流。推拉式輸出級(jí)既提高電路的負(fù)載能力,又提高開關(guān)速度。4、 如圖所示,推挽放大器的輸出級(jí)有兩個(gè)“臂”(兩組放大元件),一個(gè)“臂”的電流增加時(shí),另一個(gè)“臂”的電流則減小,二者的狀態(tài)輪流轉(zhuǎn)換。對(duì)負(fù)載而言,好像是一個(gè)“臂”在推,一個(gè)“臂”在拉,共同完成電流輸出任務(wù)。當(dāng)輸出高電平時(shí),也就是下級(jí)負(fù)載門輸入高電平時(shí),輸出端的電流將是下級(jí)門從本級(jí)電源經(jīng)VT3拉出。這樣一來,輸出高低電平時(shí),VT3 一路和 VT5 一路將交替工作,從而減低了功耗,提高了每個(gè)

8、管的承受能力。又由于不論走哪一路,管子導(dǎo)通電阻都很小,使RC常數(shù)很小,轉(zhuǎn)變速度很快。因此,推拉式輸出級(jí)既提高電路的負(fù)載能力,又提高開關(guān)速度。5、 開漏輸出:輸出端相當(dāng)于三極管的集電極. 要得到高電平狀態(tài)需要上拉電阻才行. 適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對(duì)強(qiáng)(一般20ma以內(nèi)).開漏形式的電路有以下幾個(gè)特點(diǎn):利用外部電路的驅(qū)動(dòng)能力,減少IC內(nèi)部的驅(qū)動(dòng)。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時(shí),驅(qū)動(dòng)電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部僅需很下的柵極驅(qū)動(dòng)電流。一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因?yàn)殚_漏引腳不連接外部的上拉電阻時(shí),只能輸出低電平

9、,如果需要同時(shí)具備輸出高電平的功能,則需要接上拉電阻,很好的一個(gè)優(yōu)點(diǎn)是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉(zhuǎn)換的沿的速度 。阻值越大,速度越低功耗越小,所以負(fù)載電阻的選擇要兼顧功耗和速度。)6、 3. OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點(diǎn),就是帶來上升沿的延時(shí)。因?yàn)樯仙厥峭ㄟ^外接上拉無源電阻對(duì)負(fù)載充電,所以當(dāng)電阻選擇小時(shí)延時(shí)就小,但功耗大;反之延時(shí)大功耗小。所以如果對(duì)延時(shí)有要求,則建議用下降沿輸出。7、 4. 可以將多個(gè)開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任

10、何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。補(bǔ)充:什么是“線與”?:8、 在一個(gè)結(jié)點(diǎn)(線)上, 連接一個(gè)上拉電阻到電源 VCC 或 VDD 和 n 個(gè) NPN 或 NMOS 晶體管的集電極 C 或漏極 D, 這些晶體管的發(fā)射極 E 或源極 S 都接到地線上, 只要有一個(gè)晶體管飽和, 這個(gè)結(jié)點(diǎn)(線)就被拉到地線電平上. 因?yàn)檫@些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會(huì)飽和, 所以這些基極或柵極對(duì)這個(gè)結(jié)點(diǎn)(線)的關(guān)系是或非 NOR 邏輯. 如果這個(gè)結(jié)點(diǎn)后面加一個(gè)反相器, 就是或 OR 邏輯.9、10、 其實(shí)可以簡單的理解為

11、:在所有引腳連在一起時(shí),外接一上拉電阻,如果有一個(gè)引腳輸出為邏輯0,相當(dāng)于接地,與之并聯(lián)的回路“相當(dāng)于被一根導(dǎo)線短路”,所以外電路邏輯電平便為0,只有都為高電平時(shí),與的結(jié)果才為邏輯1。11、 關(guān)于推挽輸出和開漏輸出,最后用一幅最簡單的圖形來概括:12、 該圖中左邊的便是推挽輸出模式,其中比較器輸出高電平時(shí)下面的PNP三極管截止,而上面NPN三極管導(dǎo)通,輸出電平VS+;當(dāng)比較器輸出低電平時(shí)則恰恰相反,PNP三極管導(dǎo)通,輸出和地相連,為低電平。右邊的則可以理解為開漏輸出形式,需要接上拉。13、14、 浮空輸入:對(duì)于浮空輸入,一直沒找到很權(quán)威的解釋,只好從以下圖中去理解了15、 由于浮空輸入一般多用

12、于外部按鍵輸入,結(jié)合圖上的輸入部分電路,我理解為浮空輸入狀態(tài)下,IO的電平狀態(tài)是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。16、 上拉輸入/下拉輸入/模擬輸入:這幾個(gè)概念很好理解,從字面便能輕易讀懂。17、 復(fù)用開漏輸出、復(fù)用推挽輸出:可以理解為GPIO口被用作第二功能時(shí)的配置情況(即并非作為通用IO口使用)18、 最后總結(jié)下使用情況:19、 在STM32中選用IO模式(1) 浮空輸入_IN_FLOATING 浮空輸入,可以做KEY識(shí)別,RX1(2)帶上拉輸入_IPUIO內(nèi)部上拉電阻輸入(3)帶下拉輸入_IPD IO內(nèi)部下拉電阻輸入(4) 模擬輸入_A

13、IN 應(yīng)用ADC模擬輸入,或者低功耗下省電(5)開漏輸出_OUT_OD IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。當(dāng)輸出為1時(shí),IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔???梢宰xIO輸入電平變化,實(shí)現(xiàn)C51的IO雙向功能(6)推挽輸出_OUT_PP IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的(7)復(fù)用功能的推挽輸出_AF_PP 片內(nèi)外設(shè)功能(I2C的SCL,SDA)(8)復(fù)用功能的開漏輸出_AF_OD片內(nèi)外設(shè)功能(TX1,MOSI,MISO.SCK.SS)20、 STM32設(shè)置實(shí)例

14、:(1)模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時(shí)先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);(2)如果是無上拉電阻,IO默認(rèn)是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開漏輸出_OUT_OD; Stm32學(xué)習(xí)筆記RCC部分1、 RCC有多種用途,包括時(shí)鐘設(shè)置,外設(shè)復(fù)位和時(shí)鐘管理。2、 RTC時(shí)鐘:系統(tǒng)時(shí)鐘:簡單的說,就是芯片系統(tǒng)內(nèi)部的時(shí)鐘,程序運(yùn)行的速度是由它來決定的。RTC:實(shí)時(shí)時(shí)

15、鐘, 如果供電,它會(huì)按照自己的精確等級(jí)運(yùn)行的,主要用來做日期時(shí)間的顯示用。3、 時(shí)鐘樹4、配置時(shí)鐘樹的方法:(1)定義一個(gè) 定義一個(gè) 定義一個(gè) ErrorStatu 類型的變量 HSEStartUpStatus (2)將時(shí)鐘樹復(fù)位至默認(rèn)設(shè)置 (3)開啟 HSE 晶振;(4)等待 HSE 晶振起 振穩(wěn)定,并將起結(jié)果保存HSEStartUpStatus 變量中;(5)判斷 HSE 晶振是否起成功(6)設(shè)置 HCLKHCLK 時(shí)鐘為時(shí)鐘為 SYSCL的 分頻(7)設(shè)置PLCK2 時(shí)鐘為 時(shí)鐘為SYSCLK的 分頻; (8)設(shè)置PLCK1 時(shí)鐘為 時(shí)鐘為SYSCLK的 分頻; Stm32學(xué)習(xí)筆記AD部

16、分1、 采樣保持器:計(jì)算機(jī)系統(tǒng)模擬量輸入通道中的一種模擬量存儲(chǔ)裝置。它是連接采樣器和模數(shù)轉(zhuǎn)換器的中間環(huán)節(jié)。采樣器是一種開關(guān)電路或裝置,它在固定時(shí)間點(diǎn)上取出被處理信號(hào)的值。采樣保持器則把這個(gè)信號(hào)值放大后存儲(chǔ)起來,保持一段時(shí)間,以供模數(shù)轉(zhuǎn)換器轉(zhuǎn)換,直到下一個(gè)采樣時(shí)間再取出一個(gè)模擬信號(hào)值來代替原來的值。在模數(shù)轉(zhuǎn)換器工作期間采樣保持器一直保持著轉(zhuǎn)換開始時(shí)的輸入值,因而能抑制由放大器干擾帶來的轉(zhuǎn)換噪聲,降低模數(shù)轉(zhuǎn)換器的孔徑時(shí)間,提高模數(shù)轉(zhuǎn)換器的精確度和消除轉(zhuǎn)換時(shí)間的不準(zhǔn)確性。一般生產(chǎn)過程控制計(jì)算機(jī)的模擬量輸入可能是每秒幾十點(diǎn)、幾百點(diǎn),對(duì)于大型系統(tǒng)甚至上千點(diǎn),往往需要高速采樣(如500010000點(diǎn)秒)。

17、為使這些模擬量信號(hào)逐個(gè)地送到模數(shù)轉(zhuǎn)換器,而不至降低被測(cè)信號(hào)的真實(shí)性,必須采用采樣保持器。在低速系統(tǒng)中一般可以省略這種裝置。 原理采樣保持電路由模擬開關(guān)、存儲(chǔ)元件和緩沖放大器A組成。在采樣時(shí)刻,加到模擬開關(guān)上的數(shù)字信號(hào)為低電平,此時(shí)模擬開關(guān)被接通,使存儲(chǔ)元件(通常是電容器)兩端的電壓UB隨被采樣信號(hào)UA變化。當(dāng)采樣間隔終止時(shí),D變?yōu)楦唠娖?模擬開關(guān)斷開,UB則保持在斷開瞬間的值不變。緩沖放大器的作用是放大采樣信號(hào),它在電路中的連接方式有兩種基本類型:一種是將信號(hào)先放大再存儲(chǔ),另一是先存儲(chǔ)再放大。對(duì)理想的采樣保持電路,要求開關(guān)沒有偏移并能隨控制信號(hào)快速動(dòng)作,斷開的阻抗要無限大,同時(shí)還要求存儲(chǔ)元件的

18、電壓能無延遲地跟蹤模擬信號(hào)的電壓,并可在任意長的時(shí)間內(nèi)保持?jǐn)?shù)值不變。2、 采樣頻率 英文名稱:sampling frequency 定義:在模數(shù)轉(zhuǎn)換器中采樣時(shí)間間隔的倒數(shù)。3、 Ad轉(zhuǎn)換器的分類4、 Ad轉(zhuǎn)換器的技術(shù)指標(biāo):轉(zhuǎn)換時(shí)間和轉(zhuǎn)換速率 分辨率 量化誤差 轉(zhuǎn)換精度5、 Ad位數(shù)的選擇6、 Ad轉(zhuǎn)換速率的確定7、 工作電壓和基準(zhǔn)電壓8、 Ad的工作模式:(1)獨(dú)立模式:分為單通道單次轉(zhuǎn)換模式、多通道(掃描)單次轉(zhuǎn)換模式、單通道連續(xù)轉(zhuǎn)換模式、多通道連續(xù)轉(zhuǎn)換模式、注入轉(zhuǎn)換模式單次轉(zhuǎn)換模式下,ADC只執(zhí)行一次轉(zhuǎn)換。在連續(xù)轉(zhuǎn)換模式中,當(dāng)前面ADC轉(zhuǎn)換一結(jié)束馬上就啟動(dòng)另一次轉(zhuǎn)換。掃描模式,此模式用來掃

19、描一組模擬通道。注入轉(zhuǎn)換模式:當(dāng)觸發(fā)方式為軟件出發(fā)或者外部出發(fā)方式時(shí),可以使用此模式。(2) 雙adc模式:分為同時(shí)為規(guī)則模式、快速交替模式、慢速交替模式、交替觸發(fā)模式、混合同步注入及+交替模式9、 規(guī)則通道和注入通道的區(qū)別: STM32的每個(gè)ADC模塊通過內(nèi)部的模擬多路開關(guān),可以切換到不同的輸入通道并進(jìn)行轉(zhuǎn)換。STM32特別地加入了多種成組轉(zhuǎn)換的模式,可以由程序設(shè)置好之后,對(duì)多個(gè)模擬通道自動(dòng)地進(jìn)行逐個(gè)地采樣轉(zhuǎn)換。 有2種劃分轉(zhuǎn)換組的方式:規(guī)則通道組和注入通道組。通常規(guī)則通道組中可以安排最多16個(gè)通道,而注入通道組可以安排最多4個(gè)通道。 在執(zhí)行規(guī)則通道組掃描轉(zhuǎn)換時(shí),如有例外處理則可啟用注入通道

20、組的轉(zhuǎn)換。一個(gè)不太恰當(dāng)?shù)谋扔魇牵阂?guī)則通道組的轉(zhuǎn)換好比是程序的正常執(zhí)行,而注入通道組的轉(zhuǎn)換則好比是程序正常執(zhí)行之外的一個(gè)中斷處理程序。 從系統(tǒng)設(shè)計(jì)上,測(cè)量并顯示室內(nèi)溫度的過程中斷了測(cè)量并顯示室外溫度的過程,但程序設(shè)計(jì)上可以在初始化階段分別設(shè)置好不同的轉(zhuǎn)換組,系統(tǒng)運(yùn)行中不必再變更循環(huán)轉(zhuǎn)換的配置,從而達(dá)到兩個(gè)任務(wù)互不干擾和快速切換的結(jié)果??梢栽O(shè)想一下,如果沒有規(guī)則組和注入組的劃分,當(dāng)你按下按鈕后,需要從新配置AD循環(huán)掃描的通道,然后在施放按鈕后需再次配置AD循環(huán)掃描的通道。10、 SRAMSRAM是英文Static RAM的縮寫,即靜態(tài)隨機(jī)存儲(chǔ)器。它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保

21、存它內(nèi)部存儲(chǔ)的數(shù)據(jù)。11、DMA原理:DMA(Direct Memory Access,直接內(nèi)存存取) 是所有現(xiàn)代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依于 CPU 的大量 中斷 負(fù)載。否則,CPU 需要從 來源 把每一片段的資料復(fù)制到 暫存器,然后把它們?cè)俅螌懟氐叫碌牡胤?。在這個(gè)時(shí)間中,CPU 對(duì)于其他的工作來說就無法使用。Stm32學(xué)習(xí)筆記CAN部分1、bxCAN主要特點(diǎn)支持CAN協(xié)議2.0A和2.0B主動(dòng)模式波特率最高可達(dá)1兆位/秒支持時(shí)間觸發(fā)通信功能發(fā)送3個(gè)發(fā)送郵箱,發(fā)送報(bào)文的優(yōu)先級(jí)特性可軟件配置,發(fā)送SOF時(shí)刻的時(shí)間戳接收3級(jí)深度的2個(gè)接收FIFO,14個(gè)位寬可變的

22、過濾器組標(biāo)識(shí)符列表FIFO溢出處理方式可配置,記錄接收SOF時(shí)刻的時(shí)間戳,時(shí)間觸發(fā)通信模式,禁止自動(dòng)重傳模式,16位自由運(yùn)行定時(shí)器,可在最后2個(gè)數(shù)據(jù)字節(jié)發(fā)送時(shí)間戳管理中斷可屏蔽,郵箱占用單獨(dú)1塊地址空間,便于提高軟件效率2、Stm32學(xué)習(xí)筆記TIM部分1、通用定時(shí)器(TIM)通用定時(shí)器是一個(gè)通過可編程預(yù)分頻器驅(qū)動(dòng)的16 位自動(dòng)裝載計(jì)數(shù)器構(gòu)成。它適用于多種場合,包括測(cè)量輸入信號(hào)的脈沖長度(輸入采集)或者產(chǎn)生輸出波形(輸出比較和PWM)。使用定時(shí)器預(yù)分頻器和RCC 時(shí)鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個(gè)微秒到幾個(gè)毫秒間調(diào)整。定時(shí)器是完全獨(dú)立的,而且沒有互相共享任何資源。2、 SCB是MD

23、K庫文件里面定義的一個(gè)結(jié)構(gòu)體,subsystem control block子系統(tǒng)管理模塊3、TIMER主要是由三部分組成:時(shí)基單元、輸入捕獲、輸出比較,還有兩種模式控制功能:從模式控制和主模式控制。4、定時(shí)器的計(jì)數(shù)模式: 向上計(jì)數(shù)模式,向下計(jì)數(shù)模式,在向下模式中,計(jì)數(shù)器從自動(dòng)裝入的值(TIMx_ARR計(jì)數(shù)器的值)開始向下計(jì)數(shù)到0,然后從自動(dòng)裝入的值重新開始并且產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件。每次計(jì)數(shù)器溢出時(shí)可以產(chǎn)生更新事件,在TIMx_EGR寄存器中設(shè)置UG位(通過軟件方式或者使用從模式控制器)也同樣可以產(chǎn)生一個(gè)更新事件。設(shè)置TIMx_CR1寄存器的UDIS位可以禁止UEV事件。這樣可以避免向預(yù)

24、裝載寄存器中寫入新值時(shí)更新影子寄存器。因此UDIS位被清為0之前不會(huì)產(chǎn)生更新事件。然而,計(jì)數(shù)器仍會(huì)從當(dāng)前自動(dòng)加載值重新開始計(jì)數(shù),同時(shí)預(yù)分頻器的計(jì)數(shù)器重新從0開始(但預(yù)分頻器的速率不能被修改)。此外,如果設(shè)置了TIMx_CR1寄存器中的URS位(選擇更新請(qǐng)求) ,設(shè)置UG位將產(chǎn)生一個(gè)更新事件UEV但不設(shè)置UIF標(biāo)志(因此不產(chǎn)生中斷和DMA請(qǐng)求),這是為了避免在發(fā)生捕獲事件并清除計(jì)數(shù)器時(shí),同時(shí)產(chǎn)生更新和捕獲中斷。當(dāng)發(fā)生更新事件時(shí),所有的寄存器都被更新,并且(根據(jù)URS位的設(shè)置)更新標(biāo)志位(TIMx_SR寄存器中的UIF位)也被設(shè)置。 中央對(duì)齊模式,5、時(shí)基單元包含: 計(jì)數(shù)器寄存器(TIMx_CNT

25、) 預(yù)分頻器寄存器 (TIMx_PSC),預(yù)分頻器可以將計(jì)數(shù)器的時(shí)鐘頻率按1到65536之間的任意值分頻。自動(dòng)裝載寄存器 (TIMx_ARR),自動(dòng)裝載寄存器是預(yù)先裝載的,寫或讀自動(dòng)重裝載寄存器將訪問預(yù)裝載寄存器。根據(jù)在TIMX_CR1寄存器中的自動(dòng)裝載預(yù)裝載使能位(ARPE)的設(shè)置,預(yù)裝載寄存器的內(nèi)容被立即或在每次的更新事件UEV時(shí)傳送到影子寄存器。6. 可設(shè)置時(shí)長的定時(shí)器的方法設(shè)置計(jì)數(shù)器的時(shí)鐘頻率。設(shè)置計(jì)數(shù)器的計(jì)數(shù)初值。打開計(jì)數(shù)器開始計(jì)數(shù)。開啟中斷。執(zhí)行中斷服務(wù)程序7、 通用定時(shí)器的時(shí)鐘來源: 內(nèi)部時(shí)鐘(CK_INT) 外部時(shí)鐘模式1:外部輸入腳(TIx) 外部時(shí)鐘模式2:外部觸發(fā)輸入(E

26、TR) 內(nèi)部觸發(fā)輸入(ITRx):使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器,如可以配置一個(gè)定時(shí)器Timer1而作為另一個(gè)定時(shí)器Timer2的預(yù)分頻器。8、 計(jì)數(shù)器時(shí)鐘頻率的計(jì)算方法 9、 從庫函數(shù)角度設(shè)置定時(shí)時(shí)間 (1)Timx時(shí)鐘使能:通用定時(shí)器掛在APB1下,通過APB1總線的使能函數(shù)來使能,函數(shù)為RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,enable)(2)初始化定時(shí)器參數(shù):設(shè)置自動(dòng)重裝值、分頻系數(shù)和計(jì)數(shù)方式等,函數(shù)原形為:TIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TI

27、M_TimeBaseInitStruct)功能描述:根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位,輸入?yún)?shù)1,TIMx:x可以是2,3或者4,來選擇TIM外設(shè);輸入?yún)?shù)2TIM-TimeBase_InitStruct:指向結(jié)構(gòu)TIM_TimeBaseInitTypeDef的指針,包含了TIMx時(shí)間基數(shù)單位的配置信息。TIM_TimeBaseInitTypeDef定義于文件“stm32f10x_tim.h”: typedef struct u16 TIM_Period; u16 TIM_Prescaler; u8 TIM_ClockDivision;

28、u16 TIM_CounterMode; TIM_TimeBaseInitTypeDef; TIM_Period設(shè)置了在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。TIM_Prescaler TIM_Prescaler設(shè)置了用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值。它的取值必須在0x0000和0xFFFF之間。TIM_ClockDivision TIM_ClockDivision設(shè)置了時(shí)鐘分割 (3)設(shè)置timx-dier允許更新中斷:函數(shù)原形void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, Fu

29、nctionalState NewState)功能描述,使能或者失能指定的TIM中斷,輸入?yún)?shù)1TIMx:x可以是2,3或者4,來選擇TIM外設(shè);輸入?yún)?shù)2,TIM_IT:待使能或者失能的TIM中斷源,輸入?yún)?shù)3NewState:TIMx中斷的新狀態(tài),這個(gè)參數(shù)可以取:ENABLE或者DISABLE輸入?yún)?shù)TIM_IT使能或者失能TIM的中斷。可以取下表的一個(gè)或者多個(gè)取值的組合作為該參數(shù)的值。TIM_IT_Update TIM中斷源,TIM_IT_CC1 TIM捕獲/比較1中斷源,TIM_IT_CC2 TIM捕獲/比較2中斷源,TIM_IT_CC3,TIM捕獲/比較3中斷源TIM_IT_CC4

30、TIM捕獲/比較4中斷源,TIM_IT_Trigger TIM觸發(fā)中斷源 (4) 設(shè)置中斷優(yōu)先級(jí),在nvic的寄存器中設(shè)置 (5)使能timx (6)編寫中斷服務(wù)函數(shù)10、TIM_ClearFlag 函數(shù)原形void TIM_ClearFlag(TIM_TypeDef* TIMx, u32 TIM_FLAG)功能描述,清除TIMx的待處理標(biāo)志位,輸入?yún)?shù)1,TIMx:x可以是2,3或者4,來選擇TIM外設(shè),輸入?yún)?shù)2,TIM_FLAG:待清除的TIM標(biāo)志位TIM_FLAG值:TIM_FLAG_Update TIM更新標(biāo)志位TIM_FLAG_CC1 TIM捕獲/比較1標(biāo)志位TIM_FLAG_CC

31、2 TIM捕獲/比較2標(biāo)志位TIM_FLAG_CC3 TIM捕獲/比較3標(biāo)志位TIM_FLAG_CC4 TIM捕獲/比較4標(biāo)志位TIM_FLAG_Trigger TIM觸發(fā)標(biāo)志位TIM_FLAG_CC1OF TIM捕獲/比較1溢出標(biāo)志位TIM_FLAG_CC2OF TIM捕獲/比較2溢出標(biāo)志位TIM_FLAG_CC3OF TIM捕獲/比較3溢出標(biāo)志位TIM_FLAG_CC4OF TIM捕獲/比較4溢出標(biāo)志位11、 函數(shù)名:TIM_GetCounter函數(shù)原形:u16 TIM_GetCounter(TIM_TypeDef* TIMx)功能描述:獲得TIMx計(jì)數(shù)器的值輸入?yún)?shù):TIMx:x可以是2

32、,3或者4,來選擇TIM外設(shè)12、函數(shù)名TIM_ GetITStatus函數(shù)原形TIM_GetITStatus(TIM_TypeDef* TIMx, u16 TIM_IT)功能描述檢查指定的TIM中斷發(fā)生與否輸入?yún)?shù)1TIMx:x可以是2,3或者4,來選擇TIM外設(shè)輸入?yún)?shù)2TIM_IT:待檢查的TIM中斷源13、函數(shù)名TIM_ITConfig函數(shù)原形void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState)功能描述使能或者失能指定的TIM中斷輸入?yún)?shù)1TIMx:x可以是2,3或者4,來選擇TIM外設(shè)輸入

33、參數(shù)2TIM_IT:待使能或者失能的TIM中斷源輸入?yún)?shù)3NewState:TIMx中斷的新狀態(tài)這個(gè)參數(shù)可以?。篍NABLE或者DISABLETIM_ITTIM_IT_UpdateTIM中斷源TIM_IT_CC1TIM捕獲/比較1中斷源TIM_IT_CC2TIM捕獲/比較2中斷源TIM_IT_CC3TIM捕獲/比較3中斷源TIM_IT_CC4TIM捕獲/比較4中斷源TIM_IT_TriggerTIM觸發(fā)中斷源14、函數(shù)名TIM_ ClearITPendingBit函數(shù)原形void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, u16 TIM_IT)功能描述清

34、除TIMx的中斷待處理位輸入?yún)?shù)1TIMx:x可以是2,3或者4,來選擇TIM外設(shè)輸入?yún)?shù)2TIM_IT:待檢查的TIM中斷待處理位15、STM32中有多達(dá)8個(gè)定時(shí)器,其中TIM1和TIM8是能夠產(chǎn)生三對(duì)PWM互補(bǔ)輸出的高級(jí)定時(shí)器,常用于三相電機(jī)的驅(qū)動(dòng),它們的時(shí)鐘由APB2的輸出產(chǎn)生。其它6個(gè)為普通定時(shí)器,時(shí)鐘由APB1的輸出產(chǎn)生。Stm32學(xué)習(xí)筆記USART部分1、 簡單的define定義#define MAXTIME 1000一個(gè)簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫if(i<MAXTIME).編譯器在處理這個(gè)代碼之前會(huì)對(duì)MAXTIME進(jìn)行處理替換為1000

35、。這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因?yàn)閐efine的定義更像是簡單的文本替換,而不是作為一個(gè)量來使用,這個(gè)問題在下面反映的尤為突出。2、 常見的頭文件#include <stdio.h> /定義輸入輸出函數(shù) #include <stdlib.h> /定義雜項(xiàng)函數(shù)及內(nèi)存分配函數(shù) #include <string.h> /字符串處理 #include <time.h> /定義關(guān)于時(shí)間的函數(shù) #include <stdio.h> /定義輸入輸出函數(shù) #include <ctype.h> /字符處理

36、#include <misc.h> /中斷優(yōu)先級(jí)分組#include<math.h>數(shù)學(xué)函數(shù)庫包含一些數(shù)學(xué)計(jì)算的公式3、UART:universal asynchronous receiver and transmitter通用異步收發(fā)器USART:universal synchronous asynchronous receiver and transmitter通用同步異步收發(fā)器都是指單片機(jī)的串口通訊,工作方式不一樣而已!4、USART主要特性 全雙工的,異步通信 NRZ標(biāo)準(zhǔn)格式 分?jǐn)?shù)波特率發(fā)生器系統(tǒng) 發(fā)送和接收共用的可編程波特率,最高達(dá) 4.5Mbits/s 可編

37、程數(shù)據(jù)字長度(8位或9位) 可配置的停止位-支持1或2個(gè)停止位 可配置的使用DMA的多緩沖器通信 在 SRAM里利用集中式 DMA緩沖接收/發(fā)送字節(jié) 單獨(dú)的發(fā)送器和接收器使能位 檢測(cè)標(biāo)志 接收緩沖器滿 發(fā)送緩沖器空 傳輸結(jié)束標(biāo)志 校驗(yàn)控制 發(fā)送校驗(yàn)位 對(duì)接收數(shù)據(jù)進(jìn)行校驗(yàn)5、 異步串行通信協(xié)議需要定義以下5個(gè)內(nèi)容:起始位、數(shù)據(jù)位、奇偶校撿位、停止位、波特率設(shè)置6、 應(yīng)用場合:芯片之間近距離,與PC機(jī)之間的通信和模塊之間遠(yuǎn)距離通信7、 串口通信(Serial Communication), 是指外設(shè)和計(jì)算機(jī)間,通過數(shù)據(jù)信號(hào)線 、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)

38、線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀?、 PC的串口就是COM口,TxD和RxD和GND就是包括在COM口中。接口通過三個(gè)引腳與其他設(shè)備連接在一起(見圖236)。任何USART雙向通信至少需要兩個(gè)腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX)。9、 函數(shù)USART_SendData,,函數(shù)原形void USART_SendData(USART_TypeDef* USARTx, u8 Data),功能描述通過外設(shè)USARTx發(fā)送單個(gè)數(shù)據(jù),USARTx:x可以是1,2或者3,來選擇USART外設(shè),輸入?yún)?shù)2,Data: 待發(fā)送的數(shù)據(jù)10、 函數(shù)USART_Receive

39、Data,函數(shù)原形u8 USART_ReceiveData(USART_TypeDef* USARTx),功能描述,返回USARTx最近接收到的數(shù)據(jù)輸入?yún)?shù),USARTx:x可以是1,2或者3,來選擇USART外設(shè)11、USART_GetFlagStatus,函數(shù)原形FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG) ,功能描述,檢查指定的USART標(biāo)志位設(shè)置與否,輸入?yún)?shù)1 USARTx:x可以是1,2或者3,來選擇USART外設(shè),輸入?yún)?shù)2 ,USART_FLAG:待檢查的USART標(biāo)志位12、 USA

40、RT_FLAG值USART_FLAG_CTS CTS標(biāo)志位USART_FLAG_LBD LIN中斷檢測(cè)標(biāo)志位USART_FLAG_TXE 發(fā)送數(shù)據(jù)寄存器空標(biāo)志位USART_FLAG_TC 發(fā)送完成標(biāo)志位USART_FLAG_RXNE 接收數(shù)據(jù)寄存器非空標(biāo)志位USART_FLAG_IDLE 空閑總線標(biāo)志位USART_FLAG_ORE 溢出錯(cuò)誤標(biāo)志位USART_FLAG_NE 噪聲錯(cuò)誤標(biāo)志位USART_FLAG_FE 幀錯(cuò)誤標(biāo)志位USART_FLAG_PE 奇偶錯(cuò)誤標(biāo)志位13、 USART_ ClearFlag函數(shù)原形void USART_ClearFlag(USART_TypeDef* USAR

41、Tx, u16 USART_FLAG)功能描述,清除USARTx的待處理標(biāo)志位,輸入?yún)?shù)1,USARTx:x可以是1,2或者3,來選擇USART外設(shè),輸入?yún)?shù)2,USART_FLAG:待清除的USART標(biāo)志位。14、 USART_ITConfig,函數(shù)名函數(shù)原形void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)功能描述,使能或者失能指定的USART中斷,輸入?yún)?shù)1,USARTx:x可以是1,2或者3,來選擇USART外設(shè),輸入?yún)?shù)2,USART_IT:待使能或者失能的USART中斷

42、源,輸入?yún)?shù)3,NewState:USARTx中斷的新狀態(tài),這個(gè)參數(shù)可以?。篍NABLE或者DISABLE USART_IT值USART_IT_PE 奇偶錯(cuò)誤中斷USART_IT_TXE 發(fā)送中斷USART_IT_TC 傳輸完成中斷USART_IT_RXNE 接收中斷USART_IT_IDLE 空閑總線中斷USART_IT_LBD LIN中斷檢測(cè)中斷USART_IT_CTS CTS中斷USART_IT_ERR 錯(cuò)誤中斷15、 USART1重映像STM32上有很多I/O口,也有很多的內(nèi)置外設(shè)想I2C,ADC,ISP,USART等 ,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O口共用管腳的,也就

43、是I/O管腳的復(fù)用功能。但是STM32還有一特別之處就是:很多復(fù)用內(nèi)置的外設(shè)的I/O引腳可以通過重映射功能,從不同的I/O管腳引出,即復(fù)用功能的引腳是可通過程序改變的.讀到這里相信大家都應(yīng)該了解了端口重映射的一些概念了16、 串口是需要使用IO口來進(jìn)行發(fā)送和接收的。17函數(shù)名USART_ SendData函數(shù)原形void USART_SendData(USART_TypeDef* USARTx, u8 Data)功能描述通過外設(shè)USARTx發(fā)送單個(gè)數(shù)據(jù)輸入?yún)?shù)1 USARTx:x可以是1,2或者3,來選擇USART外設(shè)輸入?yún)?shù)2 Data: 待發(fā)送的數(shù)據(jù)Stm32學(xué)習(xí)筆記超聲波測(cè)距部分1、 程

44、序目的:使用STM32控制超聲波模塊并使用USART顯示#include "stm32f10x.h"#include "math.h"#include "stdio.h"#include "time.h"void Tim2_Init(void);void GPIO_Configuration(void);void RCC_Configuration(void);void USART_Configuration(void);u16 Sensor_using(void);void delay(void);main()

45、u16 result=0; u8 i; FlagStatus Status; /*system clock init*/ RCC_Configuration(); /*IO init*/ GPIO_Configuration(); /*TIM初始化*/ USART_Configuration(); Tim2_Init(); while(1) u16m;result=Sensor_using(); i=(u8)(result&0xff00)>>8);/ 輸出高八位/while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESE

46、T);USART_SendData(USART1,i); i=(u8)result&0x00ff); /輸出低八位/while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)= RESET); USART_SendData(USART1,i); for(m=800;m>0;m-) delay(); void RCC_Configuration(void) ErrorStatus HSEStartUpStatus; RCC_DeInit(); /時(shí)鐘控制寄存器全部恢復(fù)默認(rèn)值 RCC_HSEConfig(RCC_HSE_ON);/外部高速時(shí)鐘源

47、開啟(8M晶振) HSEStartUpStatus = RCC_WaitForHSEStartUp();/等待外部時(shí)鐘就緒 if(HSEStartUpStatus = SUCCESS)/如果時(shí)鐘啟動(dòng)成功 RCC_HCLKConfig(RCC_SYSCLK_Div1); /定義AHB設(shè)備時(shí)鐘為系統(tǒng)時(shí)鐘1分頻 RCC_PCLK2Config(RCC_HCLK_Div1);/定義APB2設(shè)備時(shí)鐘為HCLK時(shí)鐘1分頻 RCC_PCLK1Config(RCC_HCLK_Div2);/定義APB1設(shè)備時(shí)鐘為HCLK時(shí)鐘2分頻 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RC

48、C_PLLMul_9);/配置PLL時(shí)鐘為外部高速時(shí)鐘的9倍頻,8MHz * 9 = 72 MHz RCC_PLLCmd(ENABLE);/使能PLL時(shí)鐘 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/等待PLL時(shí)鐘設(shè)置完成準(zhǔn)備就緒 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /使用PLL時(shí)鐘作為系統(tǒng)時(shí)鐘源 while(RCC_GetSYSCLKSource() != 0x08)/返回系統(tǒng)所用時(shí)鐘源確認(rèn)為外部高速晶振,8M晶振。 RCC_APB2PeriphClockCmd(RCC_APB2Peri

49、ph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE , ENABLE);void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB, ENABLE); /*Echo pin define*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode =

50、 GPIO_Mode_IPU;/GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOE, &GPIO_InitStructure); /*Trigle pin define*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitSt

51、ructure.GPIO_Pin=GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure);void USART_Configuration(void) /串口配置程序 USART_Init

52、TypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate =115200; /設(shè)置串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /設(shè)置數(shù)據(jù)長度為8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; /設(shè)置一個(gè)停止位 USART_InitStructure.USART_Parity = USART_Parity_No ; /無校驗(yàn)位 USART_InitStructure.USAR

53、T_HardwareFlowControl = USART_HardwareFlowControl_None; /禁止硬件流控制模式 USART_InitStructure.USART_Mode =USART_Mode_Rx|USART_Mode_Tx; /打開串口的發(fā)送功能 USART_Init(USART1, &USART_InitStructure); /用以上參數(shù)初始化USART1 USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); /打開接收中斷 USART_Cmd(USART1, ENABLE); /打開串口1 void Tim2_Init(void) TIM_TimeBase

溫馨提示

  • 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)論