stm32的systick(系統滴答定時器)

2021-08-03 01:33:57 字數 1083 閱讀 5386

systick定時器被**在nvic中,用於產生systick異常。

以前,大多數作業系統需要乙個硬體定時器來產生作業系統需要的滴答中斷,來作為整個系統的時基。for example,為多個任務許以不同數目的時間片,確保沒有乙個任務能霸佔系統;或者把每個定時器週期的某個時間範圍賜予特定的任務等,還有作業系統提供的各種定時功能,都與這個滴答定時器有關。

因此,需要乙個定時器來產生週期性的中斷,而且最好還讓使用者程式不能隨意訪問它的暫存器,以維持os「心跳」的節奏。

cortex-m3處理器內部包涵了乙個簡單的定時器。因為所有的cm3晶元都帶有這個定時器,軟體在不通cm3器件間的移植工作得以簡化。該定時器的時鐘源可以是內部時鐘(fclk,cm3上的自由執行時鐘),或者是外部時鐘(cm3處理器上的stclk訊號)。不過,stclk的具體**則由晶元設計者決定,因此不同產品之間的時鐘頻率可能會大不相同,需要檢視晶元的datasheet來決定選擇什麼作為時鐘源。

systick定時器能產生中斷,cm3為它專門開出乙個異常型別,並且在向量表中有它的一席之地。它使os與其他系統軟體在cm3器件間的移植變得簡單多了,因為在所有的cm3產品間對其處理都是想同的。

4個暫存器控制systick定時器,如下

typedef struct /* structure type to access the system timer*/

systick_type;

校準值暫存器提供了這樣乙個解決方案:它使os即使在不同的cm3產品上執行,也能產生恆定的systick中斷頻率。最簡單的作法是:直接把tenms的值寫入重裝載暫存器(reload),這樣一來,只要沒突破系統極限,就能做到每10ms來一次systick異常。

實際配置:

systick_clksourceconfig(systick_clksource_hclk_div8); 這一句把systick的時鐘選擇為 外部時鐘,8分頻。假設外部晶振是8m,倍頻至72m,那麼systick的時鐘就是9mhz,也就是systick的計數器val每減去1,就代表時間過去了1/9us。那麼,計算在72mhz的時鐘頻率下,延時1ms,我們需要72mhz/8000個systick時鐘週期;延時1us,我們則需要72mhz/8000 000個systick時鐘週期。

STM32系統定時器 SysTick

systick 系統定時器是cm3核心中的乙個外設,內嵌在nvic中,所有基於cm3核心的微控制器都具有這個系統定時器,系統定時器一般用於作業系統,用於產生時基,維持作業系統的心跳。系統定時器是乙個24bit的向下遞減的計數器,計數器計數一次的時間為1 sysclk,一般我們設定系統時鐘sysclk...

STM32系統學習 SysTick(系統定時器)

systick系統定時器是屬於cm3核心中的乙個外設,內嵌在nvic 巢狀向量中斷控制器,控制整個晶元中斷相關的功能,它與核心緊密藕合,是核心中的乙個外設 中。系統定時器是乙個24位的向下遞減的計數器,計數器每計數一次的時間為1 sysclk,一般我們設定系統時鐘sysclk為72mhz,當重裝載數...

stm32 系統滴答定時器Systick

systick定時器簡介 systick定時器就是系統滴答定時器,systick定時器,是乙個簡單的定時器,對於st的cm3,cm4,cm7核心晶元,都有systick定時器。systick定時器常用來作延時,或者實時系統的心跳時鐘,這樣可以節省mcu資源,不用浪費乙個定時器。systick定時器是...