怎么自學 STM32 呢?我想想。當初我也是在學習了一年的 51 單片機后才過渡到 STM32 的,所以算有些經(jīng)驗了。
我大一的時候在實驗室的環(huán)境下開始學習 51 單片機,雖說學長不怎么管我們這些小白吧,但起碼有個環(huán)境,有不懂的問題都可以向?qū)W長提問,這就是環(huán)境的好處了。但是如果說周圍只有你一個人在學單片機,那這條路走得就會比較艱難了!為什么?因為單片機學習不僅涉及到軟件,還涉及到硬件,這就是為什么說嵌入式門檻高的原因了,出了問題你不知道是硬件問題還是軟件問題,還是都有問題,需要你根據(jù)經(jīng)驗一一排查才可以。
說回自學 STM32 問題,STM32 單片機遠比 51 單片機復雜,寄存器數(shù)量是它的好幾倍,各種外設(shè)模塊,DA、CRC、SPI、CAN、SD、CAN 、TIM等等,而每一個模塊可能都有單獨的時鐘,在使用這些模塊時都要提前將時鐘配置好,否則根本不能工作;而配置這些外設(shè)時鐘之前你還要先配置系統(tǒng)時鐘才行,而系統(tǒng)時鐘又涉及到了分頻、倍頻的問題,也是繁雜。正因為這些東西實在是太多了,所以出現(xiàn)了庫函數(shù)開發(fā)!
庫函數(shù)開發(fā)的好處就是你不用管如何去操作寄存器,你只要了解什么時候該調(diào)用哪一個函數(shù)即可,相當方便,所以庫函數(shù)開發(fā)的思路就是,記住各個函數(shù)的功能、調(diào)用條件(不需要死記硬背)就可以輕松進行開發(fā)了。但也正因為如此,所以在學STM32 的時候第一個攔路虎就是如何建立一個 STM32 工程,因為庫函數(shù)開發(fā)需要的文件數(shù)量遠比單純的寄存器開發(fā)多的多,而這些文件之間還有關(guān)聯(lián)性,很容易編譯出錯,所以可能在 51 單片機很簡單的建工程到了 STM32 里面就會變得復雜了。但這些問題通過網(wǎng)上搜索還是很快能解決的,但是解決歸解決,你是否明白為什么就這樣解決了呢?所以你在開始學 STM32 的時候心里會很沒底,因為你連最基本的工程都不知道該怎么才能建好。
然后第二個攔路就是時鐘了,前面說過,STM32的時鐘也是相當?shù)膹碗s,所以很多教程上來就是教你如何配置時鐘,這本沒有錯,但是你可能只是想盡快的點你第一個 LED 燈罷了,卻要學這種感覺和點燈無關(guān)的時鐘問題,所以心里也是挺著急的。事實上,點第一個 LED 燈是很簡單的事情,只要你把對應的引腳配置好了就可以點燈。可能你會問,不要配置時鐘嗎?當然要,只是你點個燈對時鐘的要求根本不高,所以時鐘頻率到底是多少可以不管,因此你直接用用默認的時鐘配置就行了,因為在進入main函數(shù)之前啟動文件(唯一的那個匯編文件)其實已經(jīng)對時鐘進行了配置(默認一般按最大的時鐘頻率進行配置),根本不需要額外的時鐘代碼的。所以這一點可以省去初學者不少功夫,當你比較熟練的掌握了庫函數(shù)的時候,再回過頭來去理解時鐘的配置可能效果會更好。
關(guān)于 STM32 入門視頻,你可以找劉凱老師的視頻教程(有清晰版的),講的還是不錯的,因為我就是通過他學習 STM32 的,一集沒落下的全部看完了。
最后再說一點,STM32 學習不比 51,51 單片機的調(diào)試功能不比STM32,所以在尋找 BUG 上還是比較麻煩的,而 STM32 因為有在線調(diào)試功能,可以實時觀察數(shù)據(jù)、指令跟蹤,所以在學習過程中一定要好好利用(當初我學習的時候根本不知道,還傻傻的用 51 那一套調(diào)試),而開發(fā)平臺我覺得 MDK 最好,因為它把常用的寄存器都進行了集成,還有各種調(diào)試機制,非常人性化。
最后再配一張圖讓你感受一下 MDK 調(diào)試的強大之處(純軟件仿真的):