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

小白对SysTick的理解

[复制链接]
在路上11111111 发布时间:2016-11-27 15:58
  1. #include "stm32f10x.h"
    6 g9 }8 b' i& l2 G
  2. static __IO u32 Timing;, U1 w8 x  ^' T
  3. void LED_Init()6 ]0 G, o2 c2 R+ S
  4. {+ N; L& i5 Y7 q- Q4 A( N1 t
  5.     GPIO_InitTypeDef   GPIO_InitStructure;3 v; y) j, W& n" [7 W/ H  [7 W
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
    ' q7 E8 D6 _* B) S

  7. " p$ M$ _+ k: j6 {% G3 T& r" q
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    7 X, a0 ?+ |' M) X, `
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;4 V; _0 i/ d  x+ t, o* b
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ' j% G& Y2 K9 m2 F
  11.         GPIO_Init(GPIOD,&GPIO_InitStructure);
    ; h3 P3 k! ^8 S6 q
  12.         GPIOD->BSRR = GPIO_Pin_2;
    2 ]. a6 Y; s& U' {
  13. }
    1 v6 q% ~; d$ @' v
  14. 6 g0 ~; u1 I2 E1 X0 t* |2 [+ A7 p
  15. /************寄存器版的SysTick******(缺点是while(!(SysTick->CTRL & =0X00010000));; t* E, Y- Q; h* P* z  i- r
  16.              在这个时候会浪费CPU*6 ]6 ~6 E+ ~% v9 C
  17. void Delay_Us(uint32_t nTime)
    7 L: n- i9 S$ K! X
  18. {
    . J) }1 a# M/ O( {0 Q, m
  19.    SysTick->LOAD = 72*nTime;//装入定时的次数
    ! n; m5 f4 k+ L0 ]4 \( i  W
  20.    *****    LOAD        重装值寄存器        就是当计数到0的说时候,再次从该数值进行倒计时& N- c, o& G7 }2 u- j% i
  21.          ****0 n8 M& A; O1 g( h, g
  22.    SysTick->CTRL = 5;//       CTRL是控制和状态寄存器      
    3 f% X. e- G5 E( u% `& v
  23.    ***   16    COUNTFLAG   当计数满的时候自动置为1
    & {3 M% g, A. [5 ~
  24.               2 S) ^0 L0 I! s* ]+ v5 }
  25.           2     CLKSOURCE   当该位是0的时候选择的是72M的时钟- n' p5 d. T, |: E) R
  26.                                     当该位是1的时候选择的是9M的时钟
      m  r0 B& n7 F5 |
  27.                   1     SysTick     当该位是0的时候计数到0的时候不会发送异常处理的标志
    6 w# n. m8 G0 K5 c! m
  28.                                     当该位是1的时候计数到1的时候会发送异常处理的标志
    8 q. U( z0 y  d9 r
  29.                   0     ENABLE      (使能位)当该位为0的时候SysTick不会打开
    + s6 j0 H' f7 ]6 |& Z' y
  30.                                     当该位为1的时候打开SysTick;! B. G7 T9 W7 g) q3 a5 w: d5 E
  31.   ************     
    . f) L6 ?9 ~' W3 Q
  32.    while(!(SysTick->CTRL&0x00010000));
    3 V5 Q  _* ]" }- F3 r& n
  33.    SysTick->CTRL = 0;
    , T( _# R- Y% [8 H
  34. }*/( W# p3 R) l. |0 E: p5 l! f

  35. , W7 D# H2 c, j7 t) z
  36. void SysTick_Handler()3 ?5 h5 e9 K  F- n% g# l. L4 l2 w
  37. {, g1 H! L) f, O: O& M5 ^' i
  38.    if(Timing!=0)
    $ ~$ Z% l( W* T% W5 N6 n1 |
  39.       Timing--;4 G. P0 Q3 _% _! @# e
  40. }
    ; z- v# U/ ~! s/ z& {$ x4 ?
  41. void Delay_us(uint32_t us)7 o: E8 m; d3 Z
  42. {: A/ k2 n7 _2 s0 g# W
  43.     Timing = us;/ t/ k. J9 z! J: C
  44.         SysTick->CTRL |= 0x07;# T5 j' d8 p: D9 N: G( H; p3 A
  45.         while(Timing!=0);
    # p0 |5 k5 N1 r0 X# z. @
  46.         SysTick->CTRL |= 0x00;
    ) @9 V# [* A( \: n" T/ z
  47. }. M* F0 V) i) _
  48. " D( S& H: K( g5 W1 q( J
  49. void Delay_ms(uint32_t ms)
    ; ~) I0 h( e  h* N2 l4 W1 X
  50. {% C. m9 \3 r' D& i) _1 G- R
  51.    Delay_us(ms*1000);/ F  e# U8 |1 o
  52. }4 ^+ K) i1 ^; r( {

  53. ( L5 h& Z6 i& [
  54. void Delay_s(uint32_t s)4 j( K  R  t( Q+ u
  55. {% }7 g# E; F, X* H. h6 y/ p
  56.   Delay_ms(s*1000);9 v- |$ C' H- E$ Z% b
  57. }5 x' J0 M% P+ ^; Q9 ^

  58.   C$ d/ K8 ?& x: _: J) B
  59. int main()( P/ g5 |# f8 y# G) [1 h& p* U
  60. {         
    6 |/ e2 {4 V4 w3 `9 Q( k
  61.     //uint32_t i;
    . `% m' [% [  l+ t9 R, }
  62.     LED_Init();
    8 y+ l  ?4 f4 a4 e: _
  63.         SysTick_Config(72);
    $ o+ J# L- A: \8 ?6 Y: F
  64.         while(1)
    8 s2 }6 |+ t5 l; x0 b
  65.         {
    - a; E3 g. ^1 g+ j4 I3 b
  66.            GPIO_ResetBits(GPIOD,GPIO_Pin_2);//输出低电平
    . K" H5 G" `: R/ C$ M" r
  67.            Delay_s(1);9 [: y. f% m& t! N3 x
  68.            GPIO_SetBits(GPIOD,GPIO_Pin_2);//输出高电平
    ( f5 i1 q4 C0 C! I  G1 v
  69.            Delay_s(1);, W8 C( G; N3 @4 g0 r
  70.         }4 `9 a; L7 a( ^  ?
  71.    
    ) Z0 W! x9 x" o
  72. }大家有什么问题可以提出来,一块分析解决。
复制代码
. T1 ^  T) k  D$ f

评分

参与人数 1 ST金币 +5 收起 理由
zero99 + 5

查看全部评分

赞 收藏 1 评论4 发布时间:2016-11-27 15:58

举报

4个回答
高二毛 回答时间:2016-11-28 08:26:08
感谢分享
peter001 回答时间:2016-11-28 11:46:12
支持一下
wdshuang09 回答时间:2016-11-28 12:24:23
支持一下              
andypanfan 回答时间:2016-11-28 21:24:17

7 B; z9 d. E/ U& y3 L. ?感谢分享
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版