頻率與時間換算方法


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; //清空計數器
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM