GPTM定时器高级模式解析:边沿计数、时间捕获与PWM生成

发布时间:2026/7/26 10:57:01
GPTM定时器高级模式解析:边沿计数、时间捕获与PWM生成 1. GPTM定时器嵌入式系统的“心跳”与“节拍器”在嵌入式系统的世界里如果说CPU是大脑那么定时器就是维持系统生命体征的“心脏”和协调肢体动作的“节拍器”。无论是让一个LED灯以精确的1Hz频率闪烁还是驱动无刷电机以每分钟一万转的速度稳定运行亦或是捕捉一个来自旋转编码器的脉冲信号来计算转速其底层都离不开定时器的精准运作。通用定时器模块GPTM作为微控制器中最基础也最强大的外设之一其重要性不言而喻。它不仅仅是一个简单的计数器更是一个多面手能够根据配置化身为事件计数器、时间戳记录仪或波形发生器。今天我们就深入芯片内部拆解GPTM的三种高级工作模式输入边沿计数模式、输入边沿时间模式和PWM模式。很多开发者可能只停留在使用定时器产生一个简单中断的层面但对于如何用它来“感知”外部世界边沿计数/时间测量和“控制”外部世界PWM输出其内部的寄存器配置逻辑和工作时序却常常令人困惑。我将结合多年的实际调试经验不仅告诉你这些模式怎么配置更会重点解释为什么要这样配置以及在配置过程中有哪些容易踩坑的细节。你会发现读懂芯片手册中的时序图远比死记硬背寄存器位字段更有价值。2. 核心模式深度解析从原理到寄存器映射在深入具体模式之前我们必须建立一个统一的认知框架。GPTM本质上是一个带有自动重载功能的可编程计数器。它的核心资源包括一个计数器GPT:TnR、一个决定计数上限的重载寄存器GPT:TnILR、一个可选的预分频器GPT:TnPR来降低计数时钟频率、一个匹配寄存器GPT:TnMATCHR用于产生特定事件以及一套复杂的控制逻辑GPT:TnMR, GPT:CTL来定义其行为模式。2.1 模式切换的核心GPT:TnMR寄存器精讲所有模式的秘密都藏在GPTM Timer n Mode Register (GPT:TnMR) 中。这是一个需要重点理解的寄存器它的位字段共同决定了定时器的“人格”。TAMR (Bits 1:0) - 定时器模式这是主模式开关。0x1代表单次触发One-Shot0x2代表周期Periodic0x3代表捕获模式。请注意输入边沿计数和时间模式都属于“捕获模式”这个大类之下具体是计数还是计时由另一个位决定。TACM (Bit 2) - 捕获模式选择这是捕获模式下的子模式开关。这是区分边沿计数和边沿时间的关键位。0代表边沿计数模式Edge-Count1代表边沿时间模式Edge-Time。TAAMS (Bit 3) - 交替模式选择0时定时器处于捕获/比较模式即我们讨论的边沿计数/时间模式。1时定时器进入PWM模式。特别注意要启用PWM模式除了设置TAAMS1还必须清除TACM即设为0并将TAMR设置为0x2周期模式。这是一个常见的配置陷阱很多人以为PWM是一个完全独立的模式实际上它是“周期模式”与“交替模式”结合下的一个特殊状态。TACDIR (Bit 4) - 计数方向0为向下计数从重载值到01为向上计数从0到匹配值。这个方向选择会直接影响中断触发点和计数器行为逻辑。理解这些位的组合关系至关重要。例如配置边沿计数模式你需要设置 TAMR0x3 (捕获模式) 且 TACM0。而配置PWM模式则需要 TAMR0x2 (周期模式)、TAAMS1 且 TACM0。注意芯片手册中强调在PWM模式下“等待触发”Wait on trigger即TAWOT位功能是不支持的。这意味着一旦使能定时器PWM输出会立即开始无法通过另一个定时器来同步启动。在设计需要多个PWM严格同步的系统时需要考虑使用同步寄存器GPT:SYNC或其他方案。2.2 输入信号的“门槛”边沿检测电路与频率限制无论是边沿计数还是边沿时间模式其前提都是要能可靠地检测到输入引脚上的边沿跳变。芯片手册里有一个非常关键但常被忽略的Note为了确保可靠检测在上升沿之后输入信号必须至少保持两个系统时钟周期的高电平同样下降沿之后也必须至少保持两个系统时钟周期的低电平。这个要求直接引出了一个重要的设计约束输入信号的最大频率不能超过系统时钟频率的四分之一f_max f_sys / 4。为什么是1/4我们可以简单推导假设最坏情况是一个占空比为50%的方波那么高电平和低电平的持续时间各占半个周期。为了在上升沿和下降沿后都能满足“保持2个时钟周期”的要求半个周期的时间必须大于等于2个时钟周期。因此整个信号周期T必须大于等于4个时钟周期Tc即信号频率f_signal ≤ f_sys / 4。实操心得在测量高频信号或处理来自机械开关可能带有抖动的信号时这个限制必须被充分考虑。如果你的信号频率接近这个极限检测可能会出错。对于可能存在抖动的低频信号虽然频率上满足要求但仍建议在软件或硬件上如RC滤波增加去抖措施防止一次物理抖动被误判为多个边沿。3. 输入边沿计数模式把外部事件变成数字输入边沿计数模式的核心功能很简单它把外部信号的电平跳变边沿当作需要计数的“事件”。计数器初始装载一个值每检测到一个指定的边沿上升沿、下降沿或双边沿计数器就递增或递减1直到计数值达到预设的“匹配值”然后触发中断并停止。这非常像体育比赛中的计分牌每发生一件事比如进球分数就变化一次直到达到赛点。3.1 工作流程与寄存器配置详解让我们结合手册中的图13-2和配置序列来还原其工作场景。假设我们需要计数4个边沿事件。配置定时器结构首先通过GPT:CFG寄存器将定时器配置为16位独立模式值0x4。这决定了计数器GPT:TnR是16位宽并可配合一个8位的预分频器GPT:TnPR形成24位的计数能力。设置模式寄存器在GPT:TnMR寄存器中写入TnMR0x3捕获模式TnCM0边沿计数模式。同时通过GPT:CTL寄存器的TnEVENT字段选择要捕获的边沿类型例如0x3代表捕获上升沿和下降沿双边沿。设定初始值与目标值这是理解该模式的关键。在向下计数模式下初始值GPT:TnILR设置为0x000A十进制10。这好比给你的计数器10发“初始弹药”。匹配值GPT:TnMATCHR设置为0x0006十进制6。这意味着当计数器减到6时任务完成。需要计数的事件数初始值 - 匹配值 10 - 6 4。所以计数器从10开始每检测到一个边沿就减1经过4次减1后到达6触发中断。重要提示在向上计数模式下逻辑相反。计数器从0开始向上计数匹配值GPT:TnMATCHR直接等于需要计数的事件数量。计数器达到该值后触发中断。使能与运行设置GPT:CTL中的TnEN位为1使能定时器。定时器开始等待输入边沿。中断与停止当第4个边沿到来计数器值等于匹配值0x0006时硬件会自动置位GPT:RIS寄存器中的CnMRIS位如果中断已使能GPT:IMR.CnMIM则产生中断。最关键的一点来了此时硬件会自动清除TnEN位定时器停止计数。如图13-2所示后续到来的边沿将被完全忽略。你必须通过软件重新使能TnEN位定时器才会从初始值重新开始新一轮计数。配置序列代码示意基于向下计数模式// 1. 确保定时器禁用 HWREG(GPT0_BASE GPT_O_CTL) ~GPT_CTL_TAEN; // 2. 配置为16位定时器模式 HWREG(GPT0_BASE GPT_O_CFG) 0x00000004; // 3. 配置为边沿计数模式捕获双边沿 HWREG(GPT0_BASE GPT_O_TAMR) (GPT_TAMR_TACMR_DIS | GPT_TAMR_TAMR_CAP); // 4. 设置捕获事件类型为双边沿 HWREG(GPT0_BASE GPT_O_CTL) | GPT_CTL_TAEVENT_BOTH; // 5. 设置预分频器如果需要 // HWREG(GPT0_BASE GPT_O_TAPR) prescaleValue; // 6. 设置初始装载值例如计数4个事件0xA - 0x6 4 HWREG(GPT0_BASE GPT_O_TAILR) 0x000A; // 7. 设置匹配值 HWREG(GPT0_BASE GPT_O_TAMATCHR) 0x0006; // 8. 使能捕获匹配中断 HWREG(GPT0_BASE GPT_O_IMR) | GPT_IMR_CnMIM; // 9. 使能定时器开始等待边沿 HWREG(GPT0_BASE GPT_O_CTL) | GPT_CTL_TAEN;3.2 典型应用场景与避坑指南应用场景旋转编码器脉冲计数这是最典型的应用。将编码器的A相或B相信号接入定时器捕获引脚配置为计数上升沿或双边沿即可直接获取位置脉冲数。结合两个定时器分别计数A、B相还可以实现方向判断。频率较低的脉冲信号计数例如计量水流传感器、光电断续器输出的脉冲数。事件发生次数监控比如统计一个按钮被按下的次数需硬件去抖。避坑指南自动停止陷阱务必记住在向下计数模式下达到匹配值后定时器会自动停止TnEN被清零。如果你的应用需要连续计数例如编码器永远在旋转则需要在中断服务程序ISR中重新手动使能TnEN位或者考虑使用向上计数模式并利用计数器溢出回零中断来实现循环计数。匹配值计算一定要根据计数方向上/下正确计算匹配值。向下计数时事件数 GPT:TnILR - GPT:TnMATCHR向上计数时事件数 GPT:TnMATCHR。算错会导致计数次数不符合预期。信号质量再次强调输入信号的频率上限和稳定性。对于来自长导线的信号可能需要进行整形如施密特触发器后再接入MCU引脚。4. 输入边沿时间模式测量世界的“瞬间”如果说边沿计数模式回答的是“发生了多少次”那么边沿时间模式回答的就是“每次间隔多久”。在此模式下定时器作为一个自由运行的计数器通常从0xFFFF开始向下计数或从0开始向上计数当检测到指定的输入边沿时它会瞬间“冻结”当前计数器的值并将其锁存到GPT:TnR寄存器中。通过读取两次边沿捕获时的GPT:TnR值并考虑计数方向我们就能计算出两个边沿之间的时间间隔。4.1 工作流程与时间计算参考手册图13-3假设定时器配置为16位向下计数无预分频时钟源为系统时钟。初始化与启动配置GPT:TnMR寄存器设置TnMR0x3捕获模式TnCM1边沿时间模式。设置GPT:CTL.TnEVENT选择边沿类型例如上升沿。写入初始值到GPT:TnILR例如0xFFFF。使能定时器TnEN1计数器开始从0xFFFF向下自由运行。第一次捕获当输入引脚出现第一个上升沿时硬件立即将当前计数器值假设为X捕获到GPT:TnR寄存器并产生捕获事件中断CnERIS置位。此时GPT:TnV寄存器仍在继续自由计数。第二次捕获当第二个上升沿到来时硬件再次捕获当前计数器值假设为Y到GPT:TnR寄存器覆盖旧值并再次产生中断。计算时间间隔关键在于处理计数器向下计数可能发生的“回绕”。假设时钟频率为Fclk计数器位宽为N例如16位。情况一无回绕如果X Y说明两次捕获之间计数器没有从0回绕到0xFFFF。时间间隔 ΔT (X - Y) * Tclk。情况二发生回绕如果X Y说明在两次捕获之间计数器经历了从0回绕到0xFFFF的过程。时间间隔 ΔT [(X 2^N) - Y] * Tclk。通用公式向下计数ΔT ((X - Y) ((1N)-1)) * Tclk。这里 ((1N)-1)操作有效地处理了借位回绕。对于向上计数模式公式更简单ΔT (Y - X) * Tclk同样需要考虑从最大值回绕到0的情况。配置序列代码示意边沿时间模式// 1. 禁用定时器 HWREG(GPT0_BASE GPT_O_CTL) ~GPT_CTL_TAEN; // 2. 配置为16位定时器 HWREG(GPT0_BASE GPT_O_CFG) 0x00000004; // 3. 配置为边沿时间模式捕获上升沿 HWREG(GPT0_BASE GPT_O_TAMR) (GPT_TAMR_TACMR_EN | GPT_TAMR_TAMR_CAP); HWREG(GPT0_BASE GPT_O_CTL) | GPT_CTL_TAEVENT_POS; // 4. 设置初始装载值对于向下计数通常设为最大值以最大化测量范围 HWREG(GPT0_BASE GPT_O_TAILR) 0xFFFF; // 5. 使能捕获事件中断 HWREG(GPT0_BASE GPT_O_IMR) | GPT_IMR_CnEIM; // 6. 使能定时器开始自由运行计数 HWREG(GPT0_BASE GPT_O_CTL) | GPT_CTL_TAEN; // 在中断服务程序中 void Timer0A_ISR(void) { uint32_t status HWREG(GPT0_BASE GPT_O_RIS); if (status GPT_RIS_CnERIS) { // 读取捕获到的时刻值 uint32_t capture_value HWREG(GPT0_BASE GPT_O_TAR); // 处理capture_value例如与上一次捕获值计算时间差 // ... // 清除中断标志 HWREG(GPT0_BASE GPT_O_ICR) GPT_ICR_CnECINT; } }4.2 应用场景与精度提升技巧应用场景脉冲宽度测量测量一个正脉冲或负脉冲的宽度。分别捕获上升沿和下降沿的时刻相减即可得到脉宽。信号频率测量测量周期性信号如方波的频率。连续捕获两个同向边沿如上升沿的时刻时间差的倒数即为频率。Freq 1 / (ΔT * 边沿数)。对于占空比变化的信号此方法比测量脉宽更稳定。事件间隔测量测量两个非周期性事件之间的时间间隔。精度提升与避坑技巧利用预分频器扩展范围16位计数器在50MHz系统时钟下最大测量周期约为1.3ms0xFFFF / 50e6。加入8位预分频器后可形成24位计数器将最大测量周期扩展到约335秒2^24 / 50e6但会牺牲时间分辨率最小分辨率为预分频后的时钟周期。注意“回绕”与超时手册中特别提醒在边沿时间模式下如果两次边沿间隔时间可能超过计数器的最大周期考虑预分频则存在错过边沿的风险。例如在无预分频的16位向下计数模式下如果信号周期大于1.3ms且第一个边沿捕获时计数器值很小接近0那么在下一次边沿到来前计数器可能已经回绕并经过了那个值导致无法捕获。解决方案要么使用预分频器扩大范围要么使用另一个定时器作为“看门狗”在超时后提醒主定时器可能发生了错过事件。中断延迟与读数从边沿发生到CPU进入ISR读取GPT:TnR存在中断延迟。在此期间自由运行的计数器GPT:TnV仍在变化。手册指出你可以通过读取GPT:TnV和GPT:TnPV预分频值来估算这个延迟从而进行更精确的时间补偿。这对于高精度时间测量应用至关重要。连续测量与缓冲区在高速连续测量时ISR中读取捕获值并存入缓冲区的速度必须快于信号边沿产生的速度否则会丢失事件。可以考虑使用DMA如果支持将GPT:TnR的值自动传输到内存中。5. PWM模式用数字量控制模拟世界脉冲宽度调制PWM是嵌入式控制中最常用的技术之一。通过快速开关数字信号并改变一个周期内高电平所占的比例占空比可以等效地输出不同的平均电压从而无级调节LED亮度、电机转速或开关电源的输出电压。GPTM的PWM模式硬件生成波形无需CPU持续干预效率极高。5.1 PWM生成原理与寄存器配置GPTM的PWM模式基于周期性的向下计数器工作。其核心逻辑是周期由GPT:TnILR和GPT:TnPR的值决定。计数器从该值开始向下计数到0然后自动重载周而复始。PWM频率 定时器时钟频率 / (GPT:TnILR 1)。占空比由GPT:TnMATCHR和GPT:TnPMR的值决定。当计数器值等于匹配值时PWM输出引脚的电平发生翻转。输出极性由GPT:CTL.TnPWML位控制。0表示输出信号在计数器重载时周期开始为高在匹配时变低1则相反周期开始为低匹配时变高。这决定了你是控制高电平有效时间还是低电平有效时间。手册图13-4给出了一个经典示例系统时钟50MHz需要生成周期1ms、占空比66%的PWM波。计算周期值PWM周期 T 1ms 0.001s。定时器时钟周期 Tclk 1/50MHz 20ns。需要的计数值 N T / Tclk 0.001 / 20e-9 50000。转换为十六进制为 0xC350。所以GPT:TnILR 0xC350。计算匹配值占空比66%即高电平时间 Thigh 0.66 * 1ms 0.66ms。对应的计数值 M Thigh / Tclk 0.00066 / 20e-9 33000。十六进制为 0x8118。但是请注意计数器是向下计数的且输出在匹配点翻转。如果设置TnPWML0默认输出在周期开始为高匹配点变低那么高电平时间对应的计数值应该是从装载值到匹配值之间的计数次数即GPT:TnILR - GPT:TnMATCHR 1。因此GPT:TnMATCHR GPT:TnILR - M 1 50000 - 33000 1 17001十六进制为0x4269。手册中给出的例子是GPT:TnMATCHR 0x411A16666这对应的高电平计数值为 50000 - 16666 33334占空比约为66.67%。细微差别源于取整原理一致。配置流程禁用定时器TnEN0。配置GPT:CFG为16位模式0x4。配置GPT:TnMR设置TnMR0x2周期模式TAAMS1PWM模式TACM0必须为0。配置GPT:CTL设置TnPWML位决定输出极性。装载GPT:TnILR和GPT:TnMATCHR。使能定时器TnEN1。PWM配置代码示意void ConfigurePWM(uint32_t period_ticks, uint32_t duty_ticks, bool invert) { // 1. 禁用定时器 HWREG(GPT0_BASE GPT_O_CTL) ~GPT_CTL_TAEN; // 2. 配置为16位定时器 HWREG(GPT0_BASE GPT_O_CFG) 0x00000004; // 3. 配置为PWM模式周期模式 uint32_t tamr_value GPT_TAMR_TAMR_PERIOD | GPT_TAMR_TAAMS_EN; // TACM必须为0 HWREG(GPT0_BASE GPT_O_TAMR) tamr_value; // 4. 配置输出极性 if(invert) { HWREG(GPT0_BASE GPT_O_CTL) | GPT_CTL_TAPWML; } else { HWREG(GPT0_BASE GPT_O_CTL) ~GPT_CTL_TAPWML; } // 5. 设置周期重载值 HWREG(GPT0_BASE GPT_O_TAILR) period_ticks; // 6. 设置匹配值决定占空比 // 注意对于向下计数TnPWML0时高电平时间 (TAILR - TAMATCHR) * Tclk HWREG(GPT0_BASE GPT_O_TAMATCHR) period_ticks - duty_ticks; // 7. 使能定时器开始输出PWM HWREG(GPT0_BASE GPT_O_CTL) | GPT_CTL_TAEN; }5.2 高级话题无毛刺更新与同步在实际动态调整PWM如电机调速、LED呼吸灯时直接修改GPT:TnILR周期或GPT:TnMATCHR占空比寄存器可能导致输出出现短暂的错误脉冲毛刺。为了解决这个问题GPTM提供了两种更新模式由GPT:TnMR寄存器中的TnMRSU位控制。TnMRSU 0立即更新在下一个时钟周期更新匹配寄存器。如果新旧值跨越了当前计数器值可能会产生一个极窄或极宽的脉冲。TnMRSU 1超时更新在当前PWM周期结束后下一个周期开始时才更新匹配寄存器。这保证了PWM输出的连贯性和无毛刺切换。这是大多数动态调整PWM应用的首选设置。另一个重要功能是定时器同步。通过GPTM0模块中的GPT:SYNC寄存器可以令多个定时器同时开始计数这对于需要多个PWM通道严格同步的应用如全桥电机驱动、多相电源至关重要。手册中图13-5到13-7详细说明了在设置TnPLO和TnMRSU位后CCP输出在不同匹配值与重载值关系下的行为这是实现复杂同步波形的基础。避坑指南匹配值等于重载值如果GPT:TnMATCHR等于GPT:TnILR根据TnPLO位的设置输出可能始终为高或始终为低无法产生有效的PWM边沿。通常应避免这种情况。动态修改周期值手册警告在PWM输出过程中如果将GPT:TnILR改为一个小于当前计数器值的数即使启用了超时更新模式也可能在输出端引入瞬态毛刺。安全的做法是在修改前禁用定时器修改后再使能但这会导致PWM输出短暂停止。更优雅的方式是利用同步更新机制并仔细设计修改时机。死区时间生成标准的GPTM PWM模式本身不直接支持带死区时间的互补PWM输出常用于H桥驱动。这通常需要结合另一个定时器或高级PWM外设来实现。GPTM更适合用于简单的单路PWM控制。6. 实战配置清单与常见问题排查经过前面的原理剖析我们可以将不同模式的配置要点总结成一张速查表并附上调试中常见的问题与解决方法。6.1 三种模式配置要点速查表特性输入边沿计数模式输入边沿时间模式PWM模式核心目的统计外部边沿事件次数测量边沿之间的时间间隔生成可调占空比的方波GPT:TnMR.TAMR0x3 (捕获模式)0x3 (捕获模式)0x2 (周期模式)GPT:TnMR.TACM0 (边沿计数)1 (边沿时间)0 (必须为0)GPT:TnMR.TAAMS0 (捕获/比较模式)0 (捕获/比较模式)1 (PWM模式)关键寄存器GPT:TnILR (初值)GPT:TnMATCHR (目标值)GPT:TnILR (初值通常0xFFFF)GPT:TnR (捕获值)GPT:TnILR (周期)GPT:TnMATCHR (匹配点决定占空比)计数方向逻辑向下初值-匹配值计数事件数初值-匹配值向上0-匹配值计数事件数匹配值自由运行捕获瞬间值向下计数周期循环中断源GPT:RIS.CnMRIS (匹配中断)GPT:RIS.CnERIS (捕获事件中断)GPT:RIS.CnERIS (需使能TnPWMIE)使能后行为等待边沿计数到匹配值后自动停止自由运行边沿触发捕获并继续运行立即开始输出PWM波形典型应用编码器计数、脉冲累加脉宽测量、频率测量、事件时间戳LED调光、电机速度控制、蜂鸣器6.2 常见问题与排查技巧实录在实际项目中配置定时器时遇到的问题往往比想象中多。以下是我从调试记录中总结的几个典型问题问题1边沿计数模式无法产生中断。可能原因1TnEN位被自动清除后未重新使能。在向下计数模式下计数达到匹配值后硬件会自动清除TnEN。检查中断服务程序中或主循环里是否在需要重新计数时重新设置了TnEN位。可能原因2匹配值计算错误。使用向下计数时确保GPT:TnMATCHR GPT:TnILR - 期望计数值。使用向上计数时GPT:TnMATCHR 期望计数值。可以用调试器读取GPT:TnR寄存器观察其是否按预期变化。可能原因3输入信号不满足边沿检测要求。用示波器检查输入信号的频率是否超过系统时钟的1/4边沿后的电平保持时间是否足够2个系统时钟周期信号是否有过冲或振铃问题2边沿时间模式测量结果跳动很大或不准确。可能原因1未处理计数器回绕。在计算两个捕获值的时间差时必须使用前面提到的公式处理回绕情况简单的减法会得到错误结果。可能原因2中断延迟影响。对于高精度测量需要在ISR中读取GPT:TnV来估算从捕获发生到ISR执行的时间差并对结果进行补偿。或者考虑使用DMA来搬运捕获值消除中断延迟的影响。可能原因3预分频器配置错误。如果使用了预分频器计算时间间隔时需要将捕获值的差值乘以预分频值1。检查GPT:TnPR寄存器的配置。问题3PWM输出频率或占空比与计算值不符。可能原因1忽略了“1”。对于向下计数器从重载值N计数到0实际经历的周期数是N1个时钟周期。因此PWM频率 Fclk / (GPT:TnILR 1)。很多初学者直接用N计算导致频率略低于预期。可能原因2TnPWML极性理解错误。TnPWML位控制输出极性的反转。在计算匹配值时必须明确你期望的高电平时间对应的是计数器从哪个值到哪个值。最稳妥的方法是先用逻辑分析仪或示波器抓取实际波形再反推寄存器设置。可能原因3寄存器更新模式导致。在动态修改PWM参数时如果TnMRSU0立即更新可能会在当前周期产生毛刺或异常脉冲。如果要求无毛刺切换务必设置TnMRSU1超时更新并在一个完整的PWM周期结束后再检查新参数是否生效。问题4多个定时器无法同步启动。排查点检查是否错误地在PWM模式下使能了TAWOT等待触发位。手册明确说明PWM模式下不支持此功能。对于需要同步的定时器应使用GPT:SYNC寄存器。配置好各个定时器后先分别使能它们它们会处于等待状态然后通过对GPT:SYNC寄存器相应位写1来同时触发所有已配置的定时器开始计数。调试定时器示波器和逻辑分析仪是最得力的助手。不要只依赖软件仿真实际测量一下引脚上的波形往往能立刻发现问题所在。从最基础的周期中断开始逐步增加功能到边沿捕获、PWM输出每一步都验证波形和寄存器值是掌握GPTM模块最踏实的方法。