173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32软件精准延时

keros@mark 2023-03-19 资讯中心

stm32ram等待时间

stm32ram等待时间

从现象上来说,确实是阻塞了CPU,

延时的目的就是让CPU停住一段时间。

systick嘀嗒定时器在延时的时候,一直判断标志位,用while语句,这样cpu就一直停在这里了,知道标志位置位,再跳出等待,这样就实现精准延时了。

STM32延时问题

void delayus(u32 x)

{

    u32 i,j;

for(i=0;ix;i++)

for(j=0;j10;j++);

}

印象里这样大约是1us(没中断的情况下)。你可以采用定时器来测量函数大致的延时时间。

设置并,清计数器

开启定时器

进入函数

出函数后关闭定时器,读取计数器。观察用时。

__ASM("NOP");为1个机器周期,1/72M

STM32能否实现0.5us的精确延时?

T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK

定时器就可以完成了 T=(1+1)*(17+1)/72 = 0.5us

stm32左转延时

在与传感器或者模块的总线进行通信的时候,常常需要使用到精确延时,一般我们会封装几个常用延时函数。

SysTick是一个24位的倒计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时初值并继续计数,且同时触发中断。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。

在刚进入delay_us函数的时候,先计算好这段延时需要等待的SysTick计数次数,这里为50*9(假设系统时钟为72MHz,因为systick的频率为系统时钟频率的1/8,那么systick每增加1,就是1/9us),然后我们就一直读取SysTick-CTRL寄存器,当该寄存器bit16的值为1时,说明倒计时了50*9个SysTick,即说明延时50us时间到了。

刚学stm32,想用软件for语言实现延时20ms,请各路大神给写个程序

stm32可以使用systick定时器来实现延时的功能,不需要这么写,具体可以看一下正点原子开发板的例程或者野火的。

如果非要这么写,也没关系。使用MDK软件设定好当前MCU的时钟频率,使用软件仿真,单独执行自己写的for循环延时,会在左边的寄存器窗口出现具体使用了多少时间,你可以根据这个情况修改for循环里的变量参数。

祝你成功

本文标签:stm32软件精准延时

产品列表
产品封装
友情链接