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

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

[复制链接]
天天晓宇 发布时间:2015-1-7 10:11
本帖最后由 天天晓宇 于 2015-1-20 10:35 编辑
2 R0 a5 e% P' b  M% D6 S$ Z4 L8 r) c
在STM32的开发过程中,我们经常需要使用延时,很多时候在延时要求不是很严格的情况下,使用定时器又麻烦,很多人都是使用for循环(for(i=n; i>0; i--);)来实现的,这样的操作的确也太不准了,我看很多教程都是采用systick的方式,但是普遍采用了中断方式,这里我把我常用的两个函数分享给大家,也是采用systick,没有使用中断,直接使用寄存器操作的,复制可用,非常的方便,也无需多余的配置。 QQ截图20150107100809.jpg
1 e& H! |2 v6 g! F/ t我把工程也附上,希望帮到大家。把这两个函数直接复制过去,直接可用(我说的不清楚,我设置的系统时钟是72M,程序注释也有)。很多人对我的程序有质疑,说应该是9*nTime,说时钟是9M,还有就是说关闭定时器应该赋值给00,而不是04,欢迎拿示波器对质。欢迎对质!* W, S  I2 D8 ?; ^8 m1 ], d* r/ W
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:071 s) g9 S: n! f' y  ]1 q5 @* q4 z) a
好帖子 支持
; `1 F6 v+ @: A0 U7 b
谢谢支持
天天晓宇 回答时间:2015-1-21 08:58:03
Dylan疾风闪电 发表于 2015-1-20 18:15$ j: u* d6 T2 X+ h
很有必要看以下RCC时钟树。了解下滴答器的时钟是怎么来的。: b/ O0 I$ w5 R7 y
本不想说的,现在提一下。楼主可以通过至少以 ...

/ Z/ z! D  h, W1 b* t# @我真是被你们搞无语了,看资料能不能看全一点,systick的时钟是可以配置的,没人说一定非要选系统时钟的8分频。 QQ截图20150121085110.jpg 看见没有,可选择上述时钟(HCLK/8)或者HCLK时钟作为作为systick时钟,看清楚好吧,这个截图上的话就在你截图的时钟树下面的说明里!不要以为看了一个原子的例子,就以为所有的都应该那样。还有你说的什么IO翻转,我都说了欢迎拿示波器对质,我没看过我跑来跟你说!欢迎继续质疑!
' l5 m, q8 P& B8 {& \" y7 m" l" i再贴一个M3权威指南里面的systick的配置寄存器
: L5 Q2 z. Y- U; ? QQ截图20150121085734.jpg
5 ^( _  ~( K! ^8 c  U/ e# }2 X0 l6 [- L- V' ~& J
凡夫俗仔 回答时间:2017-9-21 09:26:18
此延时函数应该用宏替换来写,已获得更准确延时。% e3 B$ A. m2 J$ ?6 z/ c8 M( F5 x
以us延时为例,函数调用比宏替换会多出0.25us左右。6 A( B2 R; m% R" h3 c9 T

; S, L- {+ H; m以下是代码:6 |7 B, d7 H6 r( P1 T+ h# v
/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */0 d8 G' T( o. A2 Q
#define DELAY_US(nTime)  {SysTick->LOAD = 72    * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}2 V5 U5 t. J: O0 \  m
#define DELAY_MS(nTime)  {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}
9 Y0 q4 Y5 ~$ C: N
肖林翔 回答时间: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
不错,谢谢4 u7 ?9 ]4 F6 S; y* m8 L
天天晓宇 回答时间:2015-1-7 11:02:51

# h* v3 z% N& `7 W$ X7 g0 U; `是啊,这个使用起来也很方便
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
! ?2 }& |. `. V$ A+ v不错啊
, {. L( I6 m4 Q- E4 y
喜欢就拿走
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 手机版