版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、目 錄Stm32學習筆記C語言基礎(chǔ)部分2Stm32學習筆記GPIO部分4Stm32學習筆記RCC部分6Stm32學習筆記AD部分7Stm32學習筆記CAN部分9Stm32學習筆記TIM部分9Stm32學習筆記USART部分12Stm32學習筆記超聲波測距部分14Stm32學習筆記程序調(diào)試部分21Stm32學習筆記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<<左移變量<<表達式左到右雙目運算符>>右移變量>>表達式雙目運算符6>大
3、于表達式>表達式左到右雙目運算符>=大于等于表達式>=表達式雙目運算符<小于表達式<表達式雙目運算符<=小于等于表達式<=表達式雙目運算符7=等于表達式=表達式左到右雙目運算符!=不等于表達式!= 表達式雙目運算符8&按位與表達式&表達式左到右雙目運算符9按位異或表達式表達式左到右雙目運算符10|按位或表達式|表達式左到右雙目運算符11&&邏輯與表達式&&表達式左到右雙目運算符12|邏輯或表達式|表達式左到右雙目運算符13?:條件運算符表達式1? 表達式2: 表達式3右到左三目運算符14=賦值運算符變量=
4、表達式右到左/=除后賦值變量/=表達式*=乘后賦值變量*=表達式%=取模后賦值變量%=表達式+=加后賦值變量+=表達式-=減后賦值變量-=表達式<<=左移后賦值變量<<=表達式>>=右移后賦值變量>>=表達式&=按位與后賦值變量&=表達式=按位異或后賦值變量=表達式|=按位或后賦值變量|=表達式15,逗號運算符表達式,表達式,左到右從左向右順序運算2、 數(shù)組:在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組
5、元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類別。3、 在語言中,字符常量有以下特點:1) 字符常量只能用單引號括起來,不能用雙引號或者是括號2) 字符常量只能是單個字符,不能是字符串。3) 字符可以是字符集中任意字符。但數(shù)字被定義為字符之后就不能夠參與運算。如'5'和5 是不同的。'5'是字符常量,不能參與運算。Stm32學習筆記GPIO部分1、 函數(shù)名GPIO_ReadInputDataBit 功能描述 讀取指定端口管腳的輸入2、 對于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 復用開漏輸出(8)GPIO_Mode_AF_PP 復用推挽輸出3、 推挽輸出:可以輸出高,低電平,連接數(shù)字器件; 推挽結(jié)構(gòu)一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止。高低電平由IC的電源低定。推挽電路是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在
7、于電路中,各負責正負半周的波形放大任務(wù),電路工作時,兩只對稱的功率開關(guān)管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關(guān)速度。4、 如圖所示,推挽放大器的輸出級有兩個“臂”(兩組放大元件),一個“臂”的電流增加時,另一個“臂”的電流則減小,二者的狀態(tài)輪流轉(zhuǎn)換。對負載而言,好像是一個“臂”在推,一個“臂”在拉,共同完成電流輸出任務(wù)。當輸出高電平時,也就是下級負載門輸入高電平時,輸出端的電流將是下級門從本級電源經(jīng)VT3拉出。這樣一來,輸出高低電平時,VT3 一路和 VT5 一路將交替工作,從而減低了功耗,提高了每個
8、管的承受能力。又由于不論走哪一路,管子導通電阻都很小,使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. 可以將多個開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任
10、何器件的情況下,形成“與邏輯”關(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)下,IO的電平狀態(tài)是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。16、 上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。17、 復用開漏輸出、復用推挽輸出:可以理解為GPIO口被用作第二功能時的配置情況(即并非作為通用IO口使用)18、 最后總結(jié)下使用情況:19、 在STM32中選用IO模式(1) 浮空輸入_IN_FLOATING 浮空輸入,可以做KEY識別,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,懸空,需要外接上拉電阻,才能實現(xiàn)輸出高電平。當輸出為1時,IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔???梢宰xIO輸入電平變化,實現(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,MOSI,MISO.SCK.SS)20、 STM32設(shè)置實例
14、:(1)模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以讀IO的值;使用GPIO_ReadInputDataBit(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)部的時鐘,程序運行的速度是由它來決定的。RTC:實時時
15、鐘, 如果供電,它會按照自己的精確等級運行的,主要用來做日期時間的顯示用。3、 時鐘樹4、配置時鐘樹的方法:(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部
16、分1、 采樣保持器:計算機系統(tǒng)模擬量輸入通道中的一種模擬量存儲裝置。它是連接采樣器和模數(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點秒)。
17、為使這些模擬量信號逐個地送到模數(shù)轉(zhuǎn)換器,而不至降低被測信號的真實性,必須采用采樣保持器。在低速系統(tǒng)中一般可以省略這種裝置。 原理采樣保持電路由模擬開關(guān)、存儲元件和緩沖放大器A組成。在采樣時刻,加到模擬開關(guān)上的數(shù)字信號為低電平,此時模擬開關(guān)被接通,使存儲元件(通常是電容器)兩端的電壓UB隨被采樣信號UA變化。當采樣間隔終止時,D變?yōu)楦唠娖?模擬開關(guān)斷開,UB則保持在斷開瞬間的值不變。緩沖放大器的作用是放大采樣信號,它在電路中的連接方式有兩種基本類型:一種是將信號先放大再存儲,另一是先存儲再放大。對理想的采樣保持電路,要求開關(guān)沒有偏移并能隨控制信號快速動作,斷開的阻抗要無限大,同時還要求存儲元件的
18、電壓能無延遲地跟蹤模擬信號的電壓,并可在任意長的時間內(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)換。掃描模式,此模式用來掃
19、描一組模擬通道。注入轉(zhuǎn)換模式:當觸發(fā)方式為軟件出發(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)換時,如有例外處理則可啟用注入通道
20、組的轉(zhuǎn)換。一個不太恰當?shù)谋扔魇牵阂?guī)則通道組的轉(zhuǎn)換好比是程序的正常執(zhí)行,而注入通道組的轉(zhuǎn)換則好比是程序正常執(zhí)行之外的一個中斷處理程序。 從系統(tǒng)設(shè)計上,測量并顯示室內(nèi)溫度的過程中斷了測量并顯示室外溫度的過程,但程序設(shè)計上可以在初始化階段分別設(shè)置好不同的轉(zhuǎn)換組,系統(tǒng)運行中不必再變更循環(huán)轉(zhuǎn)換的配置,從而達到兩個任務(wù)互不干擾和快速切換的結(jié)果??梢栽O(shè)想一下,如果沒有規(guī)則組和注入組的劃分,當你按下按鈕后,需要從新配置AD循環(huán)掃描的通道,然后在施放按鈕后需再次配置AD循環(huán)掃描的通道。10、 SRAMSRAM是英文Static RAM的縮寫,即靜態(tài)隨機存儲器。它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保
21、存它內(nèi)部存儲的數(shù)據(jù)。11、DMA原理:DMA(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個接收FIFO,14個位寬可變的
22、過濾器組標識符列表FIFO溢出處理方式可配置,記錄接收SOF時刻的時間戳,時間觸發(fā)通信模式,禁止自動重傳模式,16位自由運行定時器,可在最后2個數(shù)據(jù)字節(jié)發(fā)送時間戳管理中斷可屏蔽,郵箱占用單獨1塊地址空間,便于提高軟件效率2、Stm32學習筆記TIM部分1、通用定時器(TIM)通用定時器是一個通過可編程預(yù)分頻器驅(qū)動的16 位自動裝載計數(shù)器構(gòu)成。它適用于多種場合,包括測量輸入信號的脈沖長度(輸入采集)或者產(chǎn)生輸出波形(輸出比較和PWM)。使用定時器預(yù)分頻器和RCC 時鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調(diào)整。定時器是完全獨立的,而且沒有互相共享任何資源。2、 SCB是MD
23、K庫文件里面定義的一個結(jié)構(gòu)體,subsystem 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事件。這樣可以避免向預(yù)
24、裝載寄存器中寫入新值時更新影子寄存器。因此UDIS位被清為0之前不會產(chǎn)生更新事件。然而,計數(shù)器仍會從當前自動加載值重新開始計數(shù),同時預(yù)分頻器的計數(shù)器重新從0開始(但預(yù)分頻器的速率不能被修改)。此外,如果設(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
25、) 預(yù)分頻器寄存器 (TIMx_PSC),預(yù)分頻器可以將計數(shù)器的時鐘頻率按1到65536之間的任意值分頻。自動裝載寄存器 (TIMx_ARR),自動裝載寄存器是預(yù)先裝載的,寫或讀自動重裝載寄存器將訪問預(yù)裝載寄存器。根據(jù)在TIMX_CR1寄存器中的自動裝載預(yù)裝載使能位(ARPE)的設(shè)置,預(yù)裝載寄存器的內(nèi)容被立即或在每次的更新事件UEV時傳送到影子寄存器。6. 可設(shè)置時長的定時器的方法設(shè)置計數(shù)器的時鐘頻率。設(shè)置計數(shù)器的計數(shù)初值。打開計數(shù)器開始計數(shù)。開啟中斷。執(zhí)行中斷服務(wù)程序7、 通用定時器的時鐘來源: 內(nèi)部時鐘(CK_INT) 外部時鐘模式1:外部輸入腳(TIx) 外部時鐘模式2:外部觸發(fā)輸入(E
26、TR) 內(nèi)部觸發(fā)輸入(ITRx):使用一個定時器作為另一個定時器的預(yù)分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預(yù)分頻器。8、 計數(shù)器時鐘頻率的計算方法 9、 從庫函數(shù)角度設(shè)置定時時間 (1)Timx時鐘使能:通用定時器掛在APB1下,通過APB1總線的使能函數(shù)來使能,函數(shù)為RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,enable)(2)初始化定時器參數(shù):設(shè)置自動重裝值、分頻系數(shù)和計數(shù)方式等,函數(shù)原形為:TIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TI
27、M_TimeBaseInitStruct)功能描述:根據(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_TimeBaseInitTypeDef的指針,包含了TIMx時間基數(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è)置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。TIM_Prescaler TIM_Prescaler設(shè)置了用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻值。它的取值必須在0x0000和0xFFFF之間。TIM_ClockDivision TIM_ClockDivision設(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),這個參數(shù)可以?。篍NABLE或者DISABLE輸入?yún)?shù)TIM_IT使能或者失能TIM的中斷??梢匀∠卤淼囊粋€或者多個取值的組合作為該參數(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)先級,在nvic的寄存器中設(shè)置 (5)使能timx (6)編寫中斷服務(wù)函數(shù)10、TIM_ClearFlag 函數(shù)原形void TIM_ClearFlag(TIM_TypeDef* TIMx, u32 TIM_FLAG)功能描述,清除TIMx的待處理標志位,輸入?yún)?shù)1,TIMx:x可以是2,3或者4,來選擇TIM外設(shè),輸入?yún)?shù)2,TIM_FLAG:待清除的TIM標志位TIM_FLAG值:TIM_FLAG_Update TIM更新標志位TIM_FLAG_CC1 TIM捕獲/比較1標志位TIM_FLAG_CC
31、2 TIM捕獲/比較2標志位TIM_FLAG_CC3 TIM捕獲/比較3標志位TIM_FLAG_CC4 TIM捕獲/比較4標志位TIM_FLAG_Trigger TIM觸發(fā)標志位TIM_FLAG_CC1OF TIM捕獲/比較1溢出標志位TIM_FLAG_CC2OF TIM捕獲/比較2溢出標志位TIM_FLAG_CC3OF TIM捕獲/比較3溢出標志位TIM_FLAG_CC4OF TIM捕獲/比較4溢出標志位11、 函數(shù)名:TIM_GetCounter函數(shù)原形:u16 TIM_GetCounter(TIM_TypeDef* TIMx)功能描述:獲得TIMx計數(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)這個參數(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中有多達8個定時器,其中TIM1和TIM8是能夠產(chǎn)生三對PWM互補輸出的高級定時器,常用于三相電機的驅(qū)動,它們的時鐘由APB2的輸出產(chǎn)生。其它6個為普通定時器,時鐘由APB1的輸出產(chǎn)生。Stm32學習筆記USART部分1、 簡單的define定義#define MAXTIME 1000一個簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫if(i<MAXTIME).編譯器在處理這個代碼之前會對MAXTIME進行處理替換為1000
35、。這樣的定義看起來類似于普通的常量定義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 <ctype.h> /字符處理
36、#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ā)送和接收共用的可編程波特率,最高達 4.5Mbits/s 可編
37、程數(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、 應(yīng)用場合:芯片之間近距離,與PC機之間的通信和模塊之間遠距離通信7、 串口通信(Serial Communication), 是指外設(shè)和計算機間,通過數(shù)據(jù)信號線 、地線、控制線等,按位進行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)
38、線少,在遠距離通信中可以節(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ù)據(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標志位設(shè)置與否,輸入?yún)?shù)1 USARTx:x可以是1,2或者3,來選擇USART外設(shè),輸入?yún)?shù)2 ,USART_FLAG:待檢查的USART標志位12、 USA
40、RT_FLAG值USART_FLAG_CTS CTS標志位USART_FLAG_LBD LIN中斷檢測標志位USART_FLAG_TXE 發(fā)送數(shù)據(jù)寄存器空標志位USART_FLAG_TC 發(fā)送完成標志位USART_FLAG_RXNE 接收數(shù)據(jù)寄存器非空標志位USART_FLAG_IDLE 空閑總線標志位USART_FLAG_ORE 溢出錯誤標志位USART_FLAG_NE 噪聲錯誤標志位USART_FLAG_FE 幀錯誤標志位USART_FLAG_PE 奇偶錯誤標志位13、 USART_ ClearFlag函數(shù)原形void USART_ClearFlag(USART_TypeDef* USAR
41、Tx, u16 USART_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,2或者3,來選擇USART外設(shè),輸入?yún)?shù)2,USART_IT:待使能或者失能的USART中斷
42、源,輸入?yún)?shù)3,NewState:USARTx中斷的新狀態(tài),這個參數(shù)可以?。篍NABLE或者DISABLE USART_IT值USART_IT_PE 奇偶錯誤中斷USART_IT_TXE 發(fā)送中斷USART_IT_TC 傳輸完成中斷USART_IT_RXNE 接收中斷USART_IT_IDLE 空閑總線中斷USART_IT_LBD LIN中斷檢測中斷USART_IT_CTS CTS中斷USART_IT_ERR 錯誤中斷15、 USART1重映像STM32上有很多I/O口,也有很多的內(nèi)置外設(shè)想I2C,ADC,ISP,USART等 ,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O口共用管腳的,也就
43、是I/O管腳的復用功能。但是STM32還有一特別之處就是:很多復用內(nèi)置的外設(shè)的I/O引腳可以通過重映射功能,從不同的I/O管腳引出,即復用功能的引腳是可通過程序改變的.讀到這里相信大家都應(yīng)該了解了端口重映射的一些概念了16、 串口是需要使用IO口來進行發(fā)送和接收的。17函數(shù)名USART_ SendData函數(shù)原形void USART_SendData(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、 程
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(); /時鐘控制寄存器全部恢復默認值 RCC_HSEConfig(RCC_HSE_ON);/外部高速時鐘源
47、開啟(8M晶振) HSEStartUpStatus = RCC_WaitForHSEStartUp();/等待外部時鐘就緒 if(HSEStartUpStatus = SUCCESS)/如果時鐘啟動成功 RCC_HCLKConfig(RCC_SYSCLK_Div1); /定義AHB設(shè)備時鐘為系統(tǒng)時鐘1分頻 RCC_PCLK2Config(RCC_HCLK_Div1);/定義APB2設(shè)備時鐘為HCLK時鐘1分頻 RCC_PCLK1Config(RCC_HCLK_Div2);/定義APB1設(shè)備時鐘為HCLK時鐘2分頻 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RC
48、C_PLLMul_9);/配置PLL時鐘為外部高速時鐘的9倍頻,8MHz * 9 = 72 MHz RCC_PLLCmd(ENABLE);/使能PLL時鐘 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/等待PLL時鐘設(shè)置完成準備就緒 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /使用PLL時鐘作為系統(tǒng)時鐘源 while(RCC_GetSYSCLKSource() != 0x08)/返回系統(tǒng)所用時鐘源確認為外部高速晶振,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è)置一個停止位 USART_InitStructure.USART_Parity = USART_Parity_No ; /無校驗位 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等.壓縮文件請下載最新的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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼鐵行業(yè)保安工作總結(jié)
- 點滴關(guān)懷感染科護士總結(jié)
- 科技在前臺工作中的應(yīng)用計劃
- 網(wǎng)絡(luò)科技行業(yè)客服工作總結(jié)
- 2024年稅務(wù)師題庫帶答案(典型題)
- 2024年設(shè)備監(jiān)理師考試題庫及答案4
- 2024年認識冰的教案
- 2024年燃氣管網(wǎng)工安全作業(yè)技能考試題庫及答案
- 2024年花兒朵朵教案
- 2024年電工安全總結(jié)
- 空調(diào)系統(tǒng)維保記錄表格模板
- QC小組活動管理制度
- 市區(qū)自備井排查整治工作實施方案
- 8位半萬用表大比拼
- 品牌管理部績效考核指標
- 瀝青路面施工監(jiān)理工作細則
- 物業(yè)設(shè)備設(shè)施系統(tǒng)介紹(詳細).ppt
- 公司走賬合同范本
- 獲獎一等獎QC課題PPT課件
- 人教版小學三年級數(shù)學上冊判斷題(共3頁)
- 國際項目管理手冊The Project Manager’s Manual
評論
0/150
提交評論