記得某位網友曾經說過,學習任何一款單片機,首先要學的是它的時鐘。的確如此,時鐘是如此的重要,在不知道系統時鐘的情況,感覺做什么事都是迷迷糊糊的。
之前學過51,它的時鐘很簡單,就一個外部晶振。然后學了430的G2553,它的時鐘就有點麻煩了,時鐘源多(兩個外部晶振,一個內部超低功耗低頻振蕩器,一個內部調整低頻參考振蕩器),內部還有鎖頻環,而且出來的時鐘還能被分頻。原因是TI主打低功耗,必須得有各種頻率來滿足設計需要,畢竟,頻率越低,功耗越低。
現在的,430的F5529,跟G2553比起來也就需要配置的時鐘相關的寄存器是其3倍而已…還有個PMM(電源管理模塊)的配置…
新增的PMM是干嘛的呢?還是那句話,TI主打超低功耗。PMM不僅完成了對電源的監管和監測(這五個字包含了太多的內容…能力有限,不多解釋),還為用戶提供了更改核心電壓(VCORE)的途徑。都知道,作為一個系統,肯定要供電的,5529有寬的電源(DVCC)電壓范圍1.8V-3.6V。DVCC經低壓降電壓調整器(LDO),產生的一個二次核心電壓,專門為CPU數字邏輯供電,共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四個級別。當系統需要的時鐘頻率不高時,我們可以配置低的時鐘,可以配置低的VCORE,這樣在時鐘方面就把功耗降到最低了。當然,函數庫HAL_PMM.c/h中有SetVCore(uint8_t level) ,輕輕松松地就可以設置VCORE了。
那下面就是真正的時鐘配置了。學過數字邏輯電路的,對分頻應該很熟悉。那倍頻呢?鎖頻環(FLL)到底是什么?還有經常被提到的鎖相環(PLL)又是什么?往往打敗新手的都是一些陌生的名詞。鎖頻環,顧名思義,就是使兩個信號的頻率能達到某種關系。而這兩個信號,一個可以是輸入時鐘的子信號(剛剛說了,分頻很容易實現的),另一個可以是輸出時鐘的子信號,F在再看看文檔給出的公式:
當D*(N + 1)越大的時候,fDCOCLK也就越大了,從而也就達到了倍頻的作用啦!鎖相環的原理也是類似咯,把兩個信號的相位鎖定相等了,那頻率也就相等了,而這兩個信號同樣是輸入和輸出時鐘的子信號,而且都是它們的分頻。至于怎么鎖頻,如何鎖相,有數字鑒頻器,數字鑒相器,再加上反饋(說起來簡單,是因為我懂的不多…)。
1. 當時鐘源選擇了外部晶振時,需要將晶振管教對應的IO口設為復用功能
2. 當時鐘源選擇了外部晶振時,需要使能晶振
3. 若選擇了XT1,還要選擇負載電容,當然,默認12pf就可以了
4. 不要忘記核心電壓的選擇
5. 當時鐘配置好了之后,系統可以作稍微的延時,等待時鐘穩定
6. 穩定之后,XT1,XT2的驅動力可以減小以降低功耗