QQ624353765 发表于 2025-10-8 09:08:20

有关定时器2与PWMB定时器同频问题

定时器2与PWMB定时器经过分频后这两个定时器频率的一样



分频寄存器计算公式如上图,最终测出来的时间并不一致



这是定时器2,打印T2的时间是256



这是PWMB定时器,打印CNTR时间是1537,差了好多倍

国芯人工智能 发表于 2025-10-8 09:12:00

您好,关于您提出的“定时器2与PWMB定时器同频问题”,即在经过分频后,两者的定时器频率理论上应一致,但实际测量结果显示两者计数值存在明显差异(定时器2计数值为256,PWMB计数值为1537),这一现象值得从系统时钟源、分频机制、寄存器配置、计数模式以及硬件行为等多个方面进行深入分析。

一、系统时钟源与分频机制分析

首先,我们需要确认定时器2和PWMB定时器是否共享同一个时钟源。在多数嵌入式系统中,定时器模块通常从系统时钟(如主频CLK)或外设时钟(PCLK)中分频获取输入时钟。若两者使用的时钟源不同,即便配置相同的分频系数,其实际计数频率也会不同。

建议检查以下几点:

1. 时钟源是否一致:
定时器2和PWMB是否都使用PCLK作为输入时钟?
是否存在时钟门控配置差异?

2. 分频寄存器是否配置正确:
请核对两个定时器的分频寄存器(如T2MOD、PWMBxMOD等)设置是否一致。
确保分频系数(Prescaler)的设置与公式一致。

3. 分频方式是否一致:
是否均为16位或8位分频?
是否存在自动重载与自由运行模式的差异?

二、计数器行为与工作模式分析

从您提供的截图来看,定时器2的计数值为256,而PWMB的CNTR值为1537。这表明:
定时器2可能工作在8位自动重载模式(如标准8051定时器模式),其最大计数值为256(0x00~0xFF);
PWMB定时器可能工作在16位自由运行模式,其最大计数值可达65536。

工作模式差异可能导致计数值差异巨大。

建议检查:

1. 定时器工作模式寄存器(如TMOD、PWMBxCON等)是否一致?
2. 是否启用了自动重载功能?
3. 是否设置了不同的计数方向(递增/递减)?

三、中断与计数清零机制分析

定时器在中断触发后通常会清零或重载初值,而PWMB定时器在周期匹配后也会自动重载。如果中断处理函数中未正确读取或清零计数值,可能导致读取值出现偏差。

建议检查:
是否在中断服务程序中正确读取了定时器2的TH2/TL2寄存器?
是否在PWMB中断中正确读取CNTR寄存器?
是否存在中断延迟或中断未响应导致计数溢出?

四、实测时间与理论值对比分析

根据您提供的公式:

定时器频率 = 系统时钟频率 / (12分频系数)

假设系统时钟为12MHz,则:
若分频系数为12,则定时器频率为:12MHz / (1212) = 83.33kHz
对应的计数周期为:1 / 83.33kHz ≈ 12μs

若定时器2计数值为256,则总时间为:

25612μs = 3072μs = 3.072ms

而PWMB计数值为1537,则:

153712μs = 18444μs = 18.444ms

这表明两者在相同时间窗口内计数结果差异明显,说明其输入频率或计数方式不同。

五、可能的故障点与排查建议

| 项目 | 检查点 | 建议操作 |
|------|--------|----------|
| 时钟源 | 定时器2与PWMB是否使用相同时钟源 | 查看系统时钟树配置 |
| 分频系数 | 分频寄存器配置是否一致 | 对比T2MOD与PWMBxMOD寄存器 |
| 工作模式 | 是否为相同计数模式(如8位/16位) | 查看TMOD、PWMBxCON等寄存器 |
| 中断处理 | 是否及时读取并清零计数器 | 检查中断服务程序逻辑 |
| 实际频率 | 使用示波器测量定时器中断输出频率 | 验证理论与实际是否一致 |

六、总结与建议

综上所述,定时器2与PWMB定时器在分频后出现明显计数值差异,主要可能原因包括:

1. 时钟源不一致;
2. 分频系数配置不同;
3. 工作模式设置不同(如8位 vs 16位);
4. 中断处理逻辑不一致或存在延迟;
5. 读取计数器的方式存在差异。

建议您从以下几个方面着手排查:
使用示波器测量两个定时器的中断输出频率,确认是否真正同步;
打印并比对两者的分频寄存器、模式寄存器配置;
在中断中统一读取计数值并记录,避免因延迟造成误差;
确保两者使用相同的时钟源与分频策略。

如能提供更详细的代码片段或寄存器配置截图,将进一步有助于问题定位。

如有需要,我可协助您进一步分析代码或配置逻辑。

祝调试顺利!

[本文内容由国芯人工智能辅助生成,仅供参考]

王昱顺 发表于 2025-10-8 17:31:10

PWMB_CNT受到PWMB_ARR值得限制
使用实际程序测试,并无测量时钟差异较大现象,以下是实际测试程序:
程序使用24Mhz使用,串口1(P30,P31,115200bps)

测试接受到得时钟数字一致:
程序如下图所示

完成程序可从此下载,程序使用AI-CUBE生成:


页: [1]
查看完整版本: 有关定时器2与PWMB定时器同频问题