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

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

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

举报

109个回答
天天晓宇 回答时间:2015-1-7 11:08:38
yceast 发表于 2015-1-7 11:07) M: G  Q* T( a: w
好帖子 支持
& s# a0 a- u0 ~: s# Q2 }
谢谢支持
天天晓宇 回答时间:2015-1-21 08:58:03
Dylan疾风闪电 发表于 2015-1-20 18:158 I7 n( V' A) s! n4 j
很有必要看以下RCC时钟树。了解下滴答器的时钟是怎么来的。
& I% s9 I' X2 m本不想说的,现在提一下。楼主可以通过至少以 ...
2 Q+ t2 \  N7 T  E- s( n6 t
我真是被你们搞无语了,看资料能不能看全一点,systick的时钟是可以配置的,没人说一定非要选系统时钟的8分频。 QQ截图20150121085110.jpg 看见没有,可选择上述时钟(HCLK/8)或者HCLK时钟作为作为systick时钟,看清楚好吧,这个截图上的话就在你截图的时钟树下面的说明里!不要以为看了一个原子的例子,就以为所有的都应该那样。还有你说的什么IO翻转,我都说了欢迎拿示波器对质,我没看过我跑来跟你说!欢迎继续质疑!
" \+ I% o/ y( G; |再贴一个M3权威指南里面的systick的配置寄存器' f0 y  p* M0 M6 N
QQ截图20150121085734.jpg ) i& a5 r/ W$ h  q  X

6 b( a1 y; M5 Y* n2 j
凡夫俗仔 回答时间:2017-9-21 09:26:18
此延时函数应该用宏替换来写,已获得更准确延时。9 K- K4 ]  b+ d, a" b) x
以us延时为例,函数调用比宏替换会多出0.25us左右。! w6 c' W% C6 H, z8 t8 V
8 r6 W" |5 B% p3 q8 U
以下是代码:
3 N: J7 r+ c. j; q8 ~4 ?/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */
$ g% C  {! D! P) B# y, P# H. l#define DELAY_US(nTime)  {SysTick->LOAD = 72    * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}0 o; Y! J! g; |
#define DELAY_MS(nTime)  {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}, M8 t& c  t3 y, |3 D+ ]' U
肖林翔 回答时间: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
不错,谢谢, r* {, X( c0 Q: w& s# S
天天晓宇 回答时间:2015-1-7 11:02:51

' Z; ~6 K# G$ b& z7 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
' D1 z. [: b0 d不错啊

8 s# O/ _, i) b2 c7 M# x喜欢就拿走
Tcreat 回答时间:2015-1-8 10:50:35
介个虽然自己一直在用 还是给顶下 哈哈
netlhx 回答时间:2015-1-8 10:54:29
不错,赞一个
kevin0129 回答时间:2015-1-8 11:01:03
怎么看都和原子的那个延时程序好像啊!

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版