作為一個STM32的菜鳥級人物,我剛開始接觸STM32時,其實和當年開始學習51單片機的心理是一樣的。茫然,誰說不是呢?但是,正常的學習途徑無非就是看書,然後敲代碼,最後燒程序,有問題就check,然後再繼續燒,我都懷疑我快成了火頭工。因為在我的印象中,只有這類職業才和「燒」有著密不可分的聯繫。即使當一名敬業***的火頭工是我畢生的夢想。OK,不侃了。我希望,通過寫日誌把我作為一個菜鳥在學習STM32中的問題記錄下來,同時以我為鑒,規避那些沒有必要的破事。

1. 學習STM32要不要基礎

原則上它應該是需要的,但是,我們也能發現很多人也是沒有基礎的。比如說,我們實驗室的大師兄原來是管理專業,但是現在相當**,軟硬皆通。如果你和很多致力於在技術領域中作出一番成就的人一樣,你必須記住:你再也不能任性地說要給自己一大塊時間系統地學習知識,不現實。更多的時候,情況是:敲代碼時需要什麼你就去找相應的「部分知識」,然後搞明白,解決當前的問題。就是這樣。

2. 學習STM32需要什麼基礎

理論上,需要數字電路,模擬電路,C語言編程基礎,單片機會一點就更好了,這樣的話會能適應STM32的編程開發思路。不過幫助不大,這也是我要寫「淺談時鐘問題」的原因。而我的情況是,全都學過,但你看清楚,只是學過而已。關於數字電路和模擬電路這種課程,我也是記不得什麼了。好在我們實驗室,技術方面的書從來不缺。

3. 學習STM32對性別有要求嗎

一般,女生都會問這個問題。我 也問過,所以你就知道我為什麼能成為「婦女之友」了。玩笑玩笑啦。其實沒有,女生在這方面有先天性的優勢,心思細膩,稍一轉化,這就是態度認真的同義詞。而且,世界上第一個程序員是女性。行啦,女同學別得瑟了!!!

4. 進入正題

STM32的新手,一般都會對一個問題很糾結。我也是,就是所謂的」時鐘問題「。我們在盡心STM32編程時,會痛苦地發現這樣一個事實:不管你要幹嘛,你首先要做的一件事就是使能時鐘。而且可能每一次的時鐘還是不同的。你就會問:為什麼要使能時鐘?為什麼每次使能的時鐘還不一樣呢?為什麼51單片機中沒有這些鬼?

在學51單片機的時候,基本上接觸不到I/O方向和外設時鐘的概念,I/O想輸入就直接讀,想輸出就直接賦值,串口、AD轉化、外部中斷等等也都是想用就用,不需要單獨配置時鐘。這樣在初學時的確方便了很多,不需要有亂七八糟的設置就能讓晶元跑起來,但是隨之帶來的就是所謂的功耗問題。但是作為初學者,誰他媽還管這個啊?能讓程序跑起來就已經讓我們興奮得幾個晚上睡不著覺了。說這話不太合適,但事實上很多晶元生產廠商也不考慮這個問題。

可是隨著電子產品集成度越來越高,功耗和發熱越來越嚴重,晶元廠商非常無奈也在開始想辦法避免這個問題,而最直接的思路當然就是用多少功能就使能多少功能,對每個外設的時鐘都設置了開關,讓用戶可以精確地控制,關閉不需要的設備,達到節省供電的目的。如果不用的就完全關閉,儘可能降低晶元功耗,所以就出現了這麼多的時鐘和IO配置。說白了,時鐘的功能就好像是一個小開關,你要用什麼寄存器就先對應的打開開關,即:使能對應的時鐘。

實際上,在這裡面還涉及到一個時鐘門控技術,而這又涉及到同步電路,我們都知道(默認你們都知道)在同步電路中總是有一個時鐘控制。這裡我就不贅述了,如果你和我一樣是一個強迫症患者,請你回去翻翻一本叫《數字電子技術基礎》的書,你一定可以找到答案的,相信我吧。

到這裡你就差不多能夠理解為什麼STM32編程需要不斷地使能時鐘了,因為默認情況下這些時鐘都是disable的。你要使用它,當然需要enable了。如果再不明白,我就想罵了:寄存器是由D觸發器組成的,只有送來了時鐘,觸發器才能被改寫值,這樣寄存器才能工作。只不過,在51單片機一個時鐘系統把一切都包了,在STM32中,我們很明確地做好了分工,讓大家各司其職,其實這樣還有一個好處就是,不是每個外設都需要系統時鐘那麼高的頻率,就好像是:哪個公司會讓CEO去做底層代碼工作一樣。

推薦閱讀:

相關文章