[STM32F1] 在stm32上做一个10us的延时函数,怎么实现比较好?

[复制链接]
6402|21
 楼主| bear1 发表于 2014-9-24 11:18 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 bear1 于 2014-9-24 11:26 编辑

要求:  
1,不用系统滴答定时器
2,尽量简单的实现。
3,同时避免汇编。

谢谢!
想做大牛的小马 发表于 2014-9-24 11:28 | 显示全部楼层
官方例程都是用systick做的~
 楼主| bear1 发表于 2014-9-24 11:32 | 显示全部楼层
想做大牛的小马 发表于 2014-9-24 11:28
官方例程都是用systick做的~

系统滴答定时器主要作用就是做us延时吗?还有其他用处吗?

谢谢!
 楼主| bear1 发表于 2014-9-24 11:36 | 显示全部楼层
单独用一个定时器实现,总总感觉有点浪费。
diweo 发表于 2014-9-24 12:51 | 显示全部楼层
以 STM32F103VCT6为例,有高级定时器下x2 + 通用定时器x4 + 普通定时器x2;
以 STM30F030F4P6为例,有高级定时器下x1 + 通用定时器x4;
这么多定时器你项目里都用得掉?
该用的时候不用才是浪费。
想做大牛的小马 发表于 2014-9-24 13:25 | 显示全部楼层
bear1 发表于 2014-9-24 11:32
系统滴答定时器主要作用就是做us延时吗?还有其他用处吗?

谢谢!

os调度可以用~当timer随你怎么用啊。。。
 楼主| bear1 发表于 2014-9-24 13:37 | 显示全部楼层
diweo 发表于 2014-9-24 12:51
以 STM32F103VCT6为例,有高级定时器下x2 + 通用定时器x4 + 普通定时器x2;
以 STM30F030F4P6为例,有高级 ...

用定时器的话,10us进一次中断是不是有点过于频繁?
songchenping 发表于 2014-9-24 13:44 | 显示全部楼层
nop 空操作啊。
diweo 发表于 2014-9-24 15:10 | 显示全部楼层
bear1 发表于 2014-9-24 13:37
用定时器的话,10us进一次中断是不是有点过于频繁?

如果没有更好的实现办法,那么只能频繁一点。
总得先把功能实现出来再慢慢改进吧。
ticomi 发表于 2014-9-24 15:41 | 显示全部楼层
精确定时、延时,也只有定时器比较好!!那么多的定时器,为什么不使用呢?很奇怪!!
 楼主| bear1 发表于 2014-9-24 16:45 | 显示全部楼层
songchenping 发表于 2014-9-24 13:44
nop 空操作啊。

nop在IAR环境下用c语言怎么实现?
sxhhhjicbb 发表于 2014-9-24 16:46 | 显示全部楼层
10us,主频如果是36M的,也就360年指令,要确确定时,只能是汇编跑空指令。
不要求很精确的话,一般的定时器,坐等定时到。
lichuanfa 发表于 2014-9-24 17:14 | 显示全部楼层
定时器不可开启中断,类似于延时函数
dongranmengming 发表于 2014-9-24 18:37 来自手机 | 显示全部楼层
楼上说的,定时器不开中断一直查询,或者空指令延时
songchenping 发表于 2014-9-24 18:47 | 显示全部楼层
bear1 发表于 2014-9-24 16:45
nop在IAR环境下用c语言怎么实现?

void Delayus(uint n)
{
   for(;n>0;n--)
   {
      _nop_();_nop_();_nop_();_nop_();_nop_();
      _nop_();_nop_();_nop_();_nop_();_nop_();
   }
}
mmuuss586 发表于 2014-9-24 21:16 来自手机 | 显示全部楼层
不用定时器那只能用软件延时了
 楼主| bear1 发表于 2014-9-24 21:42 来自手机 | 显示全部楼层
本帖最后由 bear1 于 2014-9-24 21:43 编辑
songchenping 发表于 2014-9-24 18:47
void Delayus(uint n)
{
   for(;n>0;n--)


在IAR下编译不能通过,奇怪。
似乎 _nop_() 有点问题。
ybluleezp 发表于 2014-9-24 23:34 来自手机 | 显示全部楼层
。。。。。。。。
eydj2008 发表于 2014-9-25 09:28 | 显示全部楼层
搞不明白几个NOP的事情! 还来问! 但有一个问题是只能大于10US 这10US里面还有可能有其它中断。
lmluomin 发表于 2014-9-25 09:41 | 显示全部楼层
原来在STM32下实现一个延时这么难办。
在英飞凌的XMC4k/1k下,一共有1个32位的系统定时器,多至16个16位定时器。
同时针对你们说的1us定时的功能,有个校准计时器,每次写入后可以产生最大1us左右的延时,设定好值,只要软件不断polling就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

970

帖子

2

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