开发板提供的 delay_us(u32 nus)函数求解?

2019-07-20 00:49发布


疑问1 :  nus:0~190887435(最大值即2^32/fac_us@fac_us=22.5)          fac_us如果是F429  ,不应该是 180吗?

疑问2 : 函数里面
        while(1)
        {
                tnow = SysTick->VAL;       
               
                if(tnow!=told)
                {            
                        if(tnow<told)
                        {
                                tcnt += told - tnow;        //这里注意一下SYSTICK是一个递减的计数器就可以了.
                        }
                        else
                        {
                                tcnt += reload - tnow + told;
                        }                    
                        told = tnow;
                       
                        if(tcnt>=ticks)
                        break;                                        //时间超过/等于要延迟的时间,则退出.
                }  
        };


怎么理解?   如果有while(1)函数,这样实现的延时不是还是阻塞的吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
luoyekj
1楼-- · 2019-07-20 04:28
 精彩回答 2  元偷偷看……
夏清
2楼-- · 2019-07-20 06:18
luoyekj 发表于 2019-7-11 16:45
因为有break语句。当if(tcnt>ticks)满足时,break会跳出本层循环,而if语句不是循环,所以直接跳出while ...

谢谢   我一开始 没理解   tcnt += reload - tnow + told;  这句。 现在想明白了 ,还是要看M4内核手册

一周热门 更多>