打印

STM32不用定时器软件可以实现高精度的延时么?

[复制链接]
1640|12
手机看帖
扫描二维码
随时随地手机跟帖
沙发
叶覃| | 2016-8-15 11:54 | 只看该作者
不用定时器的话,只能用nop实现延时了。

使用特权

评论回复
板凳
huafei123| | 2016-8-17 16:19 | 只看该作者
叶覃 发表于 2016-8-15 11:54
不用定时器的话,只能用nop实现延时了。

这样的延时,会随着主频的改变而改变的,用的时候不方便。

使用特权

评论回复
地板
neomissing| | 2016-8-17 18:43 | 只看该作者
可以的,用调试模块延时

使用特权

评论回复
5
mdk55555| | 2016-8-18 17:28 | 只看该作者
精准的延时,需要用汇编加nop实现的。单独nop,容易被优化掉。

使用特权

评论回复
6
haokeer| | 2016-8-20 15:36 | 只看该作者
对于32位机,精确延时就不能再用数指令的方式了。太浪费资源了

使用特权

评论回复
7
xiaolong12| | 2016-8-20 16:30 | 只看该作者
给大家一个延迟程序,这个很精确
__asm  void IDelayLoop(INT32 count)
{

L1  subs    r0, r0, #6
    bgt     L1        
    BX      lr
}

void TimeSleepMicroSeconds( UINT32 uSec )
{
    uSec *= (SYSTEM_CYCLE_CLOCK_HZ / ONE_MHZ);
    int iterations = (int)uSec - 5;

    IDelayLoop(iterations);
}

使用特权

评论回复
8
yysforever| | 2016-8-22 09:29 | 只看该作者
精确和软件延时,本来就是相悖论的。不可以做到两者兼得

使用特权

评论回复
9
冰是睡着的冰| | 2016-8-22 22:20 | 只看该作者
要想精确,必须上硬件,只有硬件才可以保证一定的精度。

使用特权

评论回复
10
jouney316| | 2016-8-23 11:46 | 只看该作者
试试定时器,系统滴答定时器。不过这需要占用一定的外设资源

使用特权

评论回复
11
Dennis-Zhou| | 2016-8-23 13:39 | 只看该作者
一般延时,只会用在IO模拟时序的场合,这时候用到延时。在这个场合,精度就不是那么重要了。

使用特权

评论回复
12
dongbaohui| | 2016-8-24 14:29 | 只看该作者
可以试试以太网的网络对时,这样就不需要硬件的参与了。纯软件实现

使用特权

评论回复
13
MTCN2013|  楼主 | 2017-4-18 22:41 | 只看该作者
huafei123 发表于 2016-8-17 16:19
这样的延时,会随着主频的改变而改变的,用的时候不方便。

主频一般是确定的,nop是最准确的了。

使用特权

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

本版积分规则

28

主题

155

帖子

1

粉丝