你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32中实用的精确延时方法  

[复制链接]
天天晓宇 发布时间:2015-1-7 10:11
本帖最后由 天天晓宇 于 2015-1-20 10:35 编辑
3 J- _2 b" I8 k3 |3 l0 N$ ~% N
8 F$ n3 D. f7 C; S在STM32的开发过程中,我们经常需要使用延时,很多时候在延时要求不是很严格的情况下,使用定时器又麻烦,很多人都是使用for循环(for(i=n; i>0; i--);)来实现的,这样的操作的确也太不准了,我看很多教程都是采用systick的方式,但是普遍采用了中断方式,这里我把我常用的两个函数分享给大家,也是采用systick,没有使用中断,直接使用寄存器操作的,复制可用,非常的方便,也无需多余的配置。 QQ截图20150107100809.jpg ' b/ E" N6 |) h1 {) T
我把工程也附上,希望帮到大家。把这两个函数直接复制过去,直接可用(我说的不清楚,我设置的系统时钟是72M,程序注释也有)。很多人对我的程序有质疑,说应该是9*nTime,说时钟是9M,还有就是说关闭定时器应该赋值给00,而不是04,欢迎拿示波器对质。欢迎对质!
, P/ `. t: l. d LED(Systick(非中断方式)精确定时闪烁).zip (905.79 KB, 下载次数: 905)
收藏 18 评论109 发布时间:2015-1-7 10:11

举报

109个回答
天天晓宇 回答时间:2015-1-7 11:08:38
yceast 发表于 2015-1-7 11:07
# O3 f2 L7 V. ~+ i0 ^好帖子 支持
/ G. z6 o2 U' V6 Z( ]) p; e
谢谢支持
天天晓宇 回答时间:2015-1-21 08:58:03
Dylan疾风闪电 发表于 2015-1-20 18:15  n9 }/ Z: l3 I/ g' H9 A
很有必要看以下RCC时钟树。了解下滴答器的时钟是怎么来的。; w2 }, ]; \( p0 k5 h1 Q5 V
本不想说的,现在提一下。楼主可以通过至少以 ...
+ ^5 T. s- A4 N8 r3 n
我真是被你们搞无语了,看资料能不能看全一点,systick的时钟是可以配置的,没人说一定非要选系统时钟的8分频。 QQ截图20150121085110.jpg 看见没有,可选择上述时钟(HCLK/8)或者HCLK时钟作为作为systick时钟,看清楚好吧,这个截图上的话就在你截图的时钟树下面的说明里!不要以为看了一个原子的例子,就以为所有的都应该那样。还有你说的什么IO翻转,我都说了欢迎拿示波器对质,我没看过我跑来跟你说!欢迎继续质疑!9 P* ^+ _9 J3 A) N8 ]! ?8 C7 W/ R
再贴一个M3权威指南里面的systick的配置寄存器
4 p; O1 X; n1 G2 [/ I; _ QQ截图20150121085734.jpg : ]" f/ E# L5 Q- ~5 z

) t) B% c4 u- j' n
凡夫俗仔 回答时间:2017-9-21 09:26:18
此延时函数应该用宏替换来写,已获得更准确延时。
# W0 f. x' f; h4 n2 `. b+ C4 f以us延时为例,函数调用比宏替换会多出0.25us左右。, A+ u. v: J0 `% r
- j0 @7 u+ Q0 n+ [7 s! Z. ^( p
以下是代码:
3 u3 s) k/ D2 D8 r/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */$ U5 J8 z5 R7 V/ M! j3 J) L
#define DELAY_US(nTime)  {SysTick->LOAD = 72    * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}
9 {( D. X& G$ [: O#define DELAY_MS(nTime)  {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}
( W0 H. w; v, @: @3 M4 q: D! r
肖林翔 回答时间:2015-1-7 10:16:30
zhichi!!!!
aaa999kk 回答时间:2015-1-7 10:19:39
谢谢分享
zuozhongkai 回答时间:2015-1-7 10:19:46
不粗,顶一下
blueskyds 回答时间:2015-1-7 10:36:24
9.jpg
Robot@HCS 回答时间:2015-1-7 10:43:10
顶一个!!!!
蓝调生活 回答时间:2015-1-7 10:43:55
不错,谢谢. w1 ?6 Z3 k( C5 c& F
天天晓宇 回答时间:2015-1-7 11:02:51
# L- ~" d. g$ F5 [
是啊,这个使用起来也很方便
yceast 回答时间:2015-1-7 11:07:33
好帖子 支持
lkl0305 回答时间:2015-1-7 11:18:03
不错啊
天天晓宇 回答时间:2015-1-7 11:33:06
lkl0305 发表于 2015-1-7 11:18
$ N  n  a) r. W! X1 x不错啊

8 Y& y: x- e, p( I+ R2 z5 _5 E喜欢就拿走
Tcreat 回答时间:2015-1-8 10:50:35
介个虽然自己一直在用 还是给顶下 哈哈
netlhx 回答时间:2015-1-8 10:54:29
不错,赞一个
kevin0129 回答时间:2015-1-8 11:01:03
怎么看都和原子的那个延时程序好像啊!

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版