STM32中ARR(自动重装寄存器)为什么要减1

在STM32定时器的配置中,ARR(自动重装载寄存器)需要减1的原因主要与定时器的计数方式和寄存器的设置方式有关。以下是对此问题的详细解释:

一、定时器的计数方式

STM32的定时器通常采用递增计数方式,即计数器(CNT)从0开始逐渐递增,直到达到某个预设的值(即ARR的值)时停止计数,并产生一个更新事件或中断。这个预设的值就是ARR寄存器中保存的数。

二、寄存器的设置方式

  1. 计数范围:STM32定时器的计数器(CNT)和自动重装载寄存器(ARR)通常都是16位的,这意味着它们的最大计数值为65535(即2^16-1)。
  2. 寄存器值与实际计数:在STM32的定时器中,寄存器的值与实际计数的值之间存在一种对应关系。具体来说,当我们将某个值写入ARR寄存器时,定时器的计数器并不会立即达到这个值,而是从0开始逐渐递增,直到达到写入ARR寄存器的值减1时,才会产生更新事件或中断。

三、为何需要减1

  1. 计数从0开始:STM32定时器的计数器是从0开始计数的,而不是从1开始。因此,当我们希望定时器在计数到某个特定值时产生中断时,需要将这个特定值减1后写入ARR寄存器。
  2. 寄存器与实际计数的对应关系:由于寄存器值与实际计数值之间存在对应关系(即寄存器值=实际计数值+1),因此我们需要将期望的计数值减1后写入ARR寄存器,以确保在计数器达到期望值时产生中断。

四、示例说明

假设我们希望STM32定时器在计数到10000次时产生中断。那么,我们需要将9999(即10000-1)写入ARR寄存器。这样,当计数器的值从0递增到9999时,定时器就会产生一个更新事件或中断。

ARR需要减1的原因主要与定时器的计数方式和寄存器的设置方式有关。为了确保在计数器达到期望值时产生中断,我们需要将期望的计数值减1后写入ARR寄存器。

相关推荐
csg110712 小时前
PIC单片机驱动BH1750光照传感器,轻松获取环境光照数据
单片机·嵌入式硬件·物联网
雾削木12 小时前
使用 ESPHome 的核心指令
java·前端·javascript·单片机·嵌入式硬件
DLGXY14 小时前
STM32——输入捕获、编码器接口(十一)
stm32·单片机·嵌入式硬件
余生皆假期-21 小时前
永磁同步电机二次起步处理
单片机·嵌入式硬件
DLGXY1 天前
STM32——TIM定时器、定时中断、RCC时序(八)
stm32·单片机·嵌入式硬件
CQ_YM1 天前
ARM之I2C
arm开发·单片机·嵌入式硬件·嵌入式
让世界再也没有bug1 天前
测试工具之一 ------示波器
单片机·嵌入式硬件·硬件测试·嵌入式软件测试
CircuitWizard1 天前
STM32 + 淘晶驰T1串口屏波形显示
stm32·单片机·嵌入式硬件
A9better1 天前
嵌入式开发学习日志53——互斥量
stm32·嵌入式硬件·学习
Q_21932764551 天前
基于单片机的个性化服装尺寸红外 测量仪的设计
单片机·嵌入式硬件