第一种:
void delay_nus(vu32 val)
{
SysTick->LOAD = System_Clk*val;//
SysTick->CTRL = 0x05;
while(!(SysTick->CTRL&0x00010000));
SysTick->CTRL = 0x04;
}
System_Clk为系统主时钟频率值;
第二种:
void delay_nus(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*9000; //????
SysTick->VAL=0x00; //?????
SysTick->CTRL=0x01 ; //????
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//??????
SysTick->CTRL=0x00; //?????
SysTick->VAL =0X00; //?????
}
第二种延时程序,应该是非常精准的,因为第一种延时程序用在DS18B20和DHT11这种对时序要求很严的传感器里面,读不出来传感器值,但是第二种是可以的。求路过大神,给解释一下,谢谢!!
一周热门 更多>