请教:延时函数用软件仿真和实测值差异较大

2019-08-22 13:08发布

 就是一个简单的延时函数: void Delay_us(unsigned int t)
{
    unsigned int i;
    volatile unsigned int n;     for(i = 0; i < t; i++)
   {
      for(n = 0; n < 14; n++);
   }
}

void main(void)
{
    .....
    LED_ON; 
    Delay_us(1000);
    LED_OFF;
    ....
}

将工程选项中的Debug选择 use simulator,用软件仿真Delay_us函数,观察其运行时间(调试窗口左边的Internal中的sec可以看到已运行的时间),其结果为1027uS(Delay_us(1000),但我用示波器观察,波形的宽度却为1750uS,相差很大,请问可能是什么原因?以下原因已排查:
1、示波器没有问题,使用也没有问题(这型号示波器我用了快8年了)
2、LED_ON LED_OFF执行时间很短,就一条指令

我的单片机型号是:STM32F103R8,工程选项中选的也是这个型号,工程选项中的晶振为8M,实际也为8M,main函数之前的初始化代码已经系统内核频率设定为72MHZ,Debug中唯一的设置项:limit speed to real time也试过了,没有作用。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
lwtlwt
1楼-- · 2019-08-23 08:39
回复【7楼】正点原子:
---------------------------------
唉,这个差距不是一点半点啊.....这应该是MDK的又一不足,也可以没设置好吧,不过我全找过了,没有地方可设了。
有时间试试IAR,有结果了再告诉大家。谢谢了!
lwtlwt
2楼-- · 2019-08-23 09:12
 精彩回答 2  元偷偷看……
sinbingzoo
3楼-- · 2019-08-23 11:08
这个问题是不是由于IO口翻转的延时或者是测试仪器的问题导致的时间不同?
飞飞蓝鸟
4楼-- · 2019-08-23 14:53
这位问题没有人关注了吗?
飞飞蓝鸟
5楼-- · 2019-08-23 19:28
我尝试了一下1s的延时,仿真里出来是7s多延时,而且改里面的晶振频率对这个时间没有影响
飞飞蓝鸟
6楼-- · 2019-08-24 00:35
我选择了use simulator后,时间是对的。但我用st-link进行硬件仿真,为什么时间就不对呢?

一周热门 更多>