打印
[应用相关]

给一个精确延迟

[复制链接]
1332|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 | 只看该作者
不反对,不鼓励

使用特权

评论回复
5
xlsbz| | 2014-9-27 18:26 | 只看该作者
zhonggx 发表于 2014-9-27 17:17
这个……我不发表评论。

资深技术员  你搞个汇编我看看。明明汇编功力不行。
你的方法不就是STM官方库的弄法呢。换汤不换药而已

使用特权

评论回复
6
zhonggx| | 2014-9-27 19:11 | 只看该作者
xlsbz 发表于 2014-9-27 18:26
资深技术员  你搞个汇编我看看。明明汇编功力不行。
你的方法不就是STM官方库的弄法呢。换汤不换药而已 ...

白痴!

使用特权

评论回复
7
xlsbz| | 2014-9-27 19:14 | 只看该作者
zhonggx 发表于 2014-9-27 19:11
白痴!

小痴

使用特权

评论回复
8
wangzhihai1986| | 2014-9-27 20:30 | 只看该作者
靠软件实现精确延时不太可能,系统运行后各种打断的问题,不同延时时间也是有影响的。还是用定时器吧,ST的定时器很牛B。

使用特权

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

本版积分规则

18

主题

55

帖子

0

粉丝