頻率與時間換算方法-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; //清空計數器
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章