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寄存器。

相关推荐
云数据构建师1 小时前
TB67S580FNG 芯片核心特点与应用概述
单片机·嵌入式硬件
CosimaLi2 小时前
STM32F10x硬件I2C
stm32·单片机·嵌入式硬件
学习路上_write4 小时前
STM32回调函数使用/定时器/GPIO/串口/
c语言·单片机·嵌入式硬件
稻草、5 小时前
合泰单片机之时基中断
单片机·嵌入式硬件
盈创力和20075 小时前
物联网 “神经” 之以太网:温湿度传感器的工业级 “高速干道”
运维·服务器·网络·嵌入式硬件·以太网温湿度传感器
GilgameshJSS6 小时前
STM32H743-ARM例程36-DNS
c语言·arm开发·stm32·单片机·嵌入式硬件
工具人55556 小时前
电脑插入USB一个端口都识别不出来
单片机·嵌入式硬件·电脑
KOAN凯擎小妹7 小时前
晶振信号质量:上升下降时间与占空比
单片机·嵌入式硬件·fpga开发·信息与通信
sheepwjl8 小时前
《嵌入式硬件(二十一):基于IMX6ULL的脉冲宽度调制(PWM)操作》
嵌入式硬件·pwm·脉冲宽度调制
小莞尔9 小时前
【51单片机】【protues仿真】基于51单片机简易电子琴系统(8键)
c语言·单片机·嵌入式硬件·物联网·51单片机