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

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

[复制链接]
天天晓宇 发布时间:2015-1-7 10:11
本帖最后由 天天晓宇 于 2015-1-20 10:35 编辑
8 e  h) K* H; g- E$ x  X5 \, J3 k& q* R7 b" I+ E  l, k' L' p% w3 S
在STM32的开发过程中,我们经常需要使用延时,很多时候在延时要求不是很严格的情况下,使用定时器又麻烦,很多人都是使用for循环(for(i=n; i>0; i--);)来实现的,这样的操作的确也太不准了,我看很多教程都是采用systick的方式,但是普遍采用了中断方式,这里我把我常用的两个函数分享给大家,也是采用systick,没有使用中断,直接使用寄存器操作的,复制可用,非常的方便,也无需多余的配置。 QQ截图20150107100809.jpg 8 i0 p5 q% W! q( _6 i' K; [
我把工程也附上,希望帮到大家。把这两个函数直接复制过去,直接可用(我说的不清楚,我设置的系统时钟是72M,程序注释也有)。很多人对我的程序有质疑,说应该是9*nTime,说时钟是9M,还有就是说关闭定时器应该赋值给00,而不是04,欢迎拿示波器对质。欢迎对质!
# u0 d9 Q+ X/ J2 M 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# h9 K: h+ \) m& e# b* e% A
好帖子 支持
3 }% }* d4 B& Q, {7 B7 y
谢谢支持
天天晓宇 回答时间:2015-1-21 08:58:03
Dylan疾风闪电 发表于 2015-1-20 18:15
) t; h# G3 L9 w' f" i5 @- ?很有必要看以下RCC时钟树。了解下滴答器的时钟是怎么来的。
8 k% f( Y& \% Q; m2 \( t本不想说的,现在提一下。楼主可以通过至少以 ...

; c& T" h# `* L9 n! _  x6 q我真是被你们搞无语了,看资料能不能看全一点,systick的时钟是可以配置的,没人说一定非要选系统时钟的8分频。 QQ截图20150121085110.jpg 看见没有,可选择上述时钟(HCLK/8)或者HCLK时钟作为作为systick时钟,看清楚好吧,这个截图上的话就在你截图的时钟树下面的说明里!不要以为看了一个原子的例子,就以为所有的都应该那样。还有你说的什么IO翻转,我都说了欢迎拿示波器对质,我没看过我跑来跟你说!欢迎继续质疑!
8 X' E0 i+ I5 v$ Y5 B8 m再贴一个M3权威指南里面的systick的配置寄存器
2 R' U/ [6 T+ Q QQ截图20150121085734.jpg 8 p# ~. D" b- n# F& W, E4 F# w

4 B3 v& b7 n3 {1 w: P
凡夫俗仔 回答时间:2017-9-21 09:26:18
此延时函数应该用宏替换来写,已获得更准确延时。6 F0 v- r" }( ?
以us延时为例,函数调用比宏替换会多出0.25us左右。( ?8 }' G' S$ L* M
  t- B$ \; a3 K  v  Q/ f6 w: s
以下是代码:# s% A% T  E9 ^" M
/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */7 o+ o2 Z; r  H+ j
#define DELAY_US(nTime)  {SysTick->LOAD = 72    * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}/ {) N( p* M% c6 c
#define DELAY_MS(nTime)  {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}
8 w; L4 ^1 }# \
肖林翔 回答时间: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 I! a% |0 R+ ~3 i, u. l
天天晓宇 回答时间:2015-1-7 11:02:51

( v( i* d2 `7 A) L, 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- Q6 I/ w+ G! X/ D& Z7 I! ?
不错啊
, t9 z1 S; |7 O
喜欢就拿走
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 手机版