当前位置: 首页 > article >正文

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


http://www.kler.cn/a/384823.html

相关文章:

  • 【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
  • PyQt5 超详细入门级教程上篇
  • GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
  • Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
  • 【数据集】【YOLO】【目标检测】抽烟识别数据集 6953 张,YOLO/VOC格式标注,吸烟检测!
  • 在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码
  • STL之string的使用(超详解)
  • 一、初识C语言(1)
  • 厦门网站建设步骤与技巧
  • 深度学习:AT Decoder 详解
  • CSS画icon图标系列(一)
  • 鸿蒙生态崛起:开发者机遇、挑战与未来展望
  • 【go从零单排】go中的nil到底是啥意思?
  • Hive中自定义函数的使用
  • js-v-for 指令来循环展示数组中的数据,并在每条数据后添加一个删除按钮 items.splice(index, 1)
  • linux命令使用案例_将查找结果复制/移动到对应文件夹下
  • 项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
  • 《C++类型转换:四种类型转换的规定》
  • java反序列化学习之CommonCollections3利用链的学习
  • (一)NodeJS环境安装、创建第一个Vue应用
  • C++入门基础知识140—【关于C++ 类构造函数 析构函数】
  • C++练习题(3)
  • ZABBIX API获取监控服务器OS层信息
  • 信息流投放账户、广告位置与优势
  • C++ vector
  • 代码随想录算法训练营第三十六天|Day36 动态规划