OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2895|回复: 2

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

[复制链接]

6

主题

19

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-7-6
在线时间
27 小时
发表于 2019-7-11 14:28:36 | 显示全部楼层 |阅读模式
1金钱

疑问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#楼]

因为有break语句。当if(tcnt>ticks)满足时,break会跳出本层循环,而if语句不是循环,所以直接跳出while循环。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-7-4
在线时间
8 小时
发表于 2019-7-11 14:28:37 | 显示全部楼层
因为有break语句。当if(tcnt>ticks)满足时,break会跳出本层循环,而if语句不是循环,所以直接跳出while循环。
回复

使用道具 举报

6

主题

19

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-7-6
在线时间
27 小时
 楼主| 发表于 2019-7-11 17:13:43 | 显示全部楼层
luoyekj 发表于 2019-7-11 16:45
因为有break语句。当if(tcnt>ticks)满足时,break会跳出本层循环,而if语句不是循环,所以直接跳出while ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 17:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表