stm32关于通用定时器的周期、频率计算公式

2023-10-26

以下内容针对正点原子的定时器中断实验

定时器时基单元包含:

● 计数器寄存器(TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)——该寄存器用设置对时钟进行分频,然后提供给计数器,作为计数器的时钟。
● 自动装载寄存器 (TIMx_ARR)

定时器的时钟来源(4个):

        1)内部时钟(CK_INT)
        2)外部时钟模式 1:外部输入脚(TIx)
        3)外部时钟模式 2:外部触发输入(ETR)
        4)内部触发输入(ITRx)


Tclk是定时器时钟源,默认情况下是72Mhz 。
我们将分配的时钟进行分频,指定分频值为psc,就将我们的Tclk分了psc+1,我们定时器的最终频率就是Tclk/(psc+1) MHz
这里的频率的意思就是1s中记 Tclk/(psc+1)M个数 (1M=10的6次方) ,每记一个数的时间为(psc+1)/Tclk ,很好理解频率的倒数是周期,这里每一个数的周期就是(psc+1)/Tclk 秒

通用定时器的主要部分是一个16位计数器和相关的自动装载寄存器。
此计数器时钟由预分频器分频得到,CK_INT -> TIMx_PSC -> CK_CNT。

APB1是通过对AHB分频得到,AHB是通过对SYSCLK分频得到。
当SYSCLK=72MHz,并且AHB分频系数=1时,AHB=72MHz。
当AHB=72MHz,并且APB1分频系数=2,APB1=36MHz,同时TIMxCLK=72MHz。

这里的 CK_INT 时钟是从 APB1 倍频的来的,除非 APB1 的时钟分频数设置为 1,否则通用定时器 TIMx 的时钟 是 APB1 时钟的 2 倍,当 APB1 的时钟不分频的时候,通用定时器 TIMx 的时钟就等于 APB1 的时钟。上述APB1预分频系数=2,所以通用定时器TIM2~TIM5 = 72MHz。

图1.内部时钟选择

图2.通用定时器工作流程图

当满足以下条件时,会产生溢出事件,去触发中断或者DMA请求:

  • 向上计数:计数器从0开始计数至arr(重装载)值,产生溢出事件
  • 向下计数:计数器从arr值开始计数至0,产生溢出事件

定时器的周期计算:

psc:预分频系数 (16位寄存器,有效值1~65535)
arr:重装载数 (16位寄存器,有效值1~65535)
Tclk:定时器的输入时钟源(单位MHZ)

注:计数器的arr和时钟分频psc都要加1,因为这两个值是配置在寄存器中的,从0开始计数,故要加1输入值 = 设置值 - 1

公式:

计数器的时钟频率 f = CK_CNT = f(ck_psc) / (psc+1) = Tclk / (psc + 1)  ,对时钟源分频 。
Tout溢出时间 =  (1/f) * (arr+1)  = ((psc+1) / Tlck) * (arr+1) 

如:F103默认配置下,生成1ms的时钟:Tout = (( 1+35 ) / 36M ) * ( 1+999 ) = 1ms

参考博文:

stm32 基本定时器定时配置

STM32定时器定时计算公式

内容可能有误,欢迎评论指正更改

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32关于通用定时器的周期、频率计算公式 的相关文章

  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • 关注MCU 开发中的无限循环

    在 MCU 的开发过程中 我们经常会遇到需要使用无限循环的情况 例如 在前后台系统中 我们需要在一个无限循环中处理各种任务 在实时性操作系统中 我们也可能需要在一个无限循环中调度各个任务 那么 处理无限循环的语句有哪些写法呢 目前常见的有两
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 【MCU简单且容易理解的工作原理】

    SOC是啥 System on Chip 一个芯片 但是片上有好多东西的意思 市面上的AI芯片 包括你知道的麒麟xxx 骁龙xxx等等一些列手机芯片都是SOC 对于SOC设计者来讲 显然要知道码农们码出来的一行行代码是如何在SOC上跑起来的
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 如何为 Arm Cortex M4 交叉编译 GSL?

    我正在使用带有arm cortex m4的STM32 MCU 并且想要使用gsl 2 7 1 但是 我已经尝试过例如命令 configure prefix home user name gsl arm target arm none eab
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • Latex系列3---页面设置+字体字号+颜色符号

    上一节中阐述的是简易的文本 本节在此基础上进行完善加工 页面设置 页边距 在平时写文章的时候 其实对于页边距的要求不高 但是论文这种就比较的严格 调整页边距需要使用 usepackage geometry 在这里我们平常使用此包进行调整页边
  • matlab如何读取txt文件

    格式化文本的读操作 只读形式打开txt文件 file t fopen mytxt txt r 以十进制读取 且读取的数据自动排成一列 排的顺序为 先从第一行左边到第一行右边 然后排第二行 A fscanf file t d 关闭文件 fcl
  • Proxy代理的作用

    Proxy代理的作用 Proxy 用于修改某些操作的默认行为 等同于在语言层面做出修改 所以属于一种 元编程 meta programming 即对编程语言进行编程 Proxy可以理解成 在目标对象之前架设一层 拦截 外界对该对象的访问 都
  • Babel转码器详解

    Babel转码器详解 Babel是一个广为使用的ES6转码器 可以将ES6代码转为ES5代码 从而在浏览器或其他环境运行 这意味着可以用ES6的方式编写程序而不用担心环境是否支持 Babel的配置文件是 babelrc 存放在根目录下 使用
  • 已解决 ZeroDivisionError: float division by zero 。

    问题 在使用YOLO算法系列时 需要将xml文件转换为txt文件 我在转换时遇到了这个问题ZeroDivisionError float division by zer 解决方法 简单的解决方法 找到报错的位置 将w h的值后面各加上一个极
  • Python进行ARMA模型建模

    import pandas as pd import matplotlib pyplot as plt import seaborn as sns import statsmodels api as sm from statsmodels
  • 使用Virtuoso和hspice进行电路输入与模拟

    总述 在这一次实验里 我学习了电路模拟的基本办法 具体而言是virtuoso和hspice 还有custom waveform软件基本功能的使用 达到了通过电路模拟验证延迟 验证功耗 验证逻辑功能的目的 反相器的设计 反相器是可以将输入信号
  • DBeaver 连接 Google BigQuery

    DBeaver 连接 Google BigQuery 毕业设计要用到Google BigQuery 但是想要用DBeaver进行远程连接 实在用不惯浏览器端的界面 结果发现DBeaver 真 的 可 以 DBeaver提供了Google B
  • Mysql Redo Log日志

    Mysql Redo Log日志 数据日志与数据落盘机制 Redo log写入磁盘时 必须进行一次操作系统fsync操作 防止redo log只是写入操作系统磁盘缓存中 参数innodb flush log at trx commit可以控
  • C++ 动态内存

    了解动态内存在 C 中是如何工作的是成为一名合格的 C 程序员必不可少的 C 程序中的内存分为两个部分 栈 在函数内部声明的所有变量都将占用栈内存 堆 这是程序中未使用的内存 在程序运行时可用于动态分配内存 很多时候 您无法提前预知需要多少
  • 公司名称注册,公司名称查询,企业名称注册事项

    公司名称的构成 名称一般由四部分依次组成 行政区划 字号 行业特点 组织形式 登记管辖 工商行政管理机关对企业名称实行分级登记管理 国家工商总局登记管辖范围 一 冠以 中国 中华 全国 国家 国际 字样的 二 在名称中间使用 中国 中华 全
  • Python中的三引号''' '''的用法

    链接 https blog csdn net GreenHandCGL article details 79703863
  • ERP仓库管理的操作与设计--开源软件诞生20

    赤龙ERP库房管理讲解 第20篇 用日志记录 开源软件 的诞生 点亮星标 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github com red
  • minkwindow安装

    装库要记住三件事 官网 csdn 耐心 装库太慢就边看剧边装 不要影响心态 首先上官网 GitHub NVIDIA MinkowskiEngine Minkowski Engine is an auto diff neural networ
  • 国产超低功耗华大单片机HC32L136开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32L136开发板上手后的入门操作 开发板可以在华大MCU应用交流群 164973950 免费申请 HC32L136开发板 如下图所示 分为板载调试模块 左半部分 和MCU开发电路 右半部分 二者中间通过
  • 当你的sklearn用不了mean_absolute_percentage_error函数

    今天将一份写好的python机器学习程序换了个电脑跑的时候 出现了如下报错 ImportError cannot import name mean absolute percentage error from sklearn metrics
  • 解决K8s安装中节点初始化时 [kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ 问题.

    问题描述 安装K8s时 在节点初始化过程中出现 kubelet check The HTTP call equal to curl sSL http localhost 10248 healthz failed with error Get
  • WINDOWS 10 设置WSL 2

    确保已安装 WSL 可以在此处找到相关说明 并且运行的是 Windows 10内部版本 18917或更高版本 可以通过在 PowerShell 中运行以下命令来执行此操作 PowerShell dism exe online enable
  • 分布式深度学习part1:神经网络的分布式训练

    这篇文章是关于神经网络分布式训练的三部系列文章中的第一篇 在第1部中 我们将了解如何通过GPU上的分布式计算显著地加速深度学习模型的训练 并讨论一些挑战并调查当前关于该主题的研究 我们还将考虑神经网络的分布式训练是否适用于特定用例 介绍 在
  • stm32关于通用定时器的周期、频率计算公式

    以下内容针对正点原子的定时器中断实验 定时器时基单元包含 计数器寄存器 TIMx CNT 预分频器寄存器 TIMx PSC 该寄存器用设置对时钟进行分频 然后提供给计数器 作为计数器的时钟 自动装载寄存器 TIMx ARR 定时器的时钟来源