
stm32的时钟频率,如果是103这个级别的,大概最高就是时钟为72Mhz,那么就是一个时钟周期为 1/72 000 000 约为 13ns,,那么要实现10ns准确延时,理论上
首先STM32中没有delay的库函数
你所用的delay函数是属于战舰开发板的源程序 是由原子哥他们写的
你可以去看他们的完整的源代码 你要用delay_ms()这个函数
肯定会有一个函数是delay_init()
他们的延时用的是滴答定时器 systick 所以你必须要对他进行初始化
而我好像没有在你的程序中看到有延时函数的初始化
单片机的C语言关于延时函数主要有两种一种是用for循环,通过单片机执行空指令达到延时的目的如:for(i=0;i<100;i++){;}这个简单的语句会执行100次空指令每一次指令的时间可以大概确定因此这个是最简单的延时函数第二种是通过定时器的方式来实现定时器是通过对单片机的晶振进行计数然后在定时器中断服务函数里面实现定时时间的计算及设置51单片机的定时器0中断服务函数为voidtime0()interrupt1{}
在与传感器或者模块的总线进行通信的时候,常常需要使用到精确延时,一般我们会封装几个常用延时函数。
SysTick是一个24位的倒计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时初值并继续计数,且同时触发中断。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。
在刚进入delay_us函数的时候,先计算好这段延时需要等待的SysTick计数次数,这里为509(假设系统时钟为72MHz,因为systick的频率为系统时钟频率的1/8,那么systick每增加1,就是1/9us),然后我们就一直读取SysTick->CTRL寄存器,当该寄存器bit16的值为1时,说明倒计时了509个SysTick,即说明延时50us时间到了。
以上就是关于如何用STM32做纳秒级别的延时,求赐教全部的内容,包括:如何用STM32做纳秒级别的延时,求赐教、STM32延时函数问题、stm8的空指令延时c语言怎样写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)