4.1 SysTick概述
Cortex-M3內(nèi)核的處理器,內(nèi)部包含了一個(gè)SysTick定時(shí)器,SysTick是一個(gè)24位的倒計(jì)數(shù)定時(shí)器,當(dāng)計(jì)數(shù)到0時(shí),將從ReLoad寄存器中自動(dòng)重裝載定時(shí)初值,開始新一輪計(jì)數(shù)。只要不把它在SysTick控制及狀態(tài)寄存器中的使能位清除,就永不停息。
SysTick定時(shí)器能產(chǎn)生中斷,CM3為它專門開出一個(gè)異常類型,并且在向量表中有它的一席之地。它使操作系統(tǒng)和其它系統(tǒng)軟件在CM3器件間的移植變得簡單多了,因?yàn)樵谒?span id="m5kw60s9xdeh" class="hljs-built_in">CM3產(chǎn)品間對(duì)其處理都是相同的。
我們?cè)诔绦蛑惺褂肧ysTick時(shí)鐘來作為延時(shí)函數(shù),這樣就不會(huì)占用定時(shí)器資源,SysTick時(shí)鐘是一個(gè)直接掛載在AHB總線上的一個(gè)定時(shí)器,輸入的時(shí)鐘頻率直接就是AHB總線上的時(shí)鐘頻率,使用SysTick定時(shí)器進(jìn)行延時(shí),可以精確的設(shè)置延時(shí)時(shí)間,與之前51單片機(jī)的for循環(huán)累加的精度是完全不一樣的。
4.2 相關(guān)寄存器
4.2.1 控制及狀態(tài)寄存器CTRL
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | flag | ||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | CLK | IRQ | EN |
Bit 16:計(jì)數(shù)狀態(tài)(只讀)
0:該位數(shù)據(jù)已經(jīng)被讀走
1:上次讀取到該位的數(shù)據(jù)后,計(jì)數(shù)值達(dá)到了0
Bit 2:時(shí)鐘源選擇
0:外部時(shí)鐘源
1:內(nèi)核時(shí)鐘
Bit 1:中斷標(biāo)志位
0:計(jì)數(shù)到0不產(chǎn)生中斷
1:計(jì)數(shù)到0產(chǎn)生SysTick中斷
Bit 0:定時(shí)器使能位
0:關(guān)閉定時(shí)器
1:開啟定時(shí)器
4.2.2 重裝載數(shù)值寄存器LOAD
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | ReLoad[7:0] | ||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ReLoad[15:0] |
ReLoad[23:0]:當(dāng)計(jì)數(shù)到0后,該寄存器的數(shù)據(jù)自動(dòng)更新到VAL中。
4.2.3 當(dāng)前數(shù)值寄存器VAL
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | VAL[7:0] | ||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
VAL[15:0] |
VAL[23:0]:讀取時(shí)返回當(dāng)前倒計(jì)數(shù)的值,寫它:清零,同時(shí)還會(huì)清除在SysTick控制及狀態(tài)寄存器中的flag標(biāo)志。
4.2.4 校準(zhǔn)值寄存器CALIB
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
REF | flag | - | TENMS[7:0] | ||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TENMS[15:0] |
Bit 31:外部參考時(shí)鐘可用標(biāo)志
0:外部參考時(shí)鐘可用
1:外部參考時(shí)鐘不可用
Bit 30:校準(zhǔn)值10ms標(biāo)志
0:校準(zhǔn)是準(zhǔn)確的10ms
1:校準(zhǔn)不是準(zhǔn)確的10ms
Bit 23~Bit 0:10ms的時(shí)間內(nèi)倒計(jì)數(shù)的格數(shù)。若該值讀回零,則表示無法使用校準(zhǔn)功能
4.3 SysTick驅(qū)動(dòng)函數(shù)
4.3.1 創(chuàng)建目錄
(1)在SYSTEM目錄下創(chuàng)建delay文件夾,并創(chuàng)建delay.c和delay.h文件。如下圖所示。
(2)將delay.c添加進(jìn)工程,delay.h添加進(jìn)程序。
(3)在delay.h文件中輸入如下內(nèi)容。
(4)底層寄存器文件添加寄存器組
(5)底層寄存器文件添加基礎(chǔ)地址
4.3.2 初始化
這里首先選擇外部時(shí)鐘源,由于系統(tǒng)時(shí)鐘72MHz,并且SYSTICK時(shí)鐘固定位系統(tǒng)時(shí)鐘的1/8,所以1us的計(jì)數(shù)脈沖實(shí)際是72/8,也就是9個(gè)脈沖才是1us,這個(gè)1us的脈沖數(shù)就是基礎(chǔ)時(shí)鐘。
4.3.3 us級(jí)別延時(shí)函數(shù)
4.3.4 ms級(jí)別延時(shí)函數(shù)
-
處理器
+關(guān)注
關(guān)注
68文章
19785瀏覽量
233283 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3284瀏覽量
117026 -
Systick
+關(guān)注
關(guān)注
0文章
63瀏覽量
13465
發(fā)布評(píng)論請(qǐng)先 登錄
systick時(shí)鐘節(jié)拍和精確延時(shí)問題
SysTick時(shí)鐘是指外部8M時(shí)鐘還是PLL倍頻后的系統(tǒng)時(shí)鐘?
使用FreeRTOS時(shí)Systick時(shí)鐘的配置分享
STM32的SysTick時(shí)鐘源是來自Cortex系統(tǒng)定時(shí)器嗎
SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8
STM32的SysTick時(shí)鐘源
請(qǐng)問STM32中如何使用systick時(shí)鐘進(jìn)行延時(shí)的中斷與非中斷?
STM32的SysTick時(shí)鐘源到底是從哪來呢
STM32的SysTick時(shí)鐘源是來自Cortex系統(tǒng)定時(shí)器嗎
SysTick時(shí)鐘簡介
CH579M的SysTick時(shí)鐘如何設(shè)置?
STM32的SysTick時(shí)鐘源是來自Cortex系統(tǒng)定時(shí)器嗎?

STM32入門學(xué)習(xí)筆記之SysTick時(shí)鐘

評(píng)論