news 2026/9/3 2:47:32

STM32定时器时间的计算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32定时器时间的计算

定时器时间计算

确定定时器时钟频率(Tck)

定时器和总线挂载对应表

以下是STM32F4 系列定时器与总线挂载的对应表(最常用的 F407/F429 等型号通用)

定时器编号挂载总线核心特征(补充)
TIM1APB2高级定时器,带刹车 / 死区,常用于 PWM 电机控制
TIM2APB1通用定时器,32 位计数器,支持多模式计数
TIM3APB1通用定时器,16 位,最常用的通用定时 / PWM 外设
TIM4APB1通用定时器,16 位,同 TIM3,互补使用
TIM5APB1通用定时器,32 位计数器,超长定时场景优先选
TIM6APB1基本定时器,仅定时 / 触发 DAC,无 PWM / 捕获功能
TIM7APB1基本定时器,同 TIM6,仅定时功能
TIM8APB2高级定时器,功能同 TIM1,备用高级定时器
TIM9APB2通用定时器(简化版),仅 2 个通道
TIM10APB2通用定时器(简化版),仅 1 个通道
TIM11APB2通用定时器(简化版),仅 1 个通道
TIM12APB1通用定时器(简化版),2 个通道
TIM13APB1通用定时器(简化版),1 个通道
TIM14APB1通用定时器(简化版),1 个通道
TIM15APB2通用定时器(部分高端 F4 型号支持,如 F469)
TIM16APB2通用定时器(部分高端 F4 型号支持)
TIM17APB2通用定时器(部分高端 F4 型号支持)
  1. APB1 总线
    • 包含 “低速” 通用 / 基本定时器(TIM2—TIM7、TIM12—TIM14)
    • 总线时钟最高 42MHz(F4),定时器时钟倍频后最高 84MHz;
  2. APB2 总线
    • 包含 “高速” 高级 / 简化通用定时器(TIM1、TIM8—TIM11、TIM15—TIM17)
    • 总线时钟最高 84MHz(F4),定时器时钟倍频后最高 168MHz;

时钟分频机制

  • 如果APB预分频器 = 1:定时器时钟 = APB时钟
  • 如果APB预分频器 ≠ 1:定时器时钟 = APB时钟 × 2
/* 常见系统时钟配置下: HCLK = 168MHz APB1预分频器 = 4 → PCLK1 = 42MHz APB2预分频器 = 2 → PCLK2 = 84MHz 实际定时器时钟: APB1定时器时钟 = 42MHz × 2 = 84MHz APB2定时器时钟 = 84MHz × 2 = 168MHz */

配置定时器参数(PSC和ARR)

PSC预分频系数

a. 分频定时器时钟
实际计数频率 = 定时器时钟 / (PSC + 1)
  • PSC=0:计数频率 = 定时器时钟(不分频)
  • PSC=9:计数频率 = 定时器时钟 ÷ 10
  • PSC=999:计数频率 = 定时器时钟 ÷ 1000
b. 扩大定时范围

定时器时钟往往很高(如84MHz),直接计数很快就溢出:

  • 84MHz时,1秒需要8400万次计数
  • 16位计数器最大只能计65535次
  • 通过PSC分频,可以把频率降到可管理的范围

ARR自动重装载值

a. 设定定时周期
定时时间 = (ARR + 1) × (PSC + 1) ÷ 定时器时钟
  • ARR=999:计数器从0计到999后溢出
  • ARR=4999:计数器从0计到4999后溢出
b. 产生更新事件

当计数器达到ARR值时:

  1. 产生更新中断(如果使能)
  2. 计数器自动复位到0
  3. 更新影子寄存器(如果有)
c. 在PWM中的应用
  • PWM周期由ARR决定
  • 占空比由CCRx与ARR的比值决定
  • 频率= 定时器时钟 / ((ARR+1)×(PSC+1))
// 生成1kHz PWM,占空比50%// 定时器时钟 = 84MHzTIMx->PSC=0;// 不分频TIMx->ARR=83999;// 周期84000个计数TIMx->CCR1=42000;// 占空比50%/* PWM频率 = 84MHz / 84000 = 1kHz 高电平时间 = 42000/84MHz = 0.5ms */

计算定时时间

定时时间公式

举例子

TIM1定时时间1ms(APB2)

根据定时器和总线挂载对应表,可以知道定时器TIM1是挂载在APB2总线上,很明显APB2 Prescaler(预分频器)为2,如果APB预分频器 ≠ 1:定时器时钟 = APB时钟 × 2,即定时器时钟自动倍频,此时APB2的时钟为84MHz,则定时器时钟Tck = 84MHz × 2 = 168MHz。

此时将PSC配置为168-1,ARR配置为1000-1

故定时时间为 T = (168-1 + 1)× (1000-1 + 1)÷ 168MHz(168000 000) = 0.001s = 1ms

TIM5定时时间2ms(APB1)

根据定时器和总线挂载对应表,可以知道定时器TIM5是挂载在APB1总线上,很明显APB1 Prescaler(预分频器)为4,如果APB预分频器 ≠ 1:定时器时钟 = APB时钟 × 2,即定时器时钟自动倍频,此时APB1的时钟为42MHz,则定时器时钟Tck = 42MHz × 2 = 84MHz。

此时将PSC配置为168-1,ARR配置为1000-1

故定时时间为 T = (168-1 + 1)× (1000-1 + 1)÷ 84MHz(84000 000) = 0.002s = 2ms

TIM5定时时间1ms(APB1)

根据定时器和总线挂载对应表,可以知道定时器TIM5是挂载在APB1总线上,很明显APB1 Prescaler(预分频器)为4,如果APB预分频器 ≠ 1:定时器时钟 = APB时钟 × 2,即定时器时钟自动倍频,此时APB1的时钟为42MHz,则定时器时钟Tck = 42MHz × 2 = 84MHz。

此时将PSC配置为84-1,ARR配置为1000-1

故定时时间为 T = (84-1 + 1)× (1000-1 + 1)÷ 84MHz(84000 000) = 0.001s = 1ms

其他时间设置(1s、2s、5s)

其他时间的设置,可以在1ms的基础上,用代码实现1s、2s、5s等的定时时间设置

if(htim==&htim2)/* 1ms,以定时器2为例 */{time_count++;if(time_count>=1000)/* 每1ms进入一次中断,1ms*1000 = 1s,1ms*2000 = 2s,1ms*5000 = 5s,修改time_count的值即可 */{read_flag=1;/* 设置读取标志 */time_count=0;/* 计数值清零 */}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 4:12:03

leetcode解题方法

双指针法&#xff1a;适用于有序数组去重、两数之和等问题。通过左右指针减少时间复杂度至O(n)。示例代码&#xff1a;c复制插入int removeDuplicates(int* nums, int numsSize) {if (numsSize 0) return 0;int slow 0;for (int fast 1; fast < numsSize; fast) {if (num…

作者头像 李华
网站建设 2026/9/2 10:20:05

八)--工具和MCP调用

1. 工程结构概览Spring AI 提供了完整的工具调用&#xff08;Tool Calling&#xff09;能力&#xff0c;让 AI 模型可以调用外部服务。同时&#xff0c;Spring AI 还支持 MCP&#xff08;Model Context Protocol&#xff09;&#xff0c;这是一个标准化的工具协议。spring-ai-m…

作者头像 李华
网站建设 2026/9/2 13:24:57

国产GPU适配实战——五款二线主流AI加速卡深度评测

文章目录前言一、海光 DCU K100_AI —— 适配体验最佳硬件规格生态资源租用渠道适配体验ONNX适配综合评价二、寒武纪 MLU370-M8 —— 需要技术支持硬件规格生态资源获取方式适配方式遇到的问题ONNX支持重要提醒三、沐曦 C500 —— 资源丰富的后起之秀硬件规格生态资源租用渠道适…

作者头像 李华
网站建设 2026/9/2 15:04:31

111111111111

1111111111111111111111

作者头像 李华
网站建设 2026/9/3 1:23:13

小程序毕设项目:基于springboot+微信小程序的应急救援小能手软件系统的设计与实现(源码+文档,讲解、 调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华