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