[技术问答] 设置一个准确的延迟函数

[复制链接]
959|7
 楼主| shen_hao 发表于 2017-8-13 21:45 | 显示全部楼层 |阅读模式
本帖最后由 shen_hao 于 2017-8-13 21:50 编辑

小弟今天想写一个准确的延迟函数,因为之前一直使用CLK_SysTickDelay(),所以今天写这个函数轨迹也是从此开始,因为之前是因为CLK_SysTickDelay()这个函数传的值过大,导致延迟不准确,所以设置为1000,来避免这个问题。奇怪的事情是这两个while都没有想象中的1s,而且第二个while,一直等30s才延迟结束,最后还是用time_delay()准确。我的问题分两部分,第一:这两个while的延迟时间为什么差别这么大???第二:我这个函数怎么写才好???
void delay_s(uint32_t second)
{
        uint32_t i;
        uint32_t j = second*1000;
//        for(i=0;i<second;i++)
//        {
////                while(j>0)     //这
////                {
////                 CLK_SysTickDelay(1000);
////                        j--;
////                }
////                while(j--)
////                         CLK_SysTickDelay(1000);
//               

//                        
//        }

        TIMER_Delay(TIMER0, second*1000000);
}
 楼主| shen_hao 发表于 2017-8-13 21:51 | 显示全部楼层
如果使用__NOP,它每次运行的时间是多少???这个应该跟系统时钟有关系把???
xyz549040622 发表于 2017-8-13 22:20 | 显示全部楼层
如果想要准确的延时函数,建议参考STM32的做法,使用系统的滴答定时器来延时。
ihafd 发表于 2017-8-13 23:15 | 显示全部楼层
楼上两位回复得对了。
dongnanxibei 发表于 2017-8-14 16:44 | 显示全部楼层
用定时器实现,官方的库函数就是使用了定时器计数。
 楼主| shen_hao 发表于 2017-8-14 16:56 | 显示全部楼层
xyz549040622 发表于 2017-8-13 22:20
如果想要准确的延时函数,建议参考STM32的做法,使用系统的滴答定时器来延时。 ...

不就这个system tick么
 楼主| shen_hao 发表于 2017-8-14 16:56 | 显示全部楼层
dongnanxibei 发表于 2017-8-14 16:44
用定时器实现,官方的库函数就是使用了定时器计数。

是的,目前最准确的就是用了time_delay()函数
 楼主| shen_hao 发表于 2017-8-14 16:57 | 显示全部楼层
ihafd 发表于 2017-8-13 23:15
楼上两位回复得对了。

什么啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

230

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部