STM32
直播中

张立

8年用户 206经验值
私信 关注
[问答]

delay中的do while语句求解?

void delay_ms(u16 nms)
{         
u32 temp;     
Systick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00;           //清空计数器
SysTick->CTRL=0x01 ;          //开始倒数  
do
{
  temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
SysTick->CTRL=0x00;       //关闭计数器
SysTick->VAL =0X00;       //清空计数器        
}   其中的do while语句,我没看懂什么情况下 while(temp&0x01&&!(temp&(1<<16)));内部的表达式可以为假,感觉一直都是真的。temp&0x01应该是真,!temp&(1<<16))结果也是真啊

回帖(9)

陶天瑛

2020-6-12 14:46:50
要为真才能延时呢.为假的时候才退出...
举报

张建华

2020-6-12 15:02:02
是啊 原子哥  我就是没找到假的条件 什么时候退出呢
举报

李雪飞

2020-6-12 15:15:53
啊 当倒数结束时countflag标志位置1,temp=0x1001吧
temp&0x01=1为真,而!(temp&(1<<16)),当1<<15时,!(temp&(1<<15))为假  之后跳出 是这个意思吗?
举报

王梅

2020-6-12 15:33:18
LOAD=0的时候退出.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分