打印
[技术问答]

关于延时函数

[复制链接]
964|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shen_hao|  楼主 | 2017-11-22 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在time delay源文件中,是以time0 做延时,用time1做获取动作。主要是time1做测试工作,time的时钟设置为HXT,另外把system tick的时钟源设置为HCLK/2,不明白有什么用?time计数计数的时候不是应该依照time时钟吗?跟system tick没有直接关系。time具体获取计数值的过程是下面这样子:
TIMER1->CTL = TIMER_PERIODIC_MODE | (12 - 1);  //我不明白为什么time1 获取的计数值正好就是us级???
    //TIMER_SET_CMP_VALUE(TIMER1, 0xFFFFFF);
    TIMER_Start(TIMER1);

    TIMER_SET_CMP_VALUE(TIMER1, 0xFFFFFF);
    TIMER_Delay(TIMER0, 100000);
                while(i--);
    u32DelayTime = TIMER_GetCounter(TIMER1)/1000 ;

目的:我想做一个延时函数,方便用来延时 秒级,纯粹用
while(i--); //测出一个数值即可,我的想法
问题:这样一个延迟,怎么才能避免换个程序(不同的系统设置)就不能用的?或者大伙延时秒级都是怎么弄得?跪谢!!!

想法:i--的速度跟系统时钟有关系,我把它设为72M,别的应该没关系了吧???

我在time delay测数具(i)为12000100,正好1S,但当我转移到另一个程序中。系统时钟还是72M,设置time也还是HXT,system tick也还是HCLK/2。因为源程序中time获取的计数值正好就是us级的,以此为基础,得出的延时结果是1835ms

沙发
捉虫天师| | 2017-11-22 11:20 | 只看该作者
这个我也没看懂,只管用就行了。

使用特权

评论回复
板凳
捉虫天师| | 2017-11-22 11:20 | 只看该作者
库函数好多写的很复杂,一般人无法理解。

使用特权

评论回复
地板
wahahaheihei| | 2017-11-22 15:06 | 只看该作者
这些都不会非常精确的,但是够用。

使用特权

评论回复
5
shen_hao|  楼主 | 2017-11-22 16:59 | 只看该作者
捉虫天师 发表于 2017-11-22 11:20
库函数好多写的很复杂,一般人无法理解。

那兄台延时函数怎么写的??

使用特权

评论回复
6
shen_hao|  楼主 | 2017-11-22 17:00 | 只看该作者
wahahaheihei 发表于 2017-11-22 15:06
这些都不会非常精确的,但是够用。

那兄台延时函数怎么写的??

使用特权

评论回复
7
chuanmeng51| | 2017-11-23 19:41 | 只看该作者
void delay_1ms(uint t)
{
        uint i, j;
        for(i=0;i<t;i++)
        {
                for(j=0;j<1410;j++);
        }
}



上古写法,使用N76E003内部16M振荡器跑的程序,够用。

使用特权

评论回复
8
shen_hao|  楼主 | 2017-11-24 17:16 | 只看该作者
chuanmeng51 发表于 2017-11-23 19:41
上古写法,使用N76E003内部16M振荡器跑的程序,够用。

这样写延迟应该只跟core clock有关吗?

我还要再试试。。。ε=(´ο`*)))唉

使用特权

评论回复
9
yiyigirl2014| | 2017-11-26 18:49 | 只看该作者
一般时序都是有个范围,所以这个定时也不需要非常精确。

使用特权

评论回复
10
wahahaheihei| | 2017-12-17 22:15 | 只看该作者
时间短的是没法弄的,时间长的用定时器。

使用特权

评论回复
11
643757107| | 2017-12-17 22:46 | 只看该作者
好多单片机官方也是用定时器做延时函数

使用特权

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

本版积分规则

79

主题

230

帖子

2

粉丝