打印

stm32的Delay()

[复制链接]
7766|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在stm32的主程序里,调用一个自己的Delay()函数,如下:
void Delay(__IO uint32_t nTime)
{
  __IO uint32_t TimingDelay;
  TimingDelay = nTime*0x1D4C0;   /*设置的sysclk为120 000 000,0x1D4C0=120 000,这样应该是跑完0x1D4C0后是1ms的时间吧

  while((TimingDelay--) != 0);
}




当我调用的时候是这样的:
    GPIO_ResetBits(GPIOE, GPIO_Pin_5);
    Delay(100);
    GPIO_SetBits(GPIOE, GPIO_Pin_5);
    Delay(100);


但是延迟时间用示波器测出来Delay(100)却是700ms
求大侠们指点,我觉得算出来应该是100ms才对啊。
沙发
qiujiahongde| | 2012-8-10 13:10 | 只看该作者
while((TimingDelay--) != 0);
运行多长时间依赖两个条件;
1、生成了多少条指令,你需要看汇编
2、你实际运行主频!

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
mark2000 + 1
板凳
mark2000|  楼主 | 2012-8-15 15:31 | 只看该作者
谢谢楼上,这几天不在,刚回来。
我看了看生成的汇编指令,如下图

想问一下,这几条指令的指令周期有没有说明的文件资料,谢谢啦
2# qiujiahongde

使用特权

评论回复
地板
airwill| | 2012-8-15 21:04 | 只看该作者
找 关于内核的编程手册, 有详细的说明.
不过这么长时间的延时, 建议不要用这种方式延时, 好好利用 Systick 定时器吧

使用特权

评论回复
5
lo_xiaohua_ve| | 2012-8-15 23:49 | 只看该作者
我就想不明白CORTEX-M3内核本身是有多级流水线结构的,这样的延时如何能准啦??

使用特权

评论回复
6
wangdapeng718| | 2012-8-16 09:03 | 只看该作者
四楼的建议好,用Systick

使用特权

评论回复
7
IJK| | 2012-8-16 10:12 | 只看该作者
ms级别的延时,我一般用Systick或者定时器

使用特权

评论回复
8
新人来学习| | 2012-8-16 10:24 | 只看该作者
顶楼上。。。

使用特权

评论回复
9
suse-lj| | 2012-8-16 12:08 | 只看该作者
我的系统中 就从来没有出现过 ms级别的延时说法。有次 延时100us 我都嫌太长。

使用特权

评论回复
10
cool_coder| | 2012-8-16 14:36 | 只看该作者
100ms级别的延时,这样死等太浪费了。就算你的CPU没别的事可干也别费电啊。

使用特权

评论回复
11
mark2000|  楼主 | 2012-8-16 16:48 | 只看该作者
谢谢回复,我自己再看看 4# airwill

使用特权

评论回复
12
mark2000|  楼主 | 2012-8-16 16:50 | 只看该作者
谢谢看帖,我的程序就是一个小试验程序,没上系统,不过还是谢谢你的意见 9# suse-lj

使用特权

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

本版积分规则

0

主题

28

帖子

0

粉丝