[应用相关] 给一个精确延迟

[复制链接]
1654|7
 楼主| yoyofair 发表于 2014-9-27 12:08 | 显示全部楼层 |阅读模式
一个精确延迟,通过计算每条指令的周期来得到的延时,STM32F107上用示波器测试过,误差应该不会超过
10个周期。
/***************************************************************
根据Cortex-M3的技术参考手册关于的指令周期的说明,
subs r0,r0,#4 这个4就可以了,但是在STM32F107中只有在RAM中运行才是正确的
在FLASH中运行,FLASH取指延迟加大了指令周期,经测试需要减去6对
****************************************************************/

__asm  void IDelayLoop(INT32 count)
{

L1  subs    r0, r0, #6          ;; 1 周期
    bgt     L1          ;; 3 周期跳转1周期不跳转
    BX      lr              ;; 3周期
}
   
void TimeSleepMicroSeconds( UINT32 uSec )
{
    uSec *= (SYSTEM_CYCLE_CLOCK_HZ / ONE_MHZ);
    int iterations = (int)uSec - 5;

    IDelayLoop(iterations);
}
xlsbz 发表于 2014-9-27 14:58 | 显示全部楼层
哥们  靠测试不行。得有理论才靠谱。如果你批量项目。还是考虑考虑。
zhonggx 发表于 2014-9-27 17:17 | 显示全部楼层
这个……我不发表评论。
bear1 发表于 2014-9-27 17:23 来自手机 | 显示全部楼层
不反对,不鼓励
xlsbz 发表于 2014-9-27 18:26 | 显示全部楼层
zhonggx 发表于 2014-9-27 17:17
这个……我不发表评论。

资深技术员  你搞个汇编我看看。明明汇编功力不行。
你的方法不就是STM官方库的弄法呢。换汤不换药而已
zhonggx 发表于 2014-9-27 19:11 | 显示全部楼层
xlsbz 发表于 2014-9-27 18:26
资深技术员  你搞个汇编我看看。明明汇编功力不行。
你的方法不就是STM官方库的弄法呢。换汤不换药而已 ...

白痴!
xlsbz 发表于 2014-9-27 19:14 | 显示全部楼层
zhonggx 发表于 2014-9-27 19:11
白痴!

小痴
wangzhihai1986 发表于 2014-9-27 20:30 | 显示全部楼层
靠软件实现精确延时不太可能,系统运行后各种打断的问题,不同延时时间也是有影响的。还是用定时器吧,ST的定时器很牛B。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

55

帖子

0

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