请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
天天晓宇 发布时间:2015-1-7 10:11
本帖最后由 天天晓宇 于 2015-1-20 10:35 编辑 4 p2 y0 [9 M2 {- Z" i0 M
' q/ d/ U/ K1 c+ h& Z3 f' c; A, j6 b- u
在STM32的开发过程中,我们经常需要使用延时,很多时候在延时要求不是很严格的情况下,使用定时器又麻烦,很多人都是使用for循环(for(i=n; i>0; i--);)来实现的,这样的操作的确也太不准了,我看很多教程都是采用systick的方式,但是普遍采用了中断方式,这里我把我常用的两个函数分享给大家,也是采用systick,没有使用中断,直接使用寄存器操作的,复制可用,非常的方便,也无需多余的配置。 QQ截图20150107100809.jpg * h2 ]- u5 I- n  J! S1 C* F- ]
我把工程也附上,希望帮到大家。把这两个函数直接复制过去,直接可用(我说的不清楚,我设置的系统时钟是72M,程序注释也有)。很多人对我的程序有质疑,说应该是9*nTime,说时钟是9M,还有就是说关闭定时器应该赋值给00,而不是04,欢迎拿示波器对质。欢迎对质!
/ x$ a. N4 @$ t 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:070 A2 X6 }. e7 U7 F6 X* G; l
好帖子 支持

. E  L/ j' g& Q( P1 S谢谢支持
天天晓宇 回答时间:2015-1-21 08:58:03
Dylan疾风闪电 发表于 2015-1-20 18:15' e7 r0 V% b7 e0 ^& J4 @
很有必要看以下RCC时钟树。了解下滴答器的时钟是怎么来的。& V! g) ]0 T* B8 `6 t
本不想说的,现在提一下。楼主可以通过至少以 ...
3 q8 Q) I2 P& t8 d2 C. Y
我真是被你们搞无语了,看资料能不能看全一点,systick的时钟是可以配置的,没人说一定非要选系统时钟的8分频。 QQ截图20150121085110.jpg 看见没有,可选择上述时钟(HCLK/8)或者HCLK时钟作为作为systick时钟,看清楚好吧,这个截图上的话就在你截图的时钟树下面的说明里!不要以为看了一个原子的例子,就以为所有的都应该那样。还有你说的什么IO翻转,我都说了欢迎拿示波器对质,我没看过我跑来跟你说!欢迎继续质疑!# Y! Z, ]7 P" B) X
再贴一个M3权威指南里面的systick的配置寄存器  `/ f7 {; ]4 T7 N6 s! K( u5 g
QQ截图20150121085734.jpg
+ l4 Q* C& m1 K( O3 u
5 c  t1 c, I$ }, j0 ?( F
凡夫俗仔 回答时间:2017-9-21 09:26:18
此延时函数应该用宏替换来写,已获得更准确延时。6 A0 T" k' \0 R" H
以us延时为例,函数调用比宏替换会多出0.25us左右。
; @1 C. d6 T% Q8 P
& l1 d. B) ~% P7 L4 o4 v5 N以下是代码:
( M! N& e  s, g) W3 y, ~& R8 s/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */" a! ^" r) K. Y7 Q
#define DELAY_US(nTime)  {SysTick->LOAD = 72    * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}2 U4 U& J- a9 k, T6 G, K% p+ H
#define DELAY_MS(nTime)  {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}1 j5 K* U# T) M3 ]+ `
肖林翔 回答时间: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
不错,谢谢! t. Y+ \; ^/ H1 d& q8 N2 ?/ V* m
天天晓宇 回答时间:2015-1-7 11:02:51
9 {/ G6 j4 V7 L1 i
是啊,这个使用起来也很方便
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
: n1 d0 b8 W9 C; @) Q不错啊

* W6 M  E& N3 k; X) b% r$ c喜欢就拿走
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 手机版