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

【经验分享】STM32F103:精准延时delay——SysTick使用

[复制链接]
STMCU小助手 发布时间:2022-5-3 22:39
一、SysTick使用详解
; }3 {. T* e+ d3 D8 f% a1. SysTick简介

0 }$ ^% V$ v% L: |+ @' ?! YSysTick是一个24bit的倒计数定时器,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都有一个SysTick定时器,从而获得一定的时间间隔。
- b" h4 l/ Z% P6 i+ j% A& b" m
2 y% [3 s7 L) B' u3 o2. SysTick相关寄存器
: j1 R/ \0 \+ i. s1 p7 J状态寄存器-CTRL8 Z  Q" X& w/ J: A0 a" Q
STCLK外部时钟源:AHB总线时钟的 1/8
. @+ v# m) x; N( [8 A9 b; H6 IFCLK 内部时钟:AHB总线时钟——STM32F103是72MHz
' |6 F; x# L- D! `/ \" o5 q: J5 P7 s; u" I% W8 l8 b9 ^9 A
W9~K}MPHQQJSLVFBDPWT3Q8.png
8 r+ ]- m! ~( u0 ?. L. s* h  U8 D3 U
重装载数值寄存器-LOAD
; v8 |! v+ z$ h$ d" K$ L
  _5 n+ ~8 P+ j0 ~1 d
012NMW26[2_~_U1[O%($X[C.png & e8 x- U" U) ^1 r' [

5 K( L% ]- u  c1 i2 L当前值寄存器-VAL  {5 Q; Q! W4 e, T8 b" b+ W3 D6 o

  P, q' W7 y% x7 e  S: {
]2C4LF`W9K[Z`O~I$_)3IOK.png 5 o2 z( s' b) ^- ]: G

0 H, a+ w8 \; q( z校准寄存器-CALIB
' V" Q" y, {" }1 w" w
" j  ^! G9 ^+ N3 h, I5 _
2CYM~SK%CO7WZQ814Q0O(HN.png
% b: [% I, X; U. i7 |9 u! y, Q; W' S5 k: P) V8 U8 Z
二、编写精准延时——delay
* V" s+ W8 T& w8 H! F8 J
delay.h
6 }, U! `% B0 ^2 T3 a7 l
  1. #ifndef __DELAY_H# O' P  D; c+ ~  x* C
  2. #define __DELAY_H                           
    9 e+ v. o, `6 }& v* \
  3. #include "stm32f10x.h"& U' Y" X8 I% O& R6 P
  4. + D* S; i: b; P; L+ g$ O; I
  5. void delay_us(u16 us);
    $ M& S% ?7 f9 O
  6. void delay_ms(u16 ms);1 B' V' c. G, u6 `  r4 w* G" w
  7. void delay_s(u16 s);
    ) r/ i' V6 o- R! h. z
  8. 8 |1 \$ X3 A9 ]
  9. #endif
复制代码
# X7 V# D: |0 g
delay.c
8 b# p0 \$ n% o# V& ]. `+ k
  1. #include "delay.h"
    + w/ y% Z) m% [  k

  2. ; ?" ?/ W1 y+ }- P, q3 |8 _2 [! ]
  3. #define AHB_INPUT  72  //请按RCC中设置的AHB时钟频率填写到这里(单位MHz)( ?# U& c; @. I$ ~' e( B
  4. 2 k! X8 s5 n' Q1 Y

  5. 8 P7 [7 P' c7 v: b: S. k
  6. void delay_us(u16 us)        //uS微秒级延时程序(参考值即是延时数,72MHz时最大值233015)        
    ' J/ G" {# [2 V) m; t4 S
  7. {
    ( }# m2 [/ E/ [- Y3 {7 V
  8.         u32 temp;6 G2 Y. [% H/ @! U
  9.         SysTick->LOAD=AHB_INPUT*us;              //重装计数初值(当主频是72MHz,72次为1微秒)* w8 ]  k5 a1 Y5 n" _8 a( c- r
  10.         SysTick->VAL=0x00;                                //清空定时器的计数器
    + M- ]7 N& r: [) T
  11.         SysTick->CTRL=0x00000005;                        //时钟源HCLK,打开定时器, F) ~: i2 U/ h6 r3 d, Q
  12.         do
      L% J# E/ q0 Y2 C! t+ R- L) c
  13.         {8 T, ]+ D1 ]( d/ e* V( ?
  14.                 temp=SysTick->CTRL;2 Q, r. J' o. _! i
  15.         }
    ! L/ Z$ V: y: o, n5 T# R  u: f- |
  16.         while(temp&0x01&&!(temp&(1<<16)));                //等待时间到达  
    2 k, m% h8 r2 U
  17.         SysTick->CTRL=0x00000004;                                //关闭定时器' y2 O+ G- t4 s: J
  18.         SysTick->VAL=0x00;                                        //清空定时器的计数器. L; y& x1 j+ J# c+ g+ z3 e6 r  ]
  19. }0 O% @; s- n, l& o! V+ B3 q4 `
  20. : D+ ]( P  T1 `3 ~7 b2 ^
  21. void delay_ms(u16 ms)        //mS毫秒级延时程序(参考值即是延时数,最大值65535)
    % ]& G* T& y; P  |
  22. {                                        \; j. H2 H9 r7 l# W5 c" f
  23.         while( ms-- != 0)
    ; b' [6 D) l/ m# g* r  n
  24.         {3 J4 d# J! e0 C+ r* j; ?
  25.                 delay_us(1000);        //调用1000微秒的延时( A+ q7 r: N8 h! O+ C* f" p' \
  26.         }
    7 z% P; O% S" X7 a" F& X: z
  27. }, Z) q; _! W% Q; G6 H: ?( y

  28. 7 l/ L1 n6 c' i/ V2 a( i* s' p) N
  29. void delay_s(u16 s)        //S秒级延时程序(参考值即是延时数,最大值65535)0 L8 @. ]& Q' C! S. ?7 z
  30. {                                      
    * q1 g9 e# \& D) t
  31.         while( s-- != 0)
    7 o+ n# ^) S7 u. B
  32.         {
    & R, F5 Z- ]7 A! K9 h0 ~
  33.                 delay_ms(1000);        //调用1000毫秒的延时" `4 ~$ E) _1 J2 V2 L6 m
  34.         }: g" h! D: V+ b. l& q
  35. }
复制代码

9 G& X7 N# Y8 H/ r& i5 V
& q% k+ ?6 p) s0 B- X  S/ `8 G
5 S; {5 `& r1 m7 q& }7 C) J  s
收藏 评论0 发布时间:2022-5-3 22:39

举报

0个回答

所属标签

相似分享

官网相关资源

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