1. 程式人生 > >stm32之時鐘控制

stm32之時鐘控制

完成 有時 時序 容易 .cn spa 總線 可選 依靠

本文提到的有以下內容:

  • 時鐘系統與總線矩陣
  • SysTick系統定時器
  • RTC實時時鐘
  • 看門狗定時器
  • 通用定時器

一、時鐘系統與總線矩陣

  stm32F4的時鐘樹如下圖所示:

技術分享

  在STM32中,有五個時鐘源,為HSI、HSE、LSI、LSE、PLL。

  • HSI是高速內部時鐘,RC振蕩器,頻率為8MHz。
  • HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率範圍為4MHz~16MHz。
  • LSI是低速內部時鐘,RC振蕩器,頻率為40kHz。
  • LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。
  • PLL為鎖相環倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過72MHz。

  我們在學習51單片機的時候,其內部是沒有晶振的,而stm32是有的。stm32可以通過RCC(時鐘控制寄存器)對時鐘進行參數配置以

及使能。我們還可以通過修改system_stm32f4xx.c文件,來配置上述時鐘樹上的一些分頻、倍頻參數,得到理想的頻率。

   在單片機系統中,CPU和總線以及外設的時鐘設置是非常重要的,因為沒有時鐘就沒有時序,組合電路需要好好理解清楚。我們先來看

一下總線矩陣。

技術分享

  片上總線標準種類繁多,而由ARM公司推出的AMBA片上總線受到了廣大IP開發商和SoC系統集成者的青睞,已成為一種流行的工業標

準片上結構。AMBA規範主要包括了AHB(Advanced High performance Bus)系統總線和APB(Advanced Peripheral Bus)外圍總線。二者

分別適用於高速與相對低速設備的連接。

  一般性的時鐘設置需要先考慮系統時鐘的來源,是內部RC還是外部晶振還是外部的振蕩器,是否需要PLL。然後考慮內部總線和外部總線,

最後考慮外設的時鐘信號。遵從先倍頻作為CPU時鐘,然後在由內向外分頻,下級遷就上級的原則。

二、SysTick系統定時器  

  SysTick—系統定時器是屬於CM4內核中的一個外設,內嵌在NVIC中。系統定時器是一個24bit的向下遞減的計數器,計數器每計數一次的時

間為1/SYSCLK,一般我們設置系統時鐘SYSCLK等於180M。當重裝載數值寄存器的值遞減到0的時候,系統定時器就產生一次中斷,以此循環往復。

  因為SysTick是屬於CM4內核的外設,所以所有基於CM4內核的單片機都具有這個系統定時器,使得軟件在CM4單片機中可以很容易的移植。

系統定時器一般用於操作系統,用於產生時基,維持操作系統的心跳。

  一般用於系統內部運行以及延時函數。

三、RTC實時時鐘

  RTC(Real-Time Clock)實時時鐘為操作系統提供了一個可靠的時間,並且在斷電的情況下,RTC實時時鐘也可以通過電池供電,一直運行下去。

  RTC通過STRB/LDRB這兩個ARM指令向CPU傳送8位數據(BCD碼)。數據包括秒,分,小時,日期,天,月和年。RTC實時時鐘依靠一個外部

的32.768Khz的石英晶體,產生周期性的脈沖信號。每一個信號到來時,計數器就加1,通過這種方式,完成計時功能。

  RTC實時時鐘有如下一些特性:

  • 1,BCD數據:這些數據包括秒、分、小時、日期、、星期幾、月和年。
  • 2,閏年產生器
  • 3,報警功能:報警中斷或者從掉電模式喚醒
  • 4,解決了千年蟲問題 (詳見http://baike.baidu.com/view/9349.htm)
  • 5,獨立電源引腳RTCVDD
  • 6,支持ms中斷作為RTOS內核時鐘
  • 7,循環復位(round reset)功能

技術分享

  如圖,RTC實時時鐘的框架圖,XTIrtc和XTOrtc產生脈沖信號,即外部晶振。傳給2^15的一個時鐘分頻器,得到一個128Hz的頻率,這個頻率用

來產生滴答計數。當時鐘計數為0時,產生一個TIME TICK中斷信號。時鐘控制器用來控制RTC實時時鐘的功能。復位寄存器用來重置SEC和MIN寄存

器。閏年發生器用來產生閏年邏輯。報警發生器用來控制是否產生報警信號。

四、看門狗定時器

  看門狗定時器又分為獨立看門狗IWDG和窗口看門狗WWDG。

1、獨立看門狗

  獨立看門狗IWDG其實是一個12位遞減計數器,有故障時,計數器減到0,產生復位,無故障時,計數器減到0之前就刷新計數值(餵狗),不進

行復位。其采用獨立時鐘,主要用於監視硬件錯誤(不受系統時鐘影響)。

2、窗口看門狗

  窗口看門狗WWDG其實是一個7位遞減計數器,有計數上下限,下限位0x40,上限由用戶指定,上下限之間刷新計數值則不復位,其他都復位。采

用系統時鐘,主要用於監視軟件錯誤。

五、通用定時器

  stm32的定時器有基本定時器、通用定時器和高級定時器。這裏以通用定時器為例,其內部結構如下圖所示,需要設置預分頻系數,並不是直接

使用APB1的時鐘。

技術分享

  通用定時器的計數模式分為5種:

  • 向上計數:計數器從0計數到自動裝載值。
  • 向下計數:從自動裝載值計數到0。
  • 向上向下計數(中心對齊計數):計數器從0計數到自動裝載值,再從自動裝載值計數到0,反復循環。
  • 輸入捕獲:測量輸入信號的脈寬、PWM波的占空比等。
  • 輸出比較:PWM波用的就是這種模式。

  定時器的時間公式:T=((n-1)*(pre-1))/Tclk,其中n為計數值,pre為預分頻系數,Tclk為定時器時鐘。

  為什麽計數值和預分頻系數要減一?因為計數是從0開始的,而預分頻系數為0時,表示不分頻。

stm32之時鐘控制