作為一個STM32的菜鳥級人物,我剛開始接觸STM32時,其實和當(dāng)年開始學(xué)習(xí)51單片機的心理是一樣的。茫然,誰說不是呢?但是,正常的學(xué)習(xí)途徑無非就是看書,然后敲代碼,最后燒程序,有問題就check,然后再繼續(xù)燒,我都懷疑我快成了火頭工。因為在我的印象中,只有這類職業(yè)才和“燒”有著密不可分的聯(lián)系。即使當(dāng)一名敬業(yè)又牛逼的火頭工是我畢生的夢想。OK,不侃了。我希望,通過寫日志把我作為一個菜鳥在學(xué)習(xí)STM32中的問題記錄下來,同時以我為鑒,規(guī)避那些沒有必要的破事。
1. 學(xué)習(xí)STM32要不要基礎(chǔ)
原則上它應(yīng)該是需要的,但是,我們也能發(fā)現(xiàn)很多人也是沒有基礎(chǔ)的。比如說,我們實驗室的大師兄原來是管理專業(yè),但是現(xiàn)在相當(dāng)牛逼,軟硬皆通。如果你和很多致力于在技術(shù)領(lǐng)域中作出一番成就的人一樣,你必須記住:你再也不能任性地說要給自己一大塊時間系統(tǒng)地學(xué)習(xí)知識,不現(xiàn)實。更多的時候,情況是:敲代碼時需要什么你就去找相應(yīng)的“部分知識”,然后搞明白,解決當(dāng)前的問題。就是這樣。
2. 學(xué)習(xí)STM32需要什么基礎(chǔ)
理論上,需要數(shù)字電路,模擬電路,C語言編程基礎(chǔ),單片機會一點就更好了,這樣的話會能適應(yīng)STM32的編程開發(fā)思路。不過幫助不大,這也是我要寫“淺談時鐘問題”的原因。而我的情況是,全都學(xué)過,但你看清楚,只是學(xué)過而已。關(guān)于數(shù)字電路和模擬電路這種課程,我也是記不得什么了。好在我們實驗室,技術(shù)方面的書從來不缺。
3. 學(xué)習(xí)STM32對性別有要求嗎
一般,女生都會問這個問題。我也問過,所以你就知道我為什么能成為“婦女之友”了。玩笑玩笑啦。其實沒有,女生在這方面有先天性的優(yōu)勢,心思細(xì)膩,稍一轉(zhuǎn)化,這就是態(tài)度認(rèn)真的同義詞。而且,世界上第一個程序員是女性。行啦,女同學(xué)別得瑟了?。?!
4. 進(jìn)入正題
STM32的新手,一般都會對一個問題很糾結(jié)。我也是,就是所謂的”時鐘問題“。我們在盡心STM32編程時,會痛苦地發(fā)現(xiàn)這樣一個事實:不管你要干嘛,你首先要做的一件事就是使能時鐘。而且可能每一次的時鐘還是不同的。你就會問:為什么要使能時鐘?為什么每次使能的時鐘還不一樣呢?為什么51單片機中沒有這些鬼?
在學(xué)51單片機的時候,基本上接觸不到I/O方向和外設(shè)時鐘的概念,I/O想輸入就直接讀,想輸出就直接賦值,串口、AD轉(zhuǎn)化、外部中斷等等也都是想用就用,不需要單獨配置時鐘。這樣在初學(xué)時的確方便了很多,不需要有亂七八糟的設(shè)置就能讓芯片跑起來,但是隨之帶來的就是所謂的功耗問題。但是作為初學(xué)者,誰他媽還管這個???能讓程序跑起來就已經(jīng)讓我們興奮得幾個晚上睡不著覺了。說這話不太合適,但事實上很多芯片生產(chǎn)廠商也不考慮這個問題。
可是隨著電子產(chǎn)品集成度越來越高,功耗和發(fā)熱越來越嚴(yán)重,芯片廠商非常無奈也在開始想辦法避免這個問題,而最直接的思路當(dāng)然就是用多少功能就使能多少功能,對每個外設(shè)的時鐘都設(shè)置了開關(guān),讓用戶可以精確地控制,關(guān)閉不需要的設(shè)備,達(dá)到節(jié)省供電的目的。如果不用的就完全關(guān)閉,盡可能降低芯片功耗,所以就出現(xiàn)了這么多的時鐘和IO配置。說白了,時鐘的功能就好像是一個小開關(guān),你要用什么寄存器就先對應(yīng)的打開開關(guān),即:使能對應(yīng)的時鐘。
實際上,在這里面還涉及到一個時鐘門控技術(shù),而這又涉及到同步電路,我們都知道(默認(rèn)你們都知道)在同步電路中總是有一個時鐘控制。這里我就不贅述了,如果你和我一樣是一個強迫癥患者,請你回去翻翻一本叫《數(shù)字電子技術(shù)基礎(chǔ)》的書,你一定可以找到答案的,相信我吧。
到這里你就差不多能夠理解為什么STM32編程需要不斷地使能時鐘了,因為默認(rèn)情況下這些時鐘都是disable的。你要使用它,當(dāng)然需要enable了。如果再不明白,我就想罵了:寄存器是由D觸發(fā)器組成的,只有送來了時鐘,觸發(fā)器才能被改寫值,這樣寄存器才能工作。只不過,在51單片機一個時鐘系統(tǒng)把一切都包了,在STM32中,我們很明確地做好了分工,讓大家各司其職,其實這樣還有一個好處就是,不是每個外設(shè)都需要系統(tǒng)時鐘那么高的頻率,就好像是:哪個公司會讓CEO去做底層代碼工作一樣。