Systick能做ns延时吗?

2019-07-20 15:21发布

void delay_init(uint8_t SYSCLK)
{

//        uint32_t reload;

    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTick频率为HCLK
        fac_us=SYSCLK;                                                    //不论是否使用OS,fac_us都需要使用
}

void delay_us(uint32_t nus)
{               
        uint32_t ticks;
        uint32_t told,tnow,tcnt=0;
        uint32_t reload=SysTick->LOAD;                                //LOAD的值                        
        ticks=nus*fac_us;                                                 //需要的节拍数
        told=SysTick->VAL;                                        //刚进入时的计数器值
        while(1)
        {
                tnow=SysTick->VAL;       
                if(tnow!=told)
                {            
                        if(tnow<told)tcnt+=told-tnow;        //这里注意一下SYSTICK是一个递减的计数器就可以了.
                        else tcnt+=reload-tnow+told;            
                        told=tnow;
                        if(tcnt>=ticks)break;                        //时间超过/等于要延迟的时间,则退出.
                }  
        };
}

void delay_ms(uint16_t nms)
{
        uint32_t i;
        for(i=0;i<nms;i++) delay_us(1000);
}

原子哥的代码能改成ns延时吗?还是Systick定时器做不了ns延时?




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。