1. 程式人生 > >STM32F1學習-SysTick定時器

STM32F1學習-SysTick定時器

SysTick定時器常用來做延時,或者用實時系統的心跳時鐘。這樣可以節省MCU資源,不浪費定時器。Systick定時器就是系統滴答定時器,一個24 位的倒計數定時器計到時,將從RELOAD 暫存器中自動重灌載定時初值。只要不把它在SysTick控制及狀態暫存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。

4個SysTick暫存器 CTRL              SysTick控制和狀態暫存器 LOAD            

SysTick           自動重灌載除值暫存器 
VAL                 SysTick 當前值暫存器 CALIB           

SysTick           校準值暫存器

SysTick控制及狀態暫存器


SysTick重灌載數值暫存器

SysTick當前數值暫存器



SysTick校準數值暫存器

韌體庫中的Systick相關函式:

SysTick_CLKSourceConfig()     //Systick時鐘源選擇  

SysTick_Config(uint32_t ticks)  //初始化systick,時鐘為HCLK,並開啟中斷

Systick中斷服務函式:

void SysTick_Handler(void);

Systick寫延時函式的步驟:

第一步:初始化函式中,配置Systick的工作頻率。通過暫存器CTRL

第二步:在延時函式中,計算出在配置的工作頻率下1us或者1ms的震盪n次。(函式中需要多少us或者多少ms,直接乘以n次)。

第三步:把VAL的值清零。清零之後,VAL的值重新載入。

第四部:使能Systick,通過暫存器CTRL。

第五步:通過判斷Systick->COUNTFLAG  暫存器判斷定時是否到了。

第六步:定時時間到了,那就關閉定時器,同時清空Systick->VAL。

通過一個簡單的函式來理解。

@kexuexyz

摘自:


可以很好的理解。

再舉一個完整的函式