頻率與時間換算方法
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; //清空計數器 }