stm32的Delay()

[复制链接]
8934|11
 楼主| mark2000 发表于 2012-8-10 11:20 | 显示全部楼层 |阅读模式
在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 | 显示全部楼层
谢谢楼上,这几天不在,刚回来。
我看了看生成的汇编指令,如下图
360截图20120810170823875.jpg
想问一下,这几条指令的指令周期有没有说明的文件资料,谢谢啦
2# qiujiahongde
airwill 发表于 2012-8-15 21:04 | 显示全部楼层
找 关于内核的编程手册, 有详细的说明.
不过这么长时间的延时, 建议不要用这种方式延时, 好好利用 Systick 定时器吧
lo_xiaohua_ve 发表于 2012-8-15 23:49 | 显示全部楼层
我就想不明白CORTEX-M3内核本身是有多级流水线结构的,这样的延时如何能准啦??
wangdapeng718 发表于 2012-8-16 09:03 | 显示全部楼层
四楼的建议好,用Systick
IJK 发表于 2012-8-16 10:12 | 显示全部楼层
ms级别的延时,我一般用Systick或者定时器
新人来学习 发表于 2012-8-16 10:24 | 显示全部楼层
顶楼上。。。
suse-lj 发表于 2012-8-16 12:08 | 显示全部楼层
我的系统中 就从来没有出现过 ms级别的延时说法。有次 延时100us 我都嫌太长。
cool_coder 发表于 2012-8-16 14:36 | 显示全部楼层
100ms级别的延时,这样死等太浪费了。就算你的CPU没别的事可干也别费电啊。
 楼主| mark2000 发表于 2012-8-16 16:48 | 显示全部楼层
谢谢回复,我自己再看看 4# airwill
 楼主| mark2000 发表于 2012-8-16 16:50 | 显示全部楼层
谢谢看帖,我的程序就是一个小试验程序,没上系统,不过还是谢谢你的意见 9# suse-lj
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

28

帖子

0

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