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

对于STM32的SYSTICK的个人见解

[复制链接]
和平清风 发布时间:2014-4-16 12:15
       学习了cm3系统的系统滴答定时器,开始学习STM32时,看到系统滴答定时器,就跑到STM32的数据手册上狂找,结果,毛也没找到,最后才发现,原来这个SYSTICK是M3内核的,ARM公司就带过来的,提供的一个作为操作系统的时间基准,也就是说M3有,M4也有....8 _' k% l. s$ R" D7 p; o
           这是复制了CM3的权威指南里面的一个队SYSTICK的介绍“ SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律 ”
8 L( ^( a6 C( L          3 u. ^+ _6 @- s' y7 p
           SYSTICK包含了4个寄存器,- T9 {  I  j* _; z2 {- g' P5 b
      / W" @5 X7 b& D/ L. v. L9 ~8 ^
           1、SysTick控制及状态寄存器(地址:0xE000_E010)
0 m; L* |. |3 j4 |! D                 
3 s" L- [& A% {) j' h. n7 O# n          2、SysTick重装载数值寄存器(地址:0xE000_E014)
6 e$ [7 P( A% q$ v! I                 
2 S: [" k) \. O/ @" g          3、SysTick当前数值寄存器(地址:0xE000_E018)+ M8 U& a. a, U2 ?( g
                 7 u5 F- Y) v* H
          4、SysTick校准数值寄存器(地址:0xE000_E01C)% ~( w; P, E! {) P$ F: T2 A
                0 n4 v3 Y: \6 p8 B1 T( k" \9 b' ~

" x8 P8 X$ U; F9 L) ?% T          也即是说,我们只要操作这四个寄存器,即可控制SYSTICK,在不使用系统的时候,用SYSTICK作精确延时最为合适
) N) b7 w4 F2 [0 P$ i- Q
: X; ?8 a. ^6 x8 j) T         在这里我们只使用前三个寄存器,! t( g! Q4 D/ N& e/ h( h, G
         首先需要配置的自然就是时钟源,SYSTICK的时钟源可以来自HCLK,或则是HCLK/8( _1 u) m# u; ^/ R
          接着是设置从装载的值到ysTick重装载数值寄存器,这里系统会自动的把重装载中的值放到当前数值寄存器中2 p1 N5 N, S* @' }+ `
         第三步便是启动定时器倒数了,启动定时器倒数之后,SysTick当前数值寄存器中的数便会随着脉冲开始一个一个的减少6 m4 q/ F' P3 b* H, q# c* H# q
         最后就是等待并且判断倒数为0,此时,状态寄存器中的COUNTFLAG位就会置位
0 c5 D) W4 W/ ^/ z3 T+ {1 ^0 s% K( _& p+ G5 V( l1 i; `
        具体编程9 E) s# V3 b0 f8 l7 o
       SysTick->CTRL&=0XFFFFFFFB;          //SysTick选择外部时钟8分频6 H( L& [7 w  q: K& E1 M
       SysTick->LOAD=(u32)x;                         //重载时间值) x0 z; }; k* x$ z2 k4 P/ `
       SysTick->VAL=0x00;                                     //清空计数器  2 n5 Q  x5 ]% c9 |# \
        SysTick->CTRL=0X01;                                                 //启动倒数计数器6 ^& Q! A" e, ]3 N2 J
               while(!(temp&(1CTRL=0X00;                                                 //关闭计数器0 S9 W8 o4 f; j$ s0 ~
6 t8 Z7 D+ z* }
      在STM32 的新版库中,是没有库函数写SYSTICK的,这也说明了意法半导体公司在提示大家的一点
" k4 u: N1 V* z# U/ x" U0 x      慎用systick,因为这是系统滴答定时器,是专门给系统使用的       
收藏 评论0 发布时间:2014-4-16 12:15

举报

0个回答

所属标签

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