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

【经验分享】STM32开发项目:定时器预装载寄存器(ARR)

[复制链接]
STMCU小助手 发布时间:2022-4-14 10:31
项目背景* ~" w3 q) F) q
笔者在进行某项目开发时,需要实时调节定时器的周期,以控制定时器下次更新中断的时间。6 k6 h" Q" [- }/ W
9 X: b: a# N. R; V' |1 T4 G
预装载寄存器
; ]% k8 ]9 q! ^: y& M% Q自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器)。% G+ w% y1 Q* G6 s3 Y# a

  |  c2 j6 o6 Q( W, A+ N8 e* K在图中可以看到auto-reload register这个框有一个阴影,有些其它寄存器也有用阴影表示,如我用蓝色标出的Capture/Compare寄存器;有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);正如手册上的14.3.1节所说,根据TIMx_CR1寄存器中APRE位的设置,preload register的内容可以随时传送到shadow register,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把preload register的内容传送到shadow register。* e* X! q. W, Z) {/ T9 e$ ]3 \

6 n  [, F; N* s( C! s5 t: e8 A- x $%BLBB226AZSI2ZXI4VB61S.png
. t# r6 M0 @5 k6 D" T0 }. N8 ]
0 S# b1 D# M1 [# C* _* s实现方法/ W" l% h2 N, r9 ~, o/ _6 k
禁用预装载寄存器,修改ARR的值(TIM_Period)会直接操作影子寄存器,新的ARR值将立即生效:
" E1 p4 O: G6 ^4 O* B  M) G" e. q9 h$ }, \0 A7 `; t4 @
  1. TIM_ARRPreloadConfig(TIM4, DISABLE);
复制代码
: l- q. i& U- l8 W& d' l! p- s
使能预装在寄存器,修改ARR的值(TIM_Period)会操作预装载寄存器,直到更新事件后,ARR预装载寄存器的值才会被拷贝到影子寄存器中:
$ m: K9 d3 }3 ]! Z, p; B' L+ t( n9 K; J- f
  1. TIM_ARRPreloadConfig(TIM4, ENABLE);
复制代码
& n4 X" I  m; p4 R& Y
TIM_ARRPreloadConfig函数的定义如下:1 H2 ^) ~% r$ N" `  {6 e

( ~4 p6 G+ q! q) o# Z( |& }$ r
  1. /**
    ( ?9 f, r7 n- |0 w, E
  2.   * @brief  Enables or disables TIMx peripheral Preload register on ARR.
    $ O0 d! R0 v" l
  3.   * @param  TIMx: where x can be  1 to 17 to select the TIM peripheral.& v0 A' u* Z3 @% R! R
  4.   * @param  NewState: new state of the TIMx peripheral Preload register$ |1 p, T! l4 ]- L1 q; H. Q5 I
  5.   *   This parameter can be: ENABLE or DISABLE.
    & g* A1 o/ `) {/ @& ]; y
  6.   * @retval None! H4 o9 P& ^) Z9 N  s* u
  7.   */* {0 }* _0 J0 L4 y0 G( ^
  8. void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)3 @' b: n6 v, k# w& g
  9. {/ j2 g" V2 P1 }  l9 v
  10.   /* Check the parameters */7 E6 F: P4 D. X$ ~7 w3 C( L& _
  11.   assert_param(IS_TIM_ALL_PERIPH(TIMx));
    5 Y  T8 ]" ?) c# h
  12.   assert_param(IS_FUNCTIONAL_STATE(NewState));0 H( Y% n9 D5 g" R
  13.   if (NewState != DISABLE)
    + X3 ]% Z' R+ M
  14.   {$ Y* |' U0 d3 q3 a0 d
  15.     /* Set the ARR Preload Bit */
    * a6 C# Y& |2 E. R  A6 M! B7 w
  16.     TIMx->CR1 |= TIM_CR1_ARPE;
    ( L9 j' i7 H- A; S* s4 R- X
  17.   }
    4 h8 L( J0 Q3 s; K, R8 p
  18.   else" D* H% g$ `; e; d& K
  19.   {2 ^" d  F! s  S" Y  R
  20.     /* Reset the ARR Preload Bit */
    0 h+ g  d7 J1 J2 ]  a
  21.     TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
    / C2 n1 U  N/ e0 U/ p  C. x
  22.   }7 b" }1 Q* @! N1 l. `& B
  23. }6 p; N3 d* f1 |
复制代码
' W; U+ z9 y9 V9 l! ]* a
) e  {* E8 L% R6 V

( i0 ~8 D* M8 l+ Y, ]. c
赞 收藏 评论0 发布时间:2022-4-14 10:31

举报

0个回答

所属标签

相似技术帖

官网相关资源

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