S08PT FlexTimer互补PWM、死区与同步配置实战指南
1. 项目概述与FlexTimer核心价值在嵌入式电机控制、数字电源或者任何需要精确功率开关的场合PWM信号的生成与控制是底层硬件的基石。很多工程师刚开始接触时可能会使用MCU基础定时器TPM的输出比较功能来生成PWM这确实能应付简单场景。但一旦项目复杂度上升比如需要驱动一个H桥来控制直流电机正反转或者构建一个三相逆变器你就会立刻遇到两个棘手的问题如何确保上下桥臂的驱动信号绝对错开防止电源直通短路烧毁MOS管以及如何让多个定时器模块的PWM信号整齐划一地更新避免因软件写入时序差导致的波形畸变这正是恩智浦S08PT微控制器中FlexTimer模块大显身手的地方。我经手过不少从S08AC/FL系列迁移过来的老项目原先用软件“打补丁”方式模拟死区和同步不仅代码臃肿实时性也堪忧。FlexTimer作为TPM的增强版其真正的价值在于将“互补输出”、“死区插入”、“硬件同步触发”和“故障保护”这些高级功能全部硬件化。这意味着你只需要在初始化阶段正确配置一堆寄存器后续的波形安全生成、同步更新甚至紧急关断都可以由硬件自动、可靠地完成CPU得以解放出来处理更上层的算法。简单来说FlexTimer让你从“手动挡”切换到了“自动挡”并且这个“自动挡”还自带防撞死区和车队协同同步功能。本文将以S08PT的FlexTimer模块特别是FTM2为蓝本抛开数据手册的碎片化描述结合我实际在无刷电机驱动项目中的踩坑经验系统性地拆解如何配置互补PWM、插入死区时间并利用硬件同步机制实现多个PWM信号的精准协同。无论你是正在评估S08PT还是正在为现有设计寻找更可靠的定时方案这些实操细节都能直接拿来参考。2. FlexTimer互补PWM与死区插入机制详解2.1 从基础PWM到互补PWM的跨越在深入寄存器之前我们必须先理解“互补PWM”在功率电子中的核心诉求。以一个典型的H桥电路为例控制电机转向需要一对信号一个控制上桥臂High-Side一个控制下桥臂Low-Side。理想情况下我们希望这两个信号是反相的即一个为高时另一个为低。但在现实中MOS管或IGBT的开关并非瞬间完成存在开启延迟Turn-On Delay和关断延迟Turn-Off Delay。如果简单地将一对完全反相的信号施加于上下桥臂在状态切换的瞬间可能会出现一个管子尚未完全关断而另一个管子已经开始导通的“共态导通”现象这相当于将电源正负极直接短路电流激增瞬间损坏功率器件。因此“互补PWM”并非简单的逻辑反相它需要在两路反相信号之间插入一个“两者都为低”对于高电平有效的驱动而言的安全间隔这个间隔就是“死区时间”Dead Time。在这段时间内确保上下两个开关管都处于关断状态从而杜绝直通风险。FlexTimer的“组合模式”COMBINE Mode正是为此而生。当你将FTMx_COMBINEn寄存器的COMBINE位置1时就启用了通道n和通道n1的互补配对。此时这两个通道不再独立工作而是作为一个整体。通常通道n作为主通道PWM A通道n1作为互补通道PWM B。FTMx_COMBINEn寄存器中的COMP位决定了互补通道的输出行为模式。一种常见且实用的模式是设置COMP1并配置为“在通道n匹配时置高在通道n1匹配时置低”即Set on Match, Clear on Match of the complementary channel。这样你只需分别设置通道n和通道n1的比较值CnV和Cn1V硬件就会自动生成中心对齐或边沿对齐的互补PWM波形并留出由DEADTIME寄存器控制的死区窗口。2.2 死区时间计算、配置与实测波形死区时间的配置是FlexTimer应用中的关键一步配置不当要么死区不足导致风险要么死区过长降低输出电压利用率。S08PT的FlexTimer通过FTMx_DEADTIME寄存器进行控制这个寄存器的配置需要一点计算。DEADTIME寄存器通常包含两个关键字段死区时间预分频器DTPS和死区时间值DTVAL。死区时间以系统时钟周期为单位的计算公式一般为死区时间 DTVAL × DTPS系数 × 系统时钟周期。以数据手册中的代码片段FTM2_DEADTIME 0x94;为例我们需要拆解这个十六进制值0x94二进制1001 0100。假设寄存器定义中高几位如bit5:4是DTPS低几位如bit5:0是DTVAL。解析DTPS和DTVAL0x94的二进制1001 0100。假设DTPS在bit5:4其值为10二进制对应预分频系数可能是4具体需查手册常见映射001, 012, 104, 118。假设DTVAL在bit5:0其值为010100二进制即十进制20。计算死区时钟数那么死区时间 DTVAL × DTPS系数 20 × 4 80个系统时钟周期。换算为实际时间如果系统时钟BUS Clock是8MHz则一个时钟周期为125ns。因此配置的死区时间 80 × 125ns 10μs。这个时间对于多数中小功率的MOSFET驱动来说是足够的能够覆盖器件的开关延迟。注意死区时间的插入位置由FTMx_POL寄存器的极性控制位POLn和POLn1共同决定。当两者都为0默认高电平有效时死区插入在互补信号的上升沿。这意味着在主通道PWM A从低变高、互补通道PWM B从高变低的这个跳变沿硬件会先让两个输出都保持低电平无效状态度过死区时间然后再让主通道变高。在另一个跳变沿PWM A从高变低PWM B从低变高同理。这种机制确保了在任何开关切换瞬间都存在一个全低的安全窗口。实操心得死区时间并非越大越好。过长的死区时间会压缩有效PWM占空比的范围尤其在低占空比或高频率时可能导致无法输出有效的驱动信号。我的经验是先用功率器件的Datasheet确定其最大开关延迟时间通常包括导通延迟td(on)和关断延迟td(off)然后在此基础上增加20%-50%的裕量作为初始死区值。最后一定要用示波器同时测量上下桥臂的驱动信号确认在死区窗口内两者确实都为低或都为高取决于极性配置并且没有重叠。2.3 初始化代码实例与寄存器逐行解读让我们结合一个完整的初始化代码片段将理论落实到具体的寄存器操作上。以下代码配置FTM2的通道0和1为互补PWM对并插入死区。/* 假设系统时钟为8MHz目标PWM频率为8kHz死区时间10us */ /* 1. 使能FlexTimer模块 */ FTM2_MODE | FTM_MODE_FTMEN_MASK; /* FTMEN1使能高级功能 */ /* 2. 配置通道0和1为互补模式并设置匹配行为 */ FTM2_COMBINE0 0x03; /* COMBINE01 (组合通道01), COMP1 (互补模式), 其他位如DECAPEN0, 具体行为需结合手册 */ /* 3. 配置死区时间 */ FTM2_DEADTIME 0x94; /* 假设DTPS4, DTVAL20死区80个系统时钟周期 */ /* 4. 设置PWM周期 */ FTM2_MOD 1000 - 1; /* PWM周期 (MOD1) / 系统时钟频率。8MHz/8kHz1000个计数 */ /* 5. 设置通道比较值决定占空比 */ FTM2_C0V 200; /* 通道0匹配值占空比 C0V / (MOD1) 20% */ FTM2_C1V 800; /* 通道1匹配值通常与C0V配合生成互补信号具体逻辑由COMP模式决定 */ /* 6. 配置通道模式 */ FTM2_C0SC 0x28; /* MSB:ELSnB:ELSnA 10, 表示输出比较高电平有效匹配时清零(具体模式需查表) */ FTM2_C1SC 0x28; /* 通道1配置与通道0互补 */ /* 7. 启动定时器 */ FTM2_SC 0x08; /* CLKS01 (选择系统时钟)PS0 (预分频1:1)开始计数 */关键点解析FTM2_COMBINE0 0x03;这里的0x03需要根据数据手册的位域定义来理解。它通常意味着使能组合COMBINE1和互补COMP1模式并可能设定了特定的匹配行为如“在通道0匹配时置高在通道1匹配时置低”。FTM2_C0SC和FTM2_C1SC配置为0x28这需要参考“Channel (n) Status and Control”寄存器的定义。0x28二进制0010 1000通常表示MSnB:MSnA0通道配置为输出比较ELSnB:ELSnA10具体边缘行为例如高电平有效在匹配时翻转或清零。务必查阅具体型号的数据手册确认该值对应的精确输出行为是否与你的互补模式设定匹配。占空比计算在边沿对齐模式下占空比 (CnV) / (MOD 1)。中心对齐模式计算方式不同。示例中MOD999C0V200占空比约为20%。3. PWM同步机制硬件触发与软件触发实战3.1 为什么需要PWM同步在复杂的控制系统中常常需要多个PWM通道协同工作例如三相逆变器需要6路严格同步的PWM。如果通过软件依次更新各个FTM模块的周期MOD和占空比CnV寄存器由于写入指令需要时间会导致各通道的更新时刻存在微小的差异。在高速开关频率下如几十kHz这种差异可能造成一个开关周期内各相不平衡引起电流谐波、转矩脉动甚至系统不稳定。FlexTimer的PWM同步机制就是为了解决这个问题。它允许你将多个FTM模块的计数器“对齐”并在一个特定的、统一的时刻如同步触发信号的边沿批量更新所有预装在“写缓冲区”里的MOD和CnV值。这样所有通道的PWM参数都在同一个时钟边界生效保证了绝对的同步性。3.2 同步触发源与配置逻辑FlexTimer支持两种同步触发方式硬件触发和软件触发。选择哪种由FTMx_MODE[PWMSYNC]位控制。PWMSYNC 0软件和硬件触发都可以用于同步MOD、CnV、OUTMASK寄存器和计数器。PWMSYNC 1MOD和CnV寄存器仅由软件触发同步OUTMASK和计数器仅由硬件触发同步。重要警告数据手册明确指出不要同时混用软件和硬件触发否则可能导致不可预测的行为。在实际项目中我强烈建议根据你的主控逻辑清晰选择一种。如果是基于定时中断的周期更新用软件触发简单直接如果需要与其他外设如ADC采样、另一个定时器严格挂钩则用硬件触发。硬件触发更加精确因为它不依赖于CPU指令流。S08PT的FTM2提供了三个硬件触发源TRIG0, TRIG1, TRIG2它们可以来自其他模块的输出例如TRIG0模拟比较器ACMP输出。TRIG1FTM0通道0的输出。TRIG2由系统选项寄存器SYS_SOPT2[FTMSYNC]控制的软件可配置触发。你需要通过FTMx_SYNC寄存器来使能特定的硬件触发源TRIG0/1/2位。当被使能的触发源引脚上出现上升沿时就会产生一个硬件触发事件。软件触发则通过向FTMx_SYNC[SWSYNC]位写1来产生。这为你提供了在代码中任意时刻发起同步的灵活性。3.3 同步边界与寄存器更新时机触发事件来了具体在哪个时刻更新寄存器呢这由FTMx_SYNC寄存器中的CNTMAX和CNTMIN位决定也就是所谓的“同步边界”。CNTMAX 1在使能的触发事件发生后等待FTM计数器达到其最大值即MOD值时才更新写缓冲区的内容到实际寄存器。CNTMIN 1在使能的触发事件发生后等待FTM计数器达到其初始值CNTIN值通常为0时才进行更新。一个至关重要的实践提示S08PT的数据手册特别注明不建议使用CNTMAX1的同步方式且其结果不予保证。因此在S08PT上配置同步时务必设置CNTMIN1采用计数器回到最小值时更新的方式。这是很多从其他平台迁移过来的工程师容易忽略的坑。那么具体哪些寄存器会被同步更新呢这由一组控制位共同决定MOD寄存器同步控制PWM周期更新。需要FTMx_SYNC[SYNCEN]位对相应通道使能吗不对于MOD同步SYNCEN位是无关的X。其行为主要由PWMSYNC、REINIT、SYNCHOM、CNTMAX、CNTMIN组合控制见数据手册Table 19。一个常见的配置是PWMSYNC0,REINIT0,CNTMIN1。这样在硬件或软件触发后当计数器回到最小值时MOD寄存器更新。CnV寄存器同步控制PWM占空比更新。这必须在对通道的FTMx_COMBINEn[SYNCEN]位置1的前提下才会生效。同样其更新时机由PWMSYNC、REINIT、CNTMAX、CNTMIN等位控制见Table 20。通常配置与MOD同步一致以实现周期和占空比同时更新。计数器同步将计数器强制重置为初始值CNTIN。这在需要多个FTM严格对齐计数起点时非常有用。通过设置FTMx_SYNC[REINIT]1可以在触发事件发生时强制计数器重新从CNTIN开始计数。输出掩码同步通过FTMx_OUTMASK寄存器可以暂时屏蔽强制为无效状态某些通道的输出。其同步更新由FTMx_SYNC[SYNCHOM]位控制见Table 22。3.4 同步配置代码示例假设我们需要配置FTM2使其MOD和CnV寄存器在软件触发下于计数器最小值CNTIN时同步更新。同时我们使能通道0和1的互补对同步。/* 1. 使能FlexTimer高级功能 */ FTM2_MODE | FTM_MODE_FTMEN_MASK; /* 2. 配置通道0和1为互补模式并**使能该通道对的同步功能** */ FTM2_COMBINE0 0x03 | (1 3); /* 假设SYNCEN位是COMBINE0寄存器的bit3。COMBINE1, COMP1, SYNCEN1 */ /* 3. 配置同步控制寄存器 */ FTM2_SYNC 0x00; /* 先清零 */ FTM2_SYNC | (1 1); /* 设置CNTMIN1在计数器最小值时同步 */ /* 注意不设置TRIG0/1/2因为我们暂时只用软件触发。也不设置CNTMAX手册不推荐。*/ /* 4. 配置MODE寄存器选择软件触发可用于MOD/CnV同步 */ FTM2_MODE ~FTM_MODE_PWMSYNC_MASK; /* PWMSYNC 0 软件和硬件触发都可用 */ /* 5. 正常设置MOD, CnV等寄存器此时写入的是写缓冲区 */ FTM2_MOD 999; FTM2_C0V 300; FTM2_C1V 700; /* 6. 在需要更新PWM参数的代码位置例如定时中断中发起软件同步 */ FTM2_SYNC | FTM_SYNC_SWSYNC_MASK; /* 写1到SWSYNC位产生软件触发 */ /* 7. 清除软件触发位通常硬件会自动清除但手动清除是好习惯 */ FTM2_SYNC ~FTM_SYNC_SWSYNC_MASK;执行完第6步的软件触发后FTM2硬件会等待其计数器计数到CNTIN通常为0的瞬间然后将写缓冲区中的新MOD值999和新C0V/C1V值300/700一次性更新到实际工作的寄存器中从而实现无抖动的PWM参数切换。4. 故障控制与安全机制4.1 故障输入系统的紧急刹车在电机驱动或电源应用中过流、过压、过热等故障必须得到毫秒甚至微秒级的响应。FlexTimer的故障控制功能就是为此设计的硬件安全网络。当指定的故障输入引脚FAULTn被激活时FlexTimer可以立即将指定的PWM输出通道强制设置为预设的“安全状态”通常是无输出的低电平或高阻态完全绕过正常的PWM生成逻辑实现最快速度的保护。要使能故障控制需要满足一系列条件核心是设置FTMx_COMBINEn[FAULTEN]1以及配置FTMx_MODE[FAULTM]模式位。FAULTM位域决定了故障控制的范式和清除方式FAULTM 00故障控制禁用。FAULTM 01仅在偶数通道如Ch0, Ch2上使能故障控制且为手动清除模式。FAULTM 10在所有通道上使能故障控制手动清除模式。FAULTM 11在所有通道上使能故障控制自动清除模式。每个具体的故障输入引脚如FAULT0, FAULT1还需要通过FTMx_FLTCTRL寄存器中的FAULTnEN位单独使能。4.2 自动清除与手动清除模式抉择自动清除模式FAULTM11当故障输入信号FAULTIN恢复到非激活状态例如低电平并且一个新的PWM周期开始时被禁用的通道输出会自动恢复。这种模式适用于瞬态、可自恢复的故障如瞬间的电流毛刺。配置简单无需软件干预。/* 配置自动故障清除 */ FTM2_MODE | (0x03 4); /* 设置FAULTM11自动清除 */ FTM2_COMBINE1 | (1 6); /* 假设FAULTEN是COMBINE1的bit6使能通道23对的故障控制 */ FTM2_FLTCTRL | (1 0); /* 使能FAULT0输入引脚 */手动清除模式FAULTM01或10即使故障输入信号已经恢复通道输出仍保持被强制状态。必须由软件主动清除故障标志后输出才会在下一个PWM周期开始时恢复。这种模式适用于需要软件进行复杂故障处理、记录或确认的严重故障如持续过载、短路。/* 配置手动故障清除偶数通道 */ FTM2_MODE | (0x01 4); /* 设置FAULTM01偶数通道手动清除 */ FTM2_COMBINE1 | (1 6); /* 使能通道23对的故障控制 */ FTM2_FLTCTRL | (1 0); /* 使能FAULT0输入引脚 */ /* --- 在故障中断服务程序(ISR)中 --- */ void FTM2_Fault_ISR(void) { /* 1. 可选检查故障输入是否已恢复避免误清除 */ while(FTM2_FMS FTM_FMS_FAULTIN_MASK); // 等待FAULTIN引脚变低 /* 2. 清除故障标志的标准操作先读FMS再写0清除FAULTF位 */ uint8_t dummy FTM2_FMS; // 读取FMS寄存器 (void)dummy; // 防止编译器警告 FTM2_FMS ~FTM_FMS_FAULTF_MASK; // 写0清除总故障标志 /* 注意清除FAULTF会同时清除所有FAULTFn位 */ }手动清除的关键步骤数据手册强调在手动清除故障标志FAULTF前建议先检查FAULTIN位确认硬件故障输入信号确实已经消失以避免在故障依然存在时错误地恢复输出导致二次损坏。4.3 故障滤波抵御噪声干扰工业环境噪声无处不在故障输入引脚可能会受到毛刺干扰。FlexTimer提供了可编程的故障滤波器Fault Filter来防止误触发。通过FTMx_FLTFILTER[FFVAL]可以设置滤波宽度任何脉宽小于FFVAL个系统时钟周期的噪声脉冲都会被忽略。同时需要将对应故障通道的FTMx_FLTCTRL[FFLTRnEN]位置1来使能该滤波功能。例如如果系统时钟为8MHz125ns周期设置FFVAL8则只有脉宽大于8 * 125ns 1us的故障信号才会被识别有效滤除窄脉冲干扰。5. 高级功能输出初始化与特性优先级5.1 输出初始化确定性的启动状态在FlexTimer计数器启动之前或者发生故障/复位之后PWM输出引脚应该处于一个确定的安全状态通常全为低。FlexTimer的初始化功能Initialization允许你预先配置通道的初始输出电平。通过设置FTMx_OUTINIT寄存器的CHnOI位你可以指定每个通道在初始化后的输出值0或1。然后通过向FTMx_MODE[INIT]位写1可以强制所有通道立即进入这个预设的初始状态无论计数器是否运行。这在系统上电、软启动或紧急复位后确保功率级处于关断状态至关重要。配置初始化需要满足几个前提FTMEN1通道处于组合模式COMBINE1并且计数器被禁用CLKS00。/* 配置并执行输出初始化 */ FTM2_MODE | FTM_MODE_FTMEN_MASK; FTM2_COMBINE1 0x01; // 组合通道2和3 FTM2_OUTINIT 0x08; // 假设CH2OI0 (通道2初始低), CH3OI1 (通道3初始高) // ... 配置其他参数但先不启动计数器 (FTM2_SC的CLKS保持为00) FTM2_MODE | FTM_MODE_INIT_MASK; // 写1到INIT位强制输出为初始状态 // 现在可以安全地启动计数器了 FTM2_SC 0x08;5.2 特性优先级当多个功能冲突时FlexTimer集成了互补输出、死区插入、初始化、故障控制、输出掩码和极性控制等多个功能。如果多个功能试图同时影响同一个输出引脚谁说了算FlexTimer内部有一个固定的特性优先级链。根据数据手册的图示优先级从高到低依次为输出生成基础PWM → 组合与互补模式 → 死区插入 → 初始化 → 故障控制 → 输出掩码 → 极性控制。这意味着首先由FTM计数器与比较寄存器生成最原始的PWM波形。然后组合互补逻辑将其处理成一对互补信号。接着死区插入逻辑在互补信号的边沿插入安全间隔。之后初始化逻辑可以覆盖当前输出强制为初始值。故障控制拥有更高的优先级一旦触发可以覆盖初始化状态将输出强制到安全值。输出掩码可以再次屏蔽禁用通道输出。最后极性控制决定最终输出到引脚的电平是否反相。理解这个优先级至关重要。例如如果你同时使能了故障保护和初始化并且故障发生那么故障控制优先级更高将覆盖初始化设置的值。又比如死区插入是在互补信号生成之后进行的所以它插入的时间是基于经过互补逻辑处理后的信号边沿。6. 常见问题与调试技巧实录在实际项目调试FlexTimer时我遇到过不少典型问题。下面这个排查表汇总了常见症状、可能原因和解决方法希望能帮你快速定位问题。问题现象可能原因排查步骤与解决方法完全没有PWM输出1. 模块时钟未使能。2. FTMEN位未置1高级功能禁用。3. 计数器未启动SC.CLKS00。4. 引脚复用功能未正确配置为FTM输出。1. 检查系统时钟门控寄存器如SCG_C2确保FTM时钟已开启。2. 确认FTMx_MODE[FTMEN]1。3. 检查FTMx_SC[CLKS]是否选择了有效的时钟源非00。4. 查阅芯片引脚分配表配置PORTx_PCRn的MUX字段为FTM功能。只有一路有输出互补通道无输出或常高/常低1. 未正确配置组合/互补模式COMBINE/COMP位。2. 互补通道的比较值Cn1V设置不合理例如等于MOD或0。3. 两个通道的极性POL配置不一致或错误。1. 确认FTMx_COMBINEn寄存器的COMBINE和COMP位已按需设置。2. 检查CnV和Cn1V的值确保它们能生成有效的互补波形。对于“Set on Chn Match, Clear on Chn1 Match”模式通常CnV Cn1V。3. 检查FTMx_POL寄存器确保POLn和POLn1的设置符合你的有效电平定义。死区时间不生效或效果异常1. 未在互补模式下使能死区DEADTIME寄存器配置了但COMBINE模式不对。2. 死区时间值DTVAL或预分频DTPS计算错误导致时间过短示波器看不到或过长。3. 极性控制POL位配置影响了死区插入的边沿。1. 确保FTMx_COMBINEn[COMBINE]1且DECAPEN0。2. 根据系统时钟频率和所需死区时间重新计算并配置DTVAL和DTPS。用示波器双通道测量上下桥臂驱动信号验证死区窗口。3. 确认FTMx_POL设置。通常POLnPOLn10高有效时死区插入在上升沿。PWM参数占空比/频率更新不同步有抖动1. 未使用同步功能直接写CnV/MOD寄存器。2. 同步已配置但SYNCEN位未使能针对CnV同步。3. 使用了不推荐的CNTMAX同步模式。4. 软件触发后未等待同步完成就进行了其他操作。1. 为需要同步更新的通道对设置FTMx_COMBINEn[SYNCEN]1。2. 配置FTMx_SYNC寄存器务必使用CNTMIN1模式避免使用CNTMAX。3. 在更新写缓冲区后再触发同步写SWSYNC。4. 可以考虑在触发同步后等待计数器达到CNTIN或通过中断确认同步完成。故障保护功能不动作1. 故障控制未使能FAULTEN0或FAULTM00。2. 具体的故障输入引脚未使能FAULTnEN0。3. 故障滤波设置过严滤除了真实故障信号。4. 故障引脚复用功能或GPIO方向配置错误。1. 检查FTMx_COMBINEn[FAULTEN]和FTMx_MODE[FAULTM]。2. 检查FTMx_FLTCTRL寄存器确保对应的FAULTnEN位置1。3. 调整FTMx_FLTFILTER[FFVAL]或在调试初期先禁用滤波。4. 确认故障输入引脚已配置为FTM故障功能并且外部电路能产生有效的故障信号通常是低电平有效需查手册。进入停止模式后PWM异常1. 在低功耗模式下FTM的时钟被关闭。1. 如果需要在低功耗模式下保持PWM需配置系统时钟模式确保FTM的时钟源如总线时钟在所需模式下仍然运行。调试必备技巧示波器是你的最佳伙伴永远不要只相信代码。用示波器同时观察互补的两路PWM输出确认死区、占空比、频率和同步关系。寄存器查看在调试器如IDE的寄存器窗口中实时查看关键寄存器SC、CNT、CnV、SYNC、FMS等的值与你的配置和预期行为进行比对。分步初始化不要一次性写完所有初始化代码。按照“使能时钟 - 配置引脚 - 使能FTM - 配置基本模式 - 配置互补死区 - 配置同步 - 配置故障 - 启动计数器”的顺序每步后都检查输出或寄存器状态。理解“写缓冲区”MOD和CnV寄存器有写缓冲区。你直接写入的值并非立即生效而是在同步事件发生后才更新到真正的影子寄存器。在调试时注意区分你写入的值和计数器实际比较的值。