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