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