STM32處理器有一個(gè)24位的系統(tǒng)滴答定時(shí)器SysTick,它從重新加載值開(kāi)始倒數(shù)到0,然后在下一個(gè)時(shí)鐘邊緣重新加載(包裝到)STK_LOAD寄存器中的值,然后在隨后的時(shí)鐘上倒數(shù)。
計(jì)數(shù)標(biāo)志位COUNTFLAG在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的16位,當(dāng)計(jì)時(shí)器減計(jì)數(shù)到0時(shí),返回1。
時(shí)鐘源選擇位CLKSOURCE在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的2位,賦值為0時(shí)為8分頻,賦值為1時(shí)為1分頻。想要計(jì)數(shù)速度更快可以選擇1分頻的時(shí)鐘源。
SysTick異常請(qǐng)求允許位TICKINT在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的1位,賦值為0時(shí)禁止異常請(qǐng)求,賦值為1時(shí)允許異常請(qǐng)求。軟件可以使用COUNTFLAG來(lái)判斷SysTick是否曾經(jīng)被計(jì)數(shù)為零。
計(jì)數(shù)使能位在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的0位,賦值0時(shí)禁止計(jì)數(shù),賦值1時(shí)使能計(jì)數(shù)。
重裝載值RELOAD在SysTick重載值寄存器STK_LOAD的0~23位,加載寄存器指定在啟用計(jì)數(shù)器時(shí)和計(jì)數(shù)器達(dá)到0時(shí)加載到當(dāng)前值寄存器STK_VAL的起始值。
當(dāng)前的計(jì)數(shù)器值CURRENT在當(dāng)前值寄存器STK_VAL的1~23位。前值寄存器STK_VALSysTick計(jì)數(shù)器的當(dāng)前值。讀取返回SysTick計(jì)數(shù)器的當(dāng)前值。任何值的寫入都會(huì)將字段清除為0,并將STK_CTRL寄存器中的COUNTFLAG位清除為0。
查詢us、ms延時(shí)函數(shù)
void Systick_Delayus(u32 us)
{
SysTick- >CTRL &=~ (1< 2); //選擇時(shí)鐘源,8分頻
SysTick- >LOAD = 21*us - 1; //賦值裝載值
SysTick- >VAL = 0; //清除當(dāng)前值
SysTick- >CTRL |= 1< 0; //使能計(jì)數(shù)器
while((SysTick- >CTRL & (1< 16)) == 0); //判斷計(jì)數(shù)是否結(jié)束
SysTick- >CTRL &=~ (1< 0); //禁止計(jì)數(shù)器
}
void Systick_Delayms(u16 ms)
{
Systick_Delayus(ms * 1000);
}
從時(shí)鐘樹可以知道,系統(tǒng)時(shí)鐘168Mhz,8分頻后得到滴答定時(shí)器時(shí)鐘為21Mhz,裝載值(需要延時(shí)時(shí)間)可根據(jù)時(shí)鐘頻率計(jì)算求得,每秒可計(jì)數(shù)21000000次,每微秒可計(jì)數(shù)21次。裝載值和當(dāng)前值都是24位,最大為16777215,最大微秒定時(shí)798915us,最大毫秒定時(shí)798ms。
結(jié)合LED燈和Systick定時(shí)讓LED燈500ms閃爍一次,主函數(shù)為
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main()
{
LED_Init(); //初始化LED燈
while(1) //點(diǎn)亮或熄滅LED燈
{
GPIOH- >ODR &=~ (0x01< 10); //輸出為0,led燈亮
GPIOH- >ODR &=~ (0x01< 11); //輸出為0,led燈亮
Systick_Delayus(500000);
GPIOH- >ODR |= (0x01< 10); //輸出為1,led燈滅
GPIOH- >ODR |= (0x01< 11); //輸出為1,led燈滅
Systick_Delayms(500);
}
}
編譯成功后將程序燒入,LED每500ms閃爍一次,Systick查詢定時(shí)成功。
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
108323 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2261瀏覽量
94905 -
狀態(tài)寄存器
+關(guān)注
關(guān)注
0文章
39瀏覽量
7135 -
Systick
+關(guān)注
關(guān)注
0文章
62瀏覽量
13131 -
STM32處理器
+關(guān)注
關(guān)注
0文章
5瀏覽量
1138
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論