频率与时间换算方法

1.频率与时间的换算需要根据芯片型号计算

  如STM32F0芯片的频率为48M  

        那么如果需要延时1微妙则可以  

        首先进行8分频得到6M 6M=6*1000KB=6*1000*1000Bit=6000000个数 这是每秒计的数

        那么1ms则计6000个数 1us则计6次数  

        如果要用systick 做延时函数,那么systick重装载值则为6 

  如STM32F1芯片的频率为72M  

        那么如果需要延时1微妙则可以  

        首先进行8分频得到9M 9M=9*1000KB=9*1000*1000Bit=9000000个数 这是每秒计的数

        那么1ms则计9000个数 1us则计9次数  

        如果要用systick 做延时函数,那么systick重装载值则为9 

 

2.精准微妙延时示例

void delay_us(uint32_t nus)
{
    uint32_t temp;
    SysTick->LOAD = 9*nus;
    //这里是F1系列参数,其他系列需要更改系数。
    SysTick->VAL=0X00;//清空计数器
    SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
    do
    {  
        temp=SysTick->CTRL;//读取当前倒计数值
    }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
    SysTick->CTRL=0x00; //关闭计数器
    SysTick->VAL =0X00; //清空计数器
}

 

3.精准毫妙延时示例

void delay_us(uint32_t nus)
{
    uint32_t temp;
    SysTick->LOAD = 9000*nus;
    //这里是F1系列参数,其他系列需要更改系数。
    SysTick->VAL=0X00;//清空计数器
    SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
    do
    {  
        temp=SysTick->CTRL;//读取当前倒计数值
    }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
    SysTick->CTRL=0x00; //关闭计数器
    SysTick->VAL =0X00; //清空计数器
}

 

posted @ 2019-04-23 22:39  q601785959  阅读(5677)  评论(0编辑  收藏  举报