STM32時鍾系統之利用 systick 定時器來實現准確的延時。


  本篇文章帶着大家來認識一下 STM32 的時鍾系統,以及利用 systick 定時器來實現一個比較准確的延時。

  我們首先從時鍾說起,時鍾在MCU中的作用,就好比於人類的心臟一樣不可或缺。STM32 的時鍾相比 51 的單一時鍾要復雜些,它有多個時鍾源可以使用,那么大家可能會有所疑惑,STM32 的時鍾搞的那么復雜干什么,原因其實在於,STM32的外設資源比起51來說,是很豐富的,那么不同外設使用的時鍾也會不一樣,同時我們要知道時鍾越快,功耗就越大,抗電磁干擾的能力就會減弱,因此,比較復雜的MCU 都會采用多時鍾來解決這些問題。

  那么,這個時鍾系統究竟是什么呢??

  這里給大家簡單總結了下:STM32 共有 5個時鍾源,分別為 HSE、LSE、HSI、LSI、PLL,其中,HSE叫做高速外部時鍾,可以接外部 4-16 MHz的時鍾源;HSI 是高速內部時鍾,它內部有一個RC振盪器,可以提供 8 MHz的時鍾;LSE是低速外部時鍾,外接32.768KHz時鍾,作為RTC時鍾;LSI 是低速內部時鍾,也是一個內部的RC 振盪器,可以提供 40 KHz的時鍾,可用作獨立看門狗,或RTC的時鍾;最后一個 PLL 是鎖相環倍頻,它的來源可以是HSI/2、HSE、HSE/2,倍頻范圍為 2-16 倍,這5個時鍾源就簡單給大家介紹到這里。

  

  當選擇8MHz的外部時鍾經PLL倍頻,默認上電后 sysclk = APB2 的時鍾 為72MHz,APB1時鍾為 36MHz。

  下面我們再來介紹下一個特殊的定時器, 這個定時器是 systick ,它屬於cortex m3 內核,是一個24位倒計數定時器,我們通過使用這個定時器,可得到一個比較准確的延時。

  在學習了STM32的時鍾系統后,我們知道系統上電默認是 72MHz的主頻,然后在延時初始化中設置了 systick的時鍾為9MHz,也就是systick VAL寄存器,里面的值每減少一次就需要 1/9 us的時間,然后下面的代碼分別計算了微秒、毫秒的系數,接着在us 延時函數中,我們傳入多少us 就會延時多少us。

  這里要注意的是,LOAD的寄存器是24位的,因此最大傳入的數值為1864135,也就是最多延時這么多微秒,大約1864毫秒,當我們需要延時大於這個值時,多次調用即可。

  下面我們直接在主循環中調用毫秒延時,延時1秒,編譯無誤后,下載到實驗板上,觀察效果。在這里,我們可以用軟件仿真 簡單檢測下這個延時的准確性。

  首先,點開魔術棒工具,然后我們需要在目標選項卡下,將晶振大小修改為我們實驗板所外接的晶振 8MHz,然后在 debug 選項卡中選擇軟件仿真,保存后,我們進入軟件調試,復位后我們在輸出高低電平加兩個斷點,然后點擊全速運行,觀察左側區域的秒數差,我們可以看到這個延時還是很精准的。

 

視頻資料

(時鍾系統)
http://www.makeru.com.cn/live/1392_1082.html?s=45051
STM32中斷系統
http://www.makeru.com.cn/live/3523_1745.html?s=45051

(stm32 USART串口應用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051

(定時器)
http://www.makeru.com.cn/live/1392_1199.html?s=45051


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM