月霜寒 发表于 2017-4-14 11:37:59

下面这段延时程序怎么理解?求大神解答

volatile u32 temp = 0;      
SysTick->LOAD=10000*fac_us; //时间加载      
SysTick->VAL=0x00;      //清空计数器
SysTick->CTRL=0x01 ;      //开始倒数   
do
{
    temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
SysTick->CTRL=0x00;       //关闭计数器
SysTick->VAL =0X00;       //清空计数器
//这是延时多久,怎么实现的延时?

混森蓝兽 发表于 2017-4-14 12:32:17

这是利用systick来进行精准的延时,大体的流程就是开始systick定时定量,然后 SysTick->LOAD加载设定好的定时计数值,然后开始向下递减,减到0之后,COUNTFLAG标志位会被置1,然后跳出 while循环,延时完成。
延时时间与SysTick->LOAD的值还有systick选择的时钟源相关,具体你可以看一下原子或者野火的资料。

月霜寒 发表于 2017-4-14 13:13:30

多谢,;P;P;P;P;P;P;P;P

五哥1 发表于 2017-4-16 10:25:25

HAL_Delay(),就是这样用

harvardx 发表于 2017-4-16 19:03:48

cortex-M核心 最常用的一招 us等短延时, 直接利用sys_tick实现

SInzo 发表于 2017-4-17 11:32:03

systick计时,现实时间取决于时钟设置

月霜寒 发表于 2017-4-17 11:48:04

我上面那段程序是延时多久呢?
页: [1]
查看完整版本: 下面这段延时程序怎么理解?求大神解答