OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12617|回复: 9

延时误差怎么这么大????????

[复制链接]

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
发表于 2012-3-31 15:21:06 | 显示全部楼层 |阅读模式
我用 原子哥的 Systick 计数模式,延时了,3.2 秒,这个 3.2 秒的结果,是在 MDK 软件中,用 J-Link 连接开发板,硬件在线仿真测试的时间。

然后,我用 led 灯,延时 3.2 秒循环,闪烁,发现,闪烁的时间,根本就没有 3.2 秒,恐怕,连 1 秒钟,也要差点。

我的板子晶振是 8 MHz,然后,那个 delay_init(8), 参数,是 8 ,用的 4 个delay_ms(1000),延时,3.2 秒,怎么误差会这么大????

是我哪里搞错了,还是,硬件仿真,本来误差就这么大???????

求解呀。







64脚实验.rar

3.65 MB, 下载次数: 94

Good?good?study,day?day?up.?立志成为牛人。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-31 15:36:02 | 显示全部楼层
回复【楼主位】fanyi:
---------------------------------
硬件仿真还能测试时间了?
在哪里看啊?我从来都无法硬件仿真查看时间...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-31 16:37:35 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
原子哥。我是这么设置的
在“Options for Target”选项卡中,选择“Debug”,然后,右边的“Use”选择框,选中,“Cortex M/R J-Link/J-Trace”项。
然后,用 J-Link 连接开发板,点击 调试 后,在左边的 寄存器 观察窗口中,看 运行时间。

这样,是不是错了啊?如果,错了,有其它办法测时间吗?
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-31 17:37:06 | 显示全部楼层
呵呵,看看delay_ms的说明,

//延时Nms
//注意Nms的范围
//Nms<=0xffffff*8/SYSCLK
//对72M条件下,Nms<=1864 
void delay_ms(u16 nms)
{        
...        
}   
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-31 17:39:55 | 显示全部楼层
delay_init 的参数是sysclk的频率,
也就是在Stm32_Clock_Init初始化完成后,delay_init的参数就无法改变了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-31 18:29:19 | 显示全部楼层
回复【5楼】Pony279:
---------------------------------
Nms 应该不会超过范围的,才 1000 ms 的延时啊。

你下面说的 Stm32_Clock_Init 是什么啊?不太理解,也查不到资料。

还有,硬件仿真,是不是不能查看运行时间啊?或者,说,误差很大?

请帮帮忙,解答一下,谢谢了。或者,QQ 联系也可以,我的号码:569303269. 
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-31 20:53:10 | 显示全部楼层
还是我自己解答了吧,果真不能硬件仿真,测量时间。误差,太大了,用 示波器 测量硬件的结果,和仿真的结果,就不在一个数量级,我当然相信, 示波器 了。仿真不可靠啊。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-31 21:30:16 | 显示全部楼层
呵呵,软件仿真时间还是比较准的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-31 22:47:59 | 显示全部楼层
软件仿真是准确的,

不好意思,我之前误解了你的意思,无视即可,

我刚才下载了你的代码软件仿真了一下,发现确实不准,
然后我用我的在主函数里工程做了同样的事情,仿真的结果是准确的。

对比后发现,原来你的程序里用了官方的 SystemInit函数,里面默认用PLL把系统时钟配置到了72M
看启动代码,你会发现在调用main函数之前会调用SystemInit函数

所以导致了延时不准,把system_stm32f10x.c里的SystemInit函数体注释掉即可。

我的工程里也在用官方给的那个文件,后来考虑到可能会干扰我原有的初始化函数,所以那个函数里的内容就被我注释掉了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-4-1 16:00:44 | 显示全部楼层
多谢 原子 哥,和,Pony279 兄的解答,我用了官方的 SystemInit函数后,系统时钟的确是 72 了,我调用延时函数初始化时,直接参数用 72 了,即,delay_init(72),延时,非常准确。

然后,发现,软件仿真 的确时间测量非常准确。硬件仿真,根本就不能测量时间,误差 几乎 达到 一个数量级了。

再次感谢楼上两位的回答。谢谢了。 
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 07:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表