STM32學習筆記7 SysTick定時器

2021-09-12 07:46:00 字數 1414 閱讀 1484

systick定時器

cm3的核心中有乙個systick定時器,它是乙個24位倒數定時器,當計數到0是將從reload 暫存器中自動重裝載定時初值,開始新一輪計數。只要不把它在 systick 控制及狀態暫存器中的使能位清除,就永不停息。大多數時候都用這個計數器作為精確延時來使用,不需要占用中斷,也不占用系統定時器。

systick定時器被**在nvic中,用於產生systick異常(異常號:15)。systick中斷的優先順序也可以設定。

使用systick需要操作的暫存器:

ctrl systick 控制和狀態暫存器

對於stm32,外部時鐘源是 hclk(ahb匯流排時鐘)的1/8,核心時鐘是 hclk時鐘

配置函式:systick_clksourceconfig(); //systick時鐘源選擇 misc.c檔案中

load systick 自動重裝載除值暫存器 //倒數至0的時候將被重新裝載的值

val systick 當前值暫存器 //讀取當前計數器的值,寫它清零同時清除第乙個暫存器的第16位

為了不占用中斷,一般這樣延時:

static

int fac_us;

static

int fac_ms;

void

delay_init()

void

delay_us

(u16 us)

while

((temp&

0x01)&&

!(temp&(1

<<16)

));//第乙個是保證計數器使能了,當計數器計數到零的時候第十六位會置1,從而知道計數結束

systick->ctrl=

~systick_ctrl_enable_msk;

//關閉計數器

systick->val=

0x00

;//清空計數器

}void

delay_ms

(u16 ms)

//msخճֵϊ1864

while

((temp&

0x01)&&

!(temp&(1

<<16)

));//第乙個是保證計數器使能了,當計數器計數到零的時候第十六位會置1,從而知道計數結束

systick->ctrl=

~systick_ctrl_enable_msk;

//關閉計數器

systick->val=

0x00

;//清空計數器

}

這樣就可以延時了,systick還可以計算程式執行的時間,這裡就不涉及了,後面在嵌入式系統中會講到。

STM32學習筆記

剛到公司實習,要學習stm32開發,boss給了一塊戰艦開發板,讓我自己寫乙個功能要用在公司的產品上。難啊。以前根本沒接觸過stm32,只能一步一步慢慢來,利用晚上利用週末惡補一下。哎,算是為了大學前兩年還債吧。一 跑馬燈實驗 gpio輸出 實驗環境 keil4 實驗平台 戰艦stm32開發板 gp...

stm32學習筆記

開漏模式輸出 輸出暫存器上的 0 啟用 n mos,而輸出暫存器上的 1 將埠 置於高阻狀態 p mos從 被啟用 推挽模式輸出 輸出暫存器上的 0 啟用 n mos,而輸出暫存器上的 1 將啟用 p mos。上拉輸入 輸入高電平,然後接乙個 上拉電阻 保護作用 讀取此時的引腳電平為高電平 下拉輸入...

學習筆記 stm32

簡介cortex核心 cortex m4核心 庫開發與暫存器開發的關係 stm32 韌體庫與 cmsis 標準 內部結構 最小系統 小馬哥四軸原始碼學習 新建工程 點燈!gpio 按鍵暫存器對映 時鐘系統 systick定時器 埠復用和重對映 串列埠串列埠試驗函式分析 中斷看門狗 通用定時器 階段性...