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

对于STM32的SYSTICK的个人见解

[复制链接]
和平清风 发布时间:2014-4-16 12:15
       学习了cm3系统的系统滴答定时器,开始学习STM32时,看到系统滴答定时器,就跑到STM32的数据手册上狂找,结果,毛也没找到,最后才发现,原来这个SYSTICK是M3内核的,ARM公司就带过来的,提供的一个作为操作系统的时间基准,也就是说M3有,M4也有....  \! k7 t; q1 f2 G* T. r' @8 g' E: `
           这是复制了CM3的权威指南里面的一个队SYSTICK的介绍“ SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律 ”" p2 u4 k1 ?2 J7 `
          " J7 A2 y6 f7 W6 o" R! @
           SYSTICK包含了4个寄存器,: z! `$ }) m$ [
      - l' l# d, M/ P$ O7 ~0 @( b- E2 A
           1、SysTick控制及状态寄存器(地址:0xE000_E010)
7 U4 T: |2 J" y% T                 
/ X5 l' Z, M' @+ a, N2 n          2、SysTick重装载数值寄存器(地址:0xE000_E014)
7 R0 w" x% f. B& o5 t; s. k                 
  A: r! x, K& [          3、SysTick当前数值寄存器(地址:0xE000_E018)3 W  ~6 P' I. p9 k. G5 T3 ?
                 . [% {! k/ I9 w7 I5 O1 h1 x
          4、SysTick校准数值寄存器(地址:0xE000_E01C)& h7 F# P. z) p1 u. Y: `
                7 i5 v# p( l) B/ e
$ t% {: N/ f9 z
          也即是说,我们只要操作这四个寄存器,即可控制SYSTICK,在不使用系统的时候,用SYSTICK作精确延时最为合适6 ^7 _" L. I& G$ J8 U2 I/ Q( u
* I( v# ^6 B; b0 A. o% K
         在这里我们只使用前三个寄存器,# x& X- ]6 U, Z" k, s4 g& l1 c+ M) L, L
         首先需要配置的自然就是时钟源,SYSTICK的时钟源可以来自HCLK,或则是HCLK/80 F; g' W0 G  U( Q9 b
          接着是设置从装载的值到ysTick重装载数值寄存器,这里系统会自动的把重装载中的值放到当前数值寄存器中
7 o' j9 f- e5 I, q+ j         第三步便是启动定时器倒数了,启动定时器倒数之后,SysTick当前数值寄存器中的数便会随着脉冲开始一个一个的减少/ E  s- [% X; N* J. g; }
         最后就是等待并且判断倒数为0,此时,状态寄存器中的COUNTFLAG位就会置位
# H0 X1 A% N5 ?4 m
0 @; Q9 D" w0 v5 ~/ {8 h1 B        具体编程
, I% N3 E9 Y; T5 y0 n% J       SysTick->CTRL&=0XFFFFFFFB;          //SysTick选择外部时钟8分频
/ h1 [7 i+ K/ @" {0 g* N       SysTick->LOAD=(u32)x;                         //重载时间值# [; F! _* p4 O+ Q* q
       SysTick->VAL=0x00;                                     //清空计数器  : v' g( p7 P3 O/ V2 P% \7 }, P# J$ c
        SysTick->CTRL=0X01;                                                 //启动倒数计数器* U4 T" t' p# e" L) n* K" n
               while(!(temp&(1CTRL=0X00;                                                 //关闭计数器
8 `" l8 e. o" I6 ]0 i8 W
# g9 M4 z. e9 T8 }% c      在STM32 的新版库中,是没有库函数写SYSTICK的,这也说明了意法半导体公司在提示大家的一点% z5 p, p; c, ?& A6 u! X
      慎用systick,因为这是系统滴答定时器,是专门给系统使用的       
赞 收藏 评论0 发布时间:2014-4-16 12:15

举报

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