频率与时间换算方法-stm精确延时

频率与时间换算方法

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; //清空计数器
}
发布了16 篇原创文章 · 获赞 9 · 访问量 2914

猜你喜欢

转载自blog.csdn.net/yhhdll0107/article/details/105723286
今日推荐