STM32中,systick具體延時時間怎麽計算的?
SysTick 就是壹個定時器而已,只是它放在了NVIC(嵌套中斷控制器)中,主要的目的是為了給操作系統提供壹個硬件上的中斷(號稱滴答中斷)。
滴答中斷:操作系統進行運轉的時候,也會有“心跳”。
它會根據“心跳”的節拍來工作,把整個時間段分成很多小小的時間片,每個任務每次只能運行壹個“時間片”的時間長度就得退出給別的任務運行,這樣可以確保任何壹個任務都不會霸占整個系統不放。
這個心跳,可以通過定時器來周期性觸發,而這個定時器就是systick。很明顯,這個“心跳”是不允許任何人來隨意地訪問和修改的。只要不把它在SysTick 控制及狀態寄存器中的使能位清除,就永不停息。
{ ?
SysTick_Current=0; //當前值為0
SysTick_Reload=72000; //重裝載寄存器,系統時鐘72M,中斷壹次1mS(1ms=0.001s=1/72M*72000)
TimingDelay =nTime; // 讀取延時時間?
SysTick_CSR=0x07; // 使能SysTick計數器
while(TimingDelay!= 0); // 判斷延時是否結束?
SysTick_CSR=0x06;// 關閉SysTick計數器?
}?
void Delay_Nus(uint32_t nTime) ?//us級的延時函數
{?SysTick_Current=0;?
SysTick_Reload=72; //重裝載寄存器,系統時鐘20M中斷壹次1mS?
TimingDelay=nTime;
SysTick_CSR=0x07; ? // 使能SysTick計數器?
while(TimingDelay!= 0); // 判斷延時是否結束?
SysTick_CSR=0x06;// 關閉SysTick計數器?}