STM32F1學習-SysTick定時器
阿新 • • 發佈:2018-12-30
SysTick定時器常用來做延時,或者用實時系統的心跳時鐘。這樣可以節省MCU資源,不浪費定時器。Systick定時器就是系統滴答定時器,一個24 位的倒計數定時器,計到0 時,將從RELOAD 暫存器中自動重灌載定時初值。只要不把它在SysTick控制及狀態暫存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
4個SysTick暫存器 CTRL SysTick控制和狀態暫存器 LOADSysTick 自動重灌載除值暫存器
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
摘自:可以很好的理解。
再舉一個完整的函式