6228|11

514

帖子

5

TA的资源

纯净的硅(中级)

楼主
 

lm3s811例程中的延时程序搞不懂为什么这样写(已解决) [复制链接]

lm3s811例程中的是这样写的延时
void
Delay(unsigned long ulSeconds)
{
    //
    // Loop while there are more seconds to wait.
    //
    while(ulSeconds--)
    {
        //
        // Wait until the SysTick value is less than 1000.
        //
        while(SysTickValueGet() > 1000)
        {
        }

        //
        // Wait until the SysTick value is greater than 1000.
        //
        while(SysTickValueGet() < 1000)
        {
        }
    }
}
为什么要这样写呢,延时的时间是 怎么计算的?
程序里有下面这一句
SysTickPeriodSet(SysCtlClockGet());
那么SysTick的频率是不是跟板上使用的晶振频率一致啊。
[ 本帖最后由 leekuip 于 2012-2-21 13:13 编辑 ]

最新回复

用 timer  详情 回复 发表于 2013-1-17 09:04
 
点赞 关注(1)

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
SysTickValueGet()这个函数取得当前SysTick counter值,该值介于0和设置SysTick period-1之间;
while(SysTickValueGet() > 1000)和while(SysTickValueGet() < 1000)
的意思就是等待直到systick的计数值小于1000一次,然后再大于1000次;然后ulSeconds减一,作为一次短延时直到ulSeconds为0.
  systick一次的计时时间是由SysTickPeriodSet(SysTick period)函数参数决定的。
官方例程里是这样设置的
    SysTickPeriodSet(SysCtlClockGet());
//这一句设置计时步长,SysCtlClockGet()取得当前时钟频率,所以计时步长为1us;
    SysTickEnable();
//使能systick

[ 本帖最后由 shower.xu 于 2012-2-20 22:43 编辑 ]
 
 

回复

514

帖子

5

TA的资源

纯净的硅(中级)

板凳
 

回复 沙发 shower.xu 的帖子

还是想不明白while(SysTickValueGet() > 1000)和while(SysTickValueGet() < 1000)跟计数时间是怎么弄的,SysTickValueGet()得到的不是现在SysTick的计数值么?那也就是只有SysTickValueGet()返回值等于1000的时候ulSeconds--,不太明白例程的延时原理啊
 
 
 

回复

424

帖子

0

TA的资源

纯净的硅(高级)

4
 
SysTick的频率与CPU的频率一致
 
 
 

回复

514

帖子

5

TA的资源

纯净的硅(中级)

5
 

回复 4楼 鸵鸟蝈蝈 的帖子

CPU使用的是板上的6M晶振,例程中那样写怎么就实现了1S的延时呢?

点评

如何实现10ms的延时啊?  详情 回复 发表于 2013-1-16 22:15
 
 
 

回复

514

帖子

5

TA的资源

纯净的硅(中级)

6
 
自己顶顶,求解~
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

7
 
我二楼的说明不准确,请无视。
今晚我仿真了一下,下面两个图能很好的说明问题

在两个while()之前加入端口输出做指示,我们把值改为3000000,看的更清楚些。

进一步我们把值改为系统频率的一半,其实也是6M/2=3000000;效果一样。
右上角是当前的systick值在内存中的数据,要这样读:0x005B8D75=5999989=6M(这个数在调用Delay()时其实是6M内随机的);
实际运行过程是这样的

[ 本帖最后由 shower.xu 于 2012-2-20 23:11 编辑 ]

点评

如何实现10ms的延时啊?  详情 回复 发表于 2013-1-16 22:14

赞赏

1

查看全部赞赏

 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

8
 
网络抽筋了,多发了一楼

SysTick值是循环自减的,范围为0到你设置的波特率-1之间。

[ 本帖最后由 shower.xu 于 2012-2-20 23:14 编辑 ]
 
 
 

回复

514

帖子

5

TA的资源

纯净的硅(中级)

9
 

回复 7楼 shower.xu 的帖子

想明白了,谢谢哈~
 
 
 

回复

314

帖子

0

TA的资源

纯净的硅(初级)

10
 

回复 7楼 shower.xu 的帖子

如何实现10ms的延时啊?
 
 
 

回复

314

帖子

0

TA的资源

纯净的硅(初级)

11
 

回复 5楼 leekuip 的帖子

如何实现10ms的延时啊?

点评

用 timer  详情 回复 发表于 2013-1-17 09:04
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

12
 

回复 11楼 喜鹊王子 的帖子

用 timer
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表