|
正點(diǎn)原子的是使用systick做DELAY的,systick是cm3中自帶的一個(gè)時(shí)鐘,在大多數(shù)要求精細(xì)延時(shí)的項(xiàng)目里一般是使用systick而不是for或者是while之類(lèi)的循環(huán)作delay的,以下為正點(diǎn)原子中如何delay:void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //時(shí)間加載
SysTick->VAL=0x00; //清空計(jì)數(shù)器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //開(kāi)始倒數(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ù)器
}
而ms的實(shí)現(xiàn)就是在fac_ms=1000*fac_us,在例程里是拿SysTick_CLKSource_HCLK_Div8作為時(shí)鐘頻率,所以fac_us=9即是每九次計(jì)數(shù)1us
在使用的時(shí)候有一個(gè)疑問(wèn):當(dāng)delay_us使用在while中時(shí)正常,但為什么在中斷中使用時(shí)就會(huì)使得while中的delay_us延時(shí)變快呢?
|
評(píng)分
-
查看全部評(píng)分
|