下面这段延时程序怎么理解?求大神解答
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; //清空计数器
//这是延时多久,怎么实现的延时?
这是利用systick来进行精准的延时,大体的流程就是开始systick定时定量,然后 SysTick->LOAD加载设定好的定时计数值,然后开始向下递减,减到0之后,COUNTFLAG标志位会被置1,然后跳出 while循环,延时完成。
延时时间与SysTick->LOAD的值还有systick选择的时钟源相关,具体你可以看一下原子或者野火的资料。
多谢,;P;P;P;P;P;P;P;P HAL_Delay(),就是这样用 cortex-M核心 最常用的一招 us等短延时, 直接利用sys_tick实现 systick计时,现实时间取决于时钟设置 我上面那段程序是延时多久呢?
页:
[1]