频率与时间换算方法-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; //清空计数器
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值