STM32 滴答定时器
STM32系统滴答定时器等待计数溢出,请问这句话怎么理解。计数溢出以后该位置1,取反后为0,while()就不成立,就不会执行后面的语句。我这样理解应该是错的,但就是钻不...
STM32 系统滴答定时器等待计数溢出,请问这句话怎么理解。 计数溢出以后该位置1,取反后为0,while()就不成立,就不会执行后面的语句。我这样理解应该是错的,但就是钻不出来了,请指教
//等待计数溢出
while(!(SysTick->CTRL&(1<<16)));
//关闭定时器
SysTick->CTRL &= ~(1<<0);
//清除标志位
SysTick->VAL = 0;//清除溢出标志位 展开
//等待计数溢出
while(!(SysTick->CTRL&(1<<16)));
//关闭定时器
SysTick->CTRL &= ~(1<<0);
//清除标志位
SysTick->VAL = 0;//清除溢出标志位 展开
1个回答
2016-05-01
展开全部
你后面的关闭定时器、清除标志位的语句又不在while循环里面,你这个while语句是空循环来的。。。所以在定时器溢出置位之前,CPU一直在while循环里空转,啥都不干,换句话说就是等待定时器溢出,然后才执行下面的语句。
更多追问追答
追答
当定时器还没溢出,SysTick的CTRL寄存器第16位为0,与(1<<16)即0x10000000000000000做按位与运算(&),结果必为0,再取反(!),结果为1,while循环的条件成立,所以CPU一直在执行while这个空循环。直到定时器溢出,SysTick的CTRL寄存器第16位置1,与(1<<16)即0x10000000000000000做按位与运算(&),结果不为0,再取反(!),结果不为1,while循环条件不成立,跳出循环,执行下面的语句。我觉得你应该去补补C语言还有STM32的编程手册。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询