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

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

[复制链接]
STMCU小助手 发布时间:2022-4-14 10:31
项目背景
笔者在进行某项目开发时,需要实时调节定时器的周期,以控制定时器下次更新中断的时间。

预装载寄存器
自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器)。

在图中可以看到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。

$%BLBB226AZSI2ZXI4VB61S.png

实现方法
禁用预装载寄存器,修改ARR的值(TIM_Period)会直接操作影子寄存器,新的ARR值将立即生效:

  1. TIM_ARRPreloadConfig(TIM4, DISABLE);
复制代码

使能预装在寄存器,修改ARR的值(TIM_Period)会操作预装载寄存器,直到更新事件后,ARR预装载寄存器的值才会被拷贝到影子寄存器中:

  1. TIM_ARRPreloadConfig(TIM4, ENABLE);
复制代码

TIM_ARRPreloadConfig函数的定义如下:

  1. /**
  2.   * @brief  Enables or disables TIMx peripheral Preload register on ARR.
  3.   * @param  TIMx: where x can be  1 to 17 to select the TIM peripheral.
  4.   * @param  NewState: new state of the TIMx peripheral Preload register
  5.   *   This parameter can be: ENABLE or DISABLE.
  6.   * @retval None
  7.   */
  8. void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
  9. {
  10.   /* Check the parameters */
  11.   assert_param(IS_TIM_ALL_PERIPH(TIMx));
  12.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  13.   if (NewState != DISABLE)
  14.   {
  15.     /* Set the ARR Preload Bit */
  16.     TIMx->CR1 |= TIM_CR1_ARPE;
  17.   }
  18.   else
  19.   {
  20.     /* Reset the ARR Preload Bit */
  21.     TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
  22.   }
  23. }
复制代码



收藏 评论0 发布时间:2022-4-14 10:31

举报

0个回答

所属标签

相似分享

官网相关资源

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