stm32學習筆記要點_第1頁
stm32學習筆記要點_第2頁
stm32學習筆記要點_第3頁
stm32學習筆記要點_第4頁
stm32學習筆記要點_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Stm32學習筆記一C語言基礎(chǔ)部分 2Stm32學習筆記一GPIO部分 4Stm32學習筆記一RCC部分 6Stm32學習筆記一AD部分 7Stm32學習筆記一CAN部分8Stm32學習筆記一TIM 部分8Stm32學習筆記一USART部分 11Stm32學習筆記一超聲波測距部分 14Stm32學習筆記一程序調(diào)試部分 20Stm32學習筆記一C語言基礎(chǔ)部分1、C語言運算符優(yōu)先級 詳細列表優(yōu)先級運算符名稱或含義使用形式結(jié)合方向說明1數(shù)組下標數(shù)組名常量表達式左到右()圓括號(表達式)/函數(shù)名(形 參表)成員選擇(對象)對象成員名->成員選擇(指針)對象指針-> 成員名2-負號運算符-表

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

3、;> 表達式雙目運算符6>大于表達式 > 表達式左到右雙目運算符>=大于等于表達式 >=表達式雙目運算符<小于表達式 < 表達式雙目運算符<=小于等于表達式 <=表達式雙目運算符7=等于表達式=表達式左到右雙目運算符!=不等于表達式!=表達式雙目運算符8&按位與表達式&表達式左到右雙目運算符9A按位異或表達式A表達式左到右雙目運算符10|按位或表達式表達式左到右雙目運算符11&&邏輯與表達式&&表達式左到右雙目運算符12|邏輯或表達式|表達式左到右雙目運算符13?:條件運算符表達式1?表達式2

4、:表達式3右到左三目運算符14=賦值運算符變量=表達式右到左/=除后賦值變量/=表達式*=乘后賦值變量*=表達式%=取模后賦值變量%=表達式+=加后賦值變量+=表達式-=減后賦值變量-=表達式<<=左移后賦值變量 <<=表達式>>=右移后賦值變量 >>=表達式&=按位與后賦值變量&=表達式A =按位異或后賦值變量A=表達式|=按位或后賦值變量|=表達式15,逗號運算符表達式,表達式,左到右從左向右順序運算2、數(shù)組:在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在

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

6、管腳的輸入2、對于GPIO的配置種類有8種之多:(1) 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 復用開漏輸出(8) GPIO_Mode_AF_PP復用推挽輸出3、推挽輸出:可以輸出高,低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止。高低電平由IC的電源低

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

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

9、,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的 一個優(yōu)點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉(zhuǎn)換的沿的速度。阻值越大,速度越低功耗越小,所以負載電阻的選擇要兼顧功耗和速度。)6、3. OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因 為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大; 反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。7、4.可以將多

10、個開漏輸出的 Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器 件的情況下,形成“與邏輯”關(guān)系。這也是 I2C,SMBus等總線判斷總線占用狀態(tài)的原理。 補充:什么是“線與”?:8、 在一個結(jié)點(線)上,連接一個上拉電阻到電源VCC或VDD和n個NPN或NMOS 晶體管的集電極 C或漏極D,這些晶體管的發(fā)射極 E或源極S都接到地線上,只要有一個晶體管飽和,這個結(jié)點(線)就被拉到地線電平上因為這些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會飽和,所以這些基極或柵極對這個結(jié)點(線)的關(guān)系是 或非NOR邏輯.如果這個結(jié)點后面加一個反相器 ,就是或OR邏輯.9、10、

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

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

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

14、K.SS )20、STM32設(shè)置實例:(1) 模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以讀 10 的值;使用GPIO_Readl nputDataBit(GPIOB,GPIO_Pin_0);(2) 如果是無上拉電阻,IO默認是高電平;需要讀取IO的值,可以使用帶上拉輸入 _IPU 和浮空輸入_IN_FLOATING 和開漏輸出_OUT_OD ;Stm32學習筆記一RCC部分1、RCC有多種用途,包括時鐘設(shè)置,外設(shè)復位和時鐘管理。2、RTC時鐘:系統(tǒng)時鐘:簡單的說,就是芯片系統(tǒng)內(nèi)部的

15、時鐘,程序運行的速度是由它來決定的。RTC:實時時鐘,如果供電,它會按照自己的精確等級運行的,主要用來做日期時間的顯示用。3、時鐘樹STM32F10XX時鐘系統(tǒng)框圖及說明SC OUTOSC IN嶄岀內(nèi)詐時鐘H5E scMCG 口-.fjM.HET 2-LCLCPLLCLK時祥竝祀系詵則自動切腹至 S¥SCLk=HSlPLL可哄呉用或阿被黃用或礙裁/1Bx2.k1GSMHi共1曰粧禪陽日預制樂井駆干其有舟選抵fl球為 1“ 2, 4、S. 16n &J, 130, 255, 512卜4SMHr or 72MlizLSE3Z.7BKH;RTCCLK* RTCH 神OffIWDGC

16、LK 電4廠1剰榊XLSI可譴關(guān)閉HCOSC32_OUiTAPBIPre?cilerUSB+ 1 or* I.1?APSfEfr®.廿頻El千 H有済申選拇舟別 K 2,氛 9, 15IJSBCLK 4SMHZ USRtttfrA HCLK upto72MH3.PCLK1 up to 3&MHZTIMHCLKPCLK2 uip to 7ZMHzMulklpIdET irl or m2TIMZ.3,4 Multiplier k or xZAPB2 PmulfirAPBfE-frmi /U7Jfe1否卻來2ITJMICLK TUMlrtitAE>(-PraxairADCCL

17、KADC覆骨頻.渤 因干共有織申謝軒 井別為2 6. 8STM32 辭 h4、配置時鐘樹的方法:(1 )定義一個定義一個定義一個 ErrorStatu類型的變量 HSEStartUpStatus(2)將時鐘樹復位至默認設(shè)置(3)開啟HSE晶振;(4) 等待HSE晶振起 振穩(wěn)定,并將起結(jié)果保存HSEStartUpStatus變量中;(5)判斷HSE晶振是否起成功(6)設(shè)置 HCLKHCLK 時鐘為時鐘為 SYSCL的 分頻(7)設(shè)置PLCK2時鐘為 時鐘為SYSCLK的 分頻;(8)設(shè)置PLCK1時鐘為 時鐘為SYSCLK的 分頻;Stm32學習筆記一AD部分i采樣保持器:計算機系統(tǒng)模擬量輸入通

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

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

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

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

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

23、(Direct Memory Access,直接內(nèi)存存取)是所有現(xiàn)代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依于 CPU的大量中斷負載。否則,CPU需要從來源把每一片段的資料復制到暫存器,然后把它們再次寫回到新的地方。在這個時間中,CPU對于其他的工作來說就無法使用。Stm32學習筆記一CAN部分1、bxCAN主要特點支持CAN協(xié)議2.0A和2.0B主動模式波特率最高可達1兆位/秒支持時間觸發(fā)通信功能發(fā)送3個發(fā)送郵箱,發(fā)送報文的優(yōu)先級特性可軟件配置,發(fā)送SOF時刻的時間戳 接收3級深度的2個接收FIF0,14個位寬可變的過濾器組標識符列表FIFO溢出處理方式可配置,記錄接收SO

24、F時刻的時間戳,時間觸發(fā)通信模式,禁止自動重傳模 式,16位自由運行定時器,可在最后2個數(shù)據(jù)字節(jié)發(fā)送時間戳管理中斷可屏蔽,郵箱占用單獨1塊地址空間,便于提高軟件效率2、Stm32學習筆記一TIM 部分1、通用定時器(TIM)通用定時器是一個通過可編程預分頻器驅(qū)動的16位自動裝載計數(shù)器構(gòu)成。它適用于多種場合,包括測量輸入信號的脈沖長度 (輸入采集)或者產(chǎn)生輸出波形(輸出比較和PWM)。使 用定時器預分頻器和 RCC時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾 個毫秒間調(diào)整。定時器是完全獨立的,而且沒有互相共享任何資源。2、 SCB是MDK庫文件里面定義的一個結(jié)構(gòu)體,subsystem

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

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

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

28、另一個定時器的預分頻器,如可以配置一個 定時器Timer1而作為另一個定時器 Timer2的預分頻器。8、計數(shù)器時鐘頻率的計算方法-in) Tclk;9、從庫函數(shù)角度設(shè)置定時時間(1) Timx時鐘使能:通用定時器掛在 APB仆,通過APB1總線的使能函數(shù)來使能,函數(shù)為 RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3,enable)(2)初始化定時器參數(shù):設(shè)置自動重裝值、分頻系數(shù)和計數(shù)方式等,函數(shù)原形為:TIM_TimeBasel ni t(TIM_TypeDef*TIMx,TIM_TimeBasel ni tTypeDef* TIM_TimeBase

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

30、;u16 TIM_Cou nterMode; TIM_TimeBaseI ni tTypeDef;TIM_Period設(shè)置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在 0x0000 和 OxFFFF 之間。TIM_PrescalerTIM_Prescaler設(shè)置了用來作為 TIMx時鐘頻率除數(shù)的預分頻值。它的取值必須在0x0000和0xFFFF 之間。TIM_ClockDivisio nTIM_ClockDivision設(shè)置了時鐘分割(3) 設(shè)置 timx-dier 允許更新中斷:函數(shù)原形 void TIMTConfig(TIM_TypeDef*TIMx,u16 TIM

31、T, FunctionalState NewState)功能描述,使能或者失能指定的TIM中斷,輸入?yún)?shù)1TIMx : x可以是2, 3或者4,來選擇TIM外設(shè);輸入?yún)?shù)2,TIMT :待使能或者失能的TIM 中斷源,輸入?yún)?shù)3NewState: TIMx中斷的新狀態(tài),這個參數(shù)可以?。篍NABLE或者DISABLE 輸入?yún)?shù)TIM_IT使能或者失能TIM的中斷??梢匀∠卤淼囊粋€或者多個取值的組合作 為該參數(shù)的值。TIMT_Update TIM中斷源,TIMT_CC1 TIM捕獲/比較1中斷源,TIMT_CC2 TIM捕獲/比較2中斷源,TIMT_CC3,TIM捕獲/比較3中斷源TIMT_CC4

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

33、r TIM_FLAG_CC1OF TIM_FLAG_CC2OF TIM_FLAG_CC3OF TIM_FLAG_CC4OF外設(shè),輸入?yún)?shù)2,TIM_FLAG :待清除的TIM標志位TIM更新標志位TIM捕獲/比較1標志位TIM捕獲/比較2標志位TIM捕獲/比較3標志位TIM捕獲/比較4標志位TIM觸發(fā)標志位TIM捕獲/比較1溢出標志位TIM捕獲/比較2溢出標志位TIM捕獲/比較3溢出標志位TIM捕獲/比較4溢出標志位 11、函數(shù)名:TIM_GetCou nter函數(shù)原形:u16 TIM_GetCou nter(TIM_TypeDef* TIMx) 功能描述:獲得 TIMx計數(shù)器的值輸入?yún)?shù):T

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

35、或者4,來選擇TIM外設(shè)輸入?yún)?shù)2TIM_IT :待使能或者失能的 TIM中斷源輸入?yún)?shù)3NewState: TIMx中斷的新狀態(tài)這個參數(shù)可以?。篍NABLE或者DISABLETIMTTIMT_UpdateTIM 中斷源TIMT_CC1TIM 捕獲/比較1中斷源TIMT_CC2TIM 捕獲/比較2中斷源TIMT_CC3TIM 捕獲/比較3中斷源TIMT_CC4TIM 捕獲/比較4中斷源TIMT_TriggerTIM 觸發(fā)中斷源14、函數(shù)名 TIM_ ClearITPendingBit函數(shù)原形 void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, u16 T

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

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

38、pe.h> / 字符處理#include <misc.h> /中斷優(yōu)先級分組#include<math.h>數(shù)學函數(shù)庫包含一些數(shù)學計算的公式3、UART : universal asynchronous receiver and transmitter 通用異步收發(fā)器USART:universal synchronous asynchronous receiver and transmitter 通用同步異步收發(fā)器都是指單片機的串口通訊,工作方式不一樣而已!4、USART主要特性全雙工的,異步通信 NRZ標準格式分數(shù)波特率發(fā)生器系統(tǒng)一發(fā)送和接收共用的可編程波特率,

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

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

41、據(jù)10、函數(shù) USART_ReceiveData,函數(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標志位設(shè)置與否,輸入?yún)?shù)1USARTx : x可以是1, 2或者3,來選擇USART外設(shè),輸入?yún)?shù) 2 ,

42、USART_FLAG :待檢查 的USART標志位CTS標志位LIN中斷檢測標志位發(fā)送數(shù)據(jù)寄存器空標志位發(fā)送完成標志位接收數(shù)據(jù)寄存器非空標志位12、USART_FLAG 值 USART_FLAG_CTS USART_FLAG_LBD USART_FLAG_TXE USART_FLAG_TC USART FLAG RXNE空閑總線標志位 溢出錯誤標志位噪聲錯誤標志位 幀錯誤標志位 奇偶錯誤標志位13、USART_ ClearFlag 函數(shù)原形void USART_ClearFlag(USART_TypeDef* USARTx, u16USART_FLAGDLE USART_FLAG_ORE US

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

44、 2或者3,來選擇USART外設(shè),輸入?yún)?shù) 2,USART_IT : 待使能或者失能的 USART中斷源,輸入?yún)?shù) 3,NewState: USARTx中斷的新狀態(tài),這個 參數(shù)可以取:ENABLE或者DISABLEUSART_IT 值 USART_IT_PE USART_IT_TXE USART_IT_TC USART_IT_RXNE USART_IT_IDLE USART_IT_LBD USART_IT_CTS USART_IT_ERR奇偶錯誤中斷發(fā)送中斷傳輸完成中斷接收中斷空閑總線中斷LIN中斷檢測中斷CTS中斷錯誤中斷15、USART1重映像STM32上有很多I/O 口,也有很多的內(nèi)置外

45、設(shè)想I2C,ADC,ISP,USART 等,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O 口共用管腳的,也就是I/O管腳的復用功能。但是STM32還有一特別之處就是:很多復用內(nèi)置的外設(shè)的I/O引腳可以通過重映射功能,從不同的I/O管腳引出,即復用功能的引腳是可通過程序改變的讀到這里相信大家都應該了解了端口重映射的一些概念了良用功能USARTIREMAP = DUSART1_REMAP = 1USART1 TXPA9PBSUSART1 RXPA10PB716、串口是需要使用IO 口來進行發(fā)送和接收的。17 函數(shù)名 USART_ SendData函數(shù)原形 void USART_SendData(

46、USART_TypeDef* USARTx, u8 Data)功能描述通過外設(shè) USARTx發(fā)送單個數(shù)據(jù)輸入?yún)?shù)1 USARTx : x可以是1,2或者3,來選擇USART外設(shè)輸入?yún)?shù)2 Data:待發(fā)送的數(shù)據(jù)Stm32學習筆記一超聲波測距部分1程序目的:使用STM32控制超聲波模塊并使用USART顯示#i nclude "stm32f10x.h" #in elude "math.h"#i nclude "stdio.h"#in clude "time.h" void Tim2_I nit(void);void G

47、PIO_C on figuratio n( void);void RCC_Co nfiguratio n( void);void USART_Co nfiguratio n( void);u16 Sen sor_us in g(void);void delay(void);main ()u16 result=0;u8 i;FlagStatus Status;/*system clock init*/RCC_Co nfiguratio n();/*IO ini t*/GPIO_C on figuratio n();/*TIM初始化*/USART_Co nfiguratio n();Tim2n i

48、t();while(1)u16 m;result=Se nsor_us in g();i=(u8)(result&0xff00)>>8);/ 輸出高八位 /RESET);RESET);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)= USART_Se ndData(USART1,i);i=(u8)result&OxOOff);輸出低八位 /while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)= USART_Se ndData(USART1,i);for(m=800;m&

49、gt;0;m-)delay();void RCC_Co nfiguratio n( void)ErrorStatus HSEStartUpStatus;RCC_Del nit();RCC_HSECo nfig(RCC_HSE_ON);/時鐘控制寄存器全部恢復默認值/外部高速時鐘源開啟(8M晶振)HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS)RCC_HCLKCo nfig(RCC_SYSCLK_Div1); 時鐘1分頻RCC_PCLK2Co nfig(RCC_HCLK_Div1);HCLK時鐘1

50、分頻RCC_PCLK1Co nfig(RCC_HCLK_Div2);為HCLK時鐘2分頻RCC_PLLCo nfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); 部高速時鐘的 9倍頻,8MHz * 9 = 72 MHzRCC_PLLCmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)完成準備就緒RCC_SYSCLKCo nfig(RCC_SYSCLKSource_PLLCLK);系統(tǒng)時鐘源while(RCC_GetSYSCLKSource() != 0x08)認為外部高速晶振,8M晶振。等待

51、外部時鐘就緒如果時鐘啟動成功/定義AHB設(shè)備時鐘為系統(tǒng)定義APB2設(shè)備時鐘為定義APB1設(shè)備時鐘配置PLL時鐘為外使能PLL時鐘等待PLL時鐘設(shè)置使用PLL時鐘作為返回系統(tǒng)所用時鐘源確RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOE , ENABLE); void GPIO_C on figuratio n(void)GPIO_I ni tTypeDef GPIO_I nitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Perip

52、h_GPIOE|RCC_APB2Periph_GPIOB,ENABLE);/*Echo pin defi ne*/GPIO_I nitStructure.GPIO_P in = GPIO_P in _9;GPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_IPU;/GPIO_Mode_IN_FLOATING;GPIO_I nit(GPIOE, & GPIO_I nitStructure);/*Trigle pin defi ne*/GPIO_I ni tStructure.GPIO_Pin = GPIO_Pin_10;GPIO_I ni tStruct

53、ure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_5OMH z;GPIO_I nit(GPIOE, & GPIO_I nitStructure);GPIO_I ni tStructure.GPIO_P in=GPIO_Pin_9;GPIO_I ni tStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_I nit(GPIOA,&GPIO_I nitStructure);GPIO_I ni tStructure.GPIO_Pi n=GPIO_Pin

54、_1O;GPIO_I ni tStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_I nit(GPIOA,&GPIO_I nitStructure);void USART_Co nfiguratio n(void)/ 串口配置程序USART_I ni tTypeDef USART_I ni tStructure;USART_I nitStructure.USART_BaudRate =115200;/ 設(shè)置串口波特率USART_I nitStructure.USART_WordLe ngth = USART_WordLe ngth_8b;/ 設(shè)置數(shù)據(jù)長度為 8位USART_I n

溫馨提示

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

評論

0/150

提交評論