在此之前,應該是有接觸過微控制器的,比如本科學習的微控制器還有嵌入式(因為我沒有好好聽課,所以基本等於不會)。所以就此認為這是第一次接觸微控制器吧。
(首先拿到微控制器,應該查閱資料手冊,了解有多少外設,比如adc有幾個,usart有幾個,spi有幾個…)
基於stm32的開發板除錯review
目的:快速學習微控制器,熟悉晶元和開發板的除錯流程,為後續做系統的專案做準備。
具體內容:
1. 時鐘樹
微控制器就像是乙個小小的系統,所有的執行都需要有嚴格的時鐘管理。看時鐘樹的時候能夠知道系統的時鐘是由誰提供的,最大頻率是多少,每個時鐘分頻後分別分配給了誰。比如:stm32f103rc最大時鐘頻率是72mhz,預分頻後分配給了不同的外設。這些資訊在例程庫中均可找到,若分配時鐘,可直接呼叫庫函式。
2. i/o口
微控制器最基本的功能即埠的輸入輸出,輸入輸出埠呈高電平、低電平或高阻態。埠作為輸入時,有浮空輸入,上拉或下拉,所謂上拉或下拉,即埠上拉或下拉乙個電阻,而浮空即 沒有電阻存在。(對於為什麼要由上拉下拉電阻,我還沒有弄明白)
同樣,作為輸出也有幾種配置:開漏模式和推挽模式,一般推挽模式可以得到的電流或電壓比較大。io口還有一項最重要的作用是復用輸出,作為外設的輸出,比如:pa1既可作為普通io口也可作為tim1的通道1輸出,即復用功能。i/o口的配置需要查閱資料手冊。
3. 串列埠
串列埠作為一項外界與微控制器的交流通訊工具,在掌握的過程中是非常有必要的。通訊主要有usart,spi和i2c,其實就是有不同的通訊協議,目前接觸過usart和spi。也僅僅只會配置它,傳送和接收而已。具體有待提公升。
4. 中斷
中斷這個概念最開始接觸應該是在學微機原理的時候。對中斷的理解是:在正常執行的系統中,有事件急需處理,while迴圈就會被打斷,即來到中斷,中斷也有優先順序高低,同過分配搶占式優先順序和響應式優先順序。搶占式優先順序即可巢狀或被巢狀,在搶占式優先順序低的中斷執行時,若有優先順序高的中斷插入,則停下去處理優先順序高的事件,等處理完即可會到被打斷的地方,繼續處理優先順序低的中斷。當兩個中斷源的搶占式優先順序相同時,這兩個中斷將沒有巢狀關係,當乙個中斷到來後,如果正在處理另乙個中斷,這個後到來的中斷就要等到前乙個中斷處理完之後才能被處理。如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先順序高低來決定先處理哪乙個;如果他們的搶占式優先順序和響應優先順序都相等,則根據他們在中斷表中的排位順序決定先處理哪乙個。
在系統開發中,中斷應該越少越好,並且中斷所處理的事件應越快越好。但中斷對於整個系統來說是最快速的,總是會停下來去處理中斷中的事件。
5. 定時器
定時器是目前為止用的最多的乙個外設,定時器功能強大,不僅可以定時,計數,還可以進行編碼器模式。目前接觸到的是定時,產生pwm,輸入pwm(捕獲模式),計數功能。
定時器最基本的定時功能是通過計數實現的,由內部時鐘作為定時器的時鐘源,選擇分頻係數,選擇計數週期即可完成定時。比如:tim2時鐘源是72mhz的,在經過分頻係數7200-1之後,時鐘頻率變為10khz,若選擇計數週期100,則10ms計數器溢位一次。
定時器的計數功能有三種模式,向上計數,向下計數或中心對稱模式,具體的可參考手冊。在無刷電機的六步換向中,由於需要檢測過零點,通常會使用中心計數模式,從而在計數上溢或下溢的時候進行ad取樣而進行過零點檢測。
定時器產生pwm波:在輸出比較模式下,有乙個設定定時器脈寬的引數,即設定pwm脈寬。則占空比即等於脈寬/計數週期。通過調節脈寬即可調節pwm波。在此模式下,有兩種pwm產生方式,可參閱資料手冊(oc_pwm_mode1和oc_pwm_mode2)。
定時器的pwm輸入模式(和pwm有區別):在捕獲模式下,定時器可以由內部觸發或外部觸發,內部觸發可以由其他定時器觸發,比如:定時器3觸發定時器2的輸入捕獲通道,定時器3有兩個捕獲通道,乙個捕獲上公升沿乙個捕獲下降沿,即可輸入pwm波。
定時器的輸入時鐘:內部時鐘和外部時鐘,內部時鐘可以是內部ahb等此類,外部時鐘源可以由外部輸入構成,比如:在機械人中常用的光電碼盤,通過碼盤的上公升沿或下降沿可以統計脈衝數,那麼碼盤的時序輸入就是外部時鐘源。
6. 無刷電機高階定時器
高階定時器tim1和tim8的功能除上述外,還有互補輸出的功能。所謂互補輸出即為直流無刷電機的上下橋臂互補輸出。用於驅動直流無刷電機的全橋電路一共有三相六個mos管,每相由上下兩個橋臂組成。定時器產生六路互補的訊號,並設定有死區時間。死區時間是防止上下橋臂同時導通,從而使電路燒毀。高階定時器還包含有剎車功能,所謂剎車功能即是在電機出現異常訊號時,及時使電機停下的功能。此功能一般在電機驅動中均會使用,但是在特殊情況,比如說無人機,四旋翼中不會使用該功能。(剎車後電機停轉,四旋翼會摔下來)
7. ad取樣
ad和da轉換是將外部的模擬訊號量轉換為數碼訊號傳輸給微控制器,處理後的數碼訊號經da轉換變成模擬訊號,從而輸出。ad取樣可以連續轉換,也可以由外部觸發轉換。比如:直流無刷電機需要取樣反電動勢來檢測過零點,而過零點的檢測在需在定時器計數下溢或上溢的時刻進行。而此時就需要用外部觸發來進行ad轉換。ad取樣得到的資料是乙個12位的值,需要經過換算將其轉換為電壓值,比如:取樣的值是3020,而12位最大值是fff,而晶元電壓最大值應該為3.3v,則取樣得到的電壓值應該為3.3*3020/fff。在很多情況下,ad取樣會採用dma方式,dma方式不占用cpu資源,具體還未實施過,等專案開始之後嘗試。
8. systick
systick是系統滴答定時器,它可選擇內部或外部時鐘作為時鐘源。若選擇內部時鐘源,則以cortex(hclk)時鐘作為systick時鐘源。而cortex m3的時鐘源為72mhz的,若選擇外部時鐘源,則由ahb(hclk)經過8分頻之後作為systick時鐘源。因此,選擇外部時鐘源時,systick的時鐘源是9mhz,從1計數到9即為1us,計數到9000即為1ms。systick有四個暫存器。具體可參見手冊。(cotex-m3權威指南和技術參考手冊),所以在此基礎上可以使用systick來作延時功能。
比如:
void delay_ms(u16 nms)
while((temp&
0x01)&&(!(temp&(1
<<
16))));//等待時間到達
systick->ctrl=
0x00; //關閉計數器
systick->val =
0x00; //清空計數器
}
對stm32除錯的一般配置方式:首先配置時鐘,開啟系統和所有外設的時鐘。其次開啟相應i/o埠,供外設所使用。再之,配置相應外設。 stm32學習筆記 串列埠(原子開發板)
1,stm32的串列埠資源相當豐富的,功能也相當強勁。alientek ministm32開發板所使用的stm32f103rct6最多可提供5路串列埠,有分數波特率發生器 支援同步單線通訊和半雙工 單線通訊 支援lin 支援數據機操作 智慧卡協議和irda sir endec規範 具有dma等。2,...
極智stm32開發板編譯問題
由於keil版本比較多,相互有不相容問題,出現這種問題,只需要稍微改動一下提示錯誤的地方就可以。下面以新版本遇到的問題做簡單的解答。不同的版本,改動地方不一樣,但思路是一樣的。上圖編譯提示重複定義 stm32f40 簡單處理,雙擊問題定位的定義的地方用雙斜槓遮蔽掉定義的語句,操作如下圖 繼續編譯出現...
STM32開發板學習筆記 3 蜂鳴器實驗
實驗目標 掌握如何通過乙個 gpio 管腳控制有源蜂鳴器 蜂鳴器是一種一體化結構的電子訊響器,採用直流電壓供電,廣泛應用於計算機 印表機 報警器 電子玩具 汽車電子裝置 機 定時器等電子產品中作發聲器件。用於產品的聲音提醒或者警告。編寫蜂鳴器程式,實現 fs stm32f407 開發板,按復位鍵觀察...