時鐘作為芯片的心臟,芯片依靠時鐘維持運動的狀態(tài)。
stm32的延時函數(shù),依賴滴答定時器,獨立的提供延時。
滴答定時器:
時鐘是由HCLK經(jīng)過8分頻來作為小心臟的。假設(shè)HCLK時鐘為72MHz,8分頻后,滴答定時器頻率為9MHz,即一個時鐘周期為1/9us。
在我們使用滴答定時器進行us定時時,需要修改fac_us的值,假設(shè)設(shè)定HCLK時鐘為72MHz,則fac_us應(yīng)該設(shè)定為9,使delay_us()保持1us。
以下為SysTick定時器us的延時函數(shù)。
//nus為要延時的us數(shù).
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //時間加載
SysTick->VAL=0x00; //清空計數(shù)器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //開始倒數(shù)
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待時間到達
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關(guān)閉計數(shù)器
SysTick->VAL =0X00; //清空計數(shù)器
}