打印
[技术问答]

设置一个准确的延迟函数

[复制链接]
767|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 | 只看该作者
楼上两位回复得对了。

使用特权

评论回复
5
dongnanxibei| | 2017-8-14 16:44 | 只看该作者
用定时器实现,官方的库函数就是使用了定时器计数。

使用特权

评论回复
6
shen_hao|  楼主 | 2017-8-14 16:56 | 只看该作者
xyz549040622 发表于 2017-8-13 22:20
如果想要准确的延时函数,建议参考STM32的做法,使用系统的滴答定时器来延时。 ...

不就这个system tick么

使用特权

评论回复
7
shen_hao|  楼主 | 2017-8-14 16:56 | 只看该作者
dongnanxibei 发表于 2017-8-14 16:44
用定时器实现,官方的库函数就是使用了定时器计数。

是的,目前最准确的就是用了time_delay()函数

使用特权

评论回复
8
shen_hao|  楼主 | 2017-8-14 16:57 | 只看该作者
ihafd 发表于 2017-8-13 23:15
楼上两位回复得对了。

什么啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

230

帖子

2

粉丝