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

STM32的基本定时器注意点

本文介绍了STM32基本定时器3个重要的寄存器PSC、ARR、CNT,以及缓冲机制和计数细节。

基本定时器的框图

预分频器寄存器(TIMx_PSC)可以在运行过程中修改它的数值,新的预分频数值将在下一个更新事件时起作用。因为更新事件发生时,会把 TIMx_PSC 寄存器值更新到其影子寄存器中,这才会起作用。(该寄存器16位,最大值为2^16-1即表示65536(2^16)分频)

自动重载寄存器及其影子寄存器的作用和上述同理。不同点在于自动重载寄存器是否具有缓冲作用还受到 ARPE 位的控制,当该位置 0 时,ARR 寄存器不进行缓冲,我们写入新的 ARR 值时,该值会马上被写入 ARR 影子寄存器中,从而直接生效;当该位置 1 时,ARR 寄存器进行缓冲,我们写入新的 ARR 值时,该值不会马上被写入 ARR 影子寄存器中,而是要等到更新事件发生才会被写入 ARR 影子寄存器,这时才生效。预分频器寄存器则没有这样相关的控制位,这就是它们不同点。(自动重载寄存器和计数器均为16位,最大值为2^16-1即表示最多计65536(2^16)次)

总结

缓冲:改变PSC或ARR寄存器的值后,不会立即起作用,而是发生更新事件后由各自的影子寄存器将值载入。

TIMx_PSC(预分频器寄存器)只能缓冲,而TIMx_ARR(自动重载寄存器)可通过ARPE 位来选择是否缓冲(ARRE为0时,该值立即生效,没有缓冲。ARRE为1时,具有缓冲功能)

更新事件的产生:

1.由软件产生,将 TIMx_EGR 寄存器的位 UG 置 1,产生更新事件后,硬件会自动将 UG 位清零。

2.由硬件产生,满足以下条件即可: 计数器的值等于自动重装载寄存器影子寄存器的值。

基本定时器的计数器(CNT)是一个递增的计数器,当寄存器(TIMx_CR1)的 CEN 位置 1,即使能定时器,每来一个 CK_CNT 脉冲,TIMx_CNT 的值就会递增加 1。当 TIMx_CNT 值 与 TIMx_ARR 的设定值相等时,TIMx_CNT 的值就会被自动清零并且会生成更新事件。

ARR的值为9,则CNT需要溢出10次,才生成更新事件。计数器记到自动加载值9后再来一个CK_CNT后计数值的变化:

 0__ 1__ 2__ 3__ 4__ 5__ 6__ 7__ 8__ 9__ 0__

第9个数记完之后再来一个脉冲产生溢出和更新事件,粉紫色部分为溢出过程。

由CNT的时序图可以看出上述过程:

http://www.lryc.cn/news/260122.html

相关文章:

  • 浅谈NLP和大模型的关系
  • k8s上安装KubeSphere
  • Linux 链接器如何使用静态库来解析引用
  • vue实现滑动验证
  • ***Cpolar配置外网访问和Dashy
  • Rancher中使用promtail+loki+grafna收集k8s日志并展示
  • modelbox线程爆满宕机bug
  • KUKA机器人如何在程序中编辑等待时间?
  • MQ入门简介
  • 如何正确使用缓存来提升系统性能
  • IDEA中Terminal配置为bash
  • C# 字符串格式化
  • 基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性
  • 基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程
  • electron这样使用更安全
  • DPDK多进程之间的通信
  • Python文本信息解析:从基础到高级实战‘[pp]]‘[
  • c语言多线程队列实现
  • 一分钟带你了解电容
  • SQLAlchemy 第一篇
  • Node.js模块化的基本概念和分类及使用方法
  • SpringBoot整合Lucene实现全文检索【详细步骤】【附源码】
  • 基于ssm生活缴费系统及相关安全技术的设计与实现论文
  • VS的python没有pandas(VS连接mysql数据库)
  • Java实现pdf文件合并
  • ArcGIS导入excel中的经纬度信息,绘制矢量
  • 【Hadoop】
  • GitHub帐户管理更改电子邮件
  • InsCode实践分享
  • 大一C语言作业 12.14