MCU Timer定时计算案例

好的,我们来仔细算一下你这段 GD32 TIMER0 配置 的时钟频率与定时周期。


🧩 已知条件

参数 说明
AHB 时钟 240 MHz 系统主频
APB1 时钟 60 MHz AHB/4
APB2 时钟 120 MHz AHB/2
TIMER0 位于 APB2 总线
rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL2) 选择 "倍频模式"
预分频器(Prescaler) 0
自动重装载值(ARR / period) 48
计数方向 向上计数

⚙️ 步骤1:确定定时器时钟频率 CK_TIMER

根据 GD32 的时钟结构说明:

RCU_TIMER_PSC_MUL2 被设置时:

  • 如果 APB2 分频不为 1,则定时器时钟 = 2 × APB2 时钟

你的 APB2 = 120 MHz

→ 因此:

f_{TIMER} = 2 \\times 120,\\text{MHz} = 240,\\text{MHz}

✅ 定时器时钟频率:240 MHz


⚙️ 步骤2:计算计数周期(即更新事件周期)

定时器计数频率计算公式:

f_{CNT} = \\frac{f_{TIMER}}{(PSC + 1)}

代入 PSC = 0

f_{CNT} = \\frac{240,\\text{MHz}}{1} = 240,\\text{MHz}

一个计数周期时间:

T_{CNT} = \\frac{1}{f_{CNT}} = \\frac{1}{240 \\times 10\^6} = 4.1667,\\text{ns}


⚙️ 步骤3:计算溢出周期(即定时器中断周期)

当定时器从 0 计数到 ARR(period)后产生更新事件。

周期计算公式:

T_{update} = (ARR + 1) \\times T_{CNT}

代入参数:

T_{update} = (48 + 1) \\times 4.1667,\\text{ns} = 204.17,\\text{ns}


✅ 结果总结

项目
定时器输入时钟 240 MHz
计数频率 240 MHz
计数周期(每个 tick) 4.17 ns
自动重装载值 ARR 48
溢出周期(中断周期) ≈ 204 ns
溢出频率 ≈ 4.9 MHz

💡 如果你想得到 400ns 周期

那就反推 ARR

ARR = \\frac{T_{target}}{T_{CNT}} - 1 = \\frac{400,\\text{ns}}{4.1667,\\text{ns}} - 1 ≈ 95

所以如果想得到 400ns 的更新周期,应该设置:

c 复制代码
timer_initpara.period = 95;

结论:

  • 当前配置下的 实际定时周期 ≈ 204ns
  • 如果目标是 400ns ,请将 period = 95
相关推荐
zlinear数据采集卡10 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Dr.kangder11 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
恒锐丰科技韩生12 小时前
率能 SS6226|2.4~7.2V 低压双通道双 H 桥电机驱动 SOP16 玩具小家电专用芯片
嵌入式硬件·硬件工程
Dr.kangder14 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
萌新小白YXY15 小时前
SAE J1587/SAE J1708 协议笔记
笔记·单片机·嵌入式硬件
恒锐丰科技韩生16 小时前
率能 SS6635E|3.0~30V 直流双向 H 桥电机驱动 SOP8 玩具电子锁机器人分享
嵌入式硬件·硬件工程
嘉子的秃头日记16 小时前
机械革命“自动修复”无法修复你的电脑
stm32·单片机·电脑
恒锐丰科技林技术员16 小时前
高集成双通道 H 桥驱动芯片 SS6850H:低压直流电机驱动优选方案
嵌入式硬件·硬件工程
森旺电子16 小时前
电子负载使用介绍
单片机·嵌入式硬件
hsjiasb1 天前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos