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

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

[复制链接]
天天晓宇 发布时间:2015-1-7 10:11
阅读主题, 点击返回1楼
收藏 18 评论109 发布时间:2015-1-7 10:11
109个回答
easd 回答时间:2015-5-1 15:11:40
谢谢分享
JackieLaura 回答时间:2015-7-22 15:27:18
Dylan疾风闪电 发表于 2015-1-19 12:59$ t9 d7 S  I- j8 W  h9 \9 b! E! z
貌似72MHz时1us的计数值是9./ ~% |4 R( b, F: S  k& }; u
//(nus*HCLK/8)&0x00FFFFFF; 9 a8 s+ A- V4 H- G
SysTick->LOAD = ((nus*HCLK)&0x07FFFFF8)>>3;

) A" ~  T# E+ U" o' `5 \6 |systick时钟默认1/8分频了
JackieLaura 回答时间:2015-7-22 15:30:06
ataudio 发表于 2015-3-9 20:29
1 g% k( |. R) W: F% x# a; B( r, s) @0 |我在F407上使用此函数延时,函数设置为:
' w; H( v- M, Fvoid Delay_us(__IO uint32_t nTime): I: H+ Z4 q5 @& O
{
0 |; e: N! p* i+ O/ @6 G
load值从0开始计数,给load赋值需要减一。。
道胜天下 回答时间:2016-11-26 13:33:15
9 u1 d: }2 f; x7 U
  while (1)! b  b+ l8 t7 y+ H  q
  {
0 U  e. u1 A# k6 F" u- Z8 I                GPIO_SetBits(GPIOC, GPIO_Pin_15);) Y" r3 w* W$ C# `" Z
                Delay_us(200);
6 F4 c! H  X1 G1 \: x' T                GPIO_ResetBits(GPIOC, GPIO_Pin_15);5 W! |" q/ |8 d) d, k
                Delay_us(400);/ W' I1 U: m- g$ g+ W; j" }
  }
0 }( V. c5 i" m4 T' N4 N楼主我问一下这个用示波器看的时候高低电平是1:2的关系吗?
道胜天下 回答时间:2016-11-26 14:02:42
楼主你在us延时里第一行加上SysTick->VAL = 0x00;看看这下高低电平比是不是1:2啦。1 _8 |1 h% t. k; k+ a7 Y. U
void Delay_us(uint32_t nTime)2 J  L, r3 y6 N% O3 Z
{4 U9 E0 J# a, F' O' T* u6 ?' z
        SysTick->VAL = 0x00;$ `$ p: R# l$ @: ^
        SysTick->LOAD = 72*nTime;
  L- w: N5 H0 @0 e        SysTick->CTRL = 0x00000005;( ]9 o0 D: ~+ m& s& l* e7 c, Q
        while(!(SysTick->CTRL&0x00010000));
% q2 X" h  p' M: _        SysTick->CTRL = 0x00000004;
( c! F5 o8 w9 e% @}2 [4 R$ f1 [0 s! w" c
zbber 回答时间:2016-11-26 16:07:54
谢谢分享,谢谢分享 赞一个6 b2 E) i/ h! G* \6 @( |8 X
在路上11111111 回答时间:2016-11-26 16:08:55
楼主弱弱的问一下,为什么是while(SysTick->CTRL&0x00010000));呢
watershade 回答时间:2016-11-26 21:49:28
收藏之,回头测试一下
冬天下雪 回答时间:2017-8-14 15:33:46
楼主你好,辛苦了,有个外行的问题请教一下昂,Delay_us()中我知道是很准确的,但是在Delay_ms()中,这里是个for循环,这不还是递减吗,这样准确吗
林光光 回答时间:2017-8-14 15:55:22
其实吧,使用了操作系统,SYSTICK就被RTOS使用了,在其他的功能实现中又要用到延迟,这怎么解决呢
good 回答时间:2017-8-20 07:13:33
试过了,很好用,多谢分享!
epochal 回答时间:2017-8-20 07:56:12
不错,谢谢分享!
凡夫俗仔 回答时间:2017-9-21 09:26:18
此延时函数应该用宏替换来写,已获得更准确延时。, j$ B/ C, O1 c# R6 Z6 q
以us延时为例,函数调用比宏替换会多出0.25us左右。
' p4 j6 j, X2 ]& `& C# w) W9 x  H; D! _$ p3 Y
以下是代码:
- j) T; n8 V6 u/* DELAY如果用函数来写,因为函数调用会有额外的花销,以1us延时测试,测得会多出0.25us左右,故采用宏替换已获得更准的延时 */
6 q* n1 x4 Y6 z9 h. A- y* }#define DELAY_US(nTime)  {SysTick->LOAD = 72    * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}" u, |. i3 x( N( o6 P+ s# q: Z
#define DELAY_MS(nTime)  {SysTick->LOAD = 72000 * nTime; SysTick->CTRL = 0x00000005; while(!(SysTick->CTRL & 0x00010000)); SysTick->CTRL = 0x00000004;}; T9 d# L0 c9 \1 i  i5 ?
longrenwenzi 回答时间:2018-2-23 10:43:36
seven2016 回答时间:2018-2-23 19:11:21
不错,顶一下

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版