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

相关推荐
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11016 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元6 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133976 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315206 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书6 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang6 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟6 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126916 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315206 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机