Cotrex-M内核定时器两种微秒级别精准延时区别,求路过大神解释。。。

2019-07-20 23:16发布

第一种:
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这种对时序要求很严的传感器里面,读不出来传感器值,但是第二种是可以的。求路过大神,给解释一下,谢谢!!
0条回答

一周热门 更多>