
针对S32K396 RTD MCAL PWM频率不匹配的问题,以下是可能的原因及解决方案:
PLL未正确启用
确认核心时钟实际运行在160MHz。若PLL未锁定(如配置错误或晶振失效),MCU可能回退到内部低速时钟(如16MHz IRC)。
检查步骤:
SCG_SOSCCSR(外部晶振状态)和 SCG_SPLLCSR(PLL状态)。SCG_CSR[DIVCORE] 确认分频系数是否为1。分频器误配置
即使未配置预分频器,默认分频可能生效(如SPB时钟分频)。
检查步骤:
SCG_SIM_IPB_CLK 和 SCG_SIM_PERIPH_CLK 分频寄存器,确认未对PWM时钟源分频。PWM时钟源选择错误
PWM模块可能未使用系统时钟,而是其他分频后的时钟(如总线时钟)。
检查步骤:
FTM_SC[CLKS]),确保选择系统时钟(如 CLKS=0x1)。FTM_MOD 寄存器是否设置为8000(周期值)。隐式预分频器启用
FTM模块的 FTM_SC[PS] 可能默认配置了分频(如PS=2对应分频4)。
检查步骤:
FTM_SC 寄存器,确认 PS 字段是否为0(分频1)。 FTM_SC_REG(FTM_INSTANCE) |= FTM_SC_PS(0); // 分频系数=1Pwm_Ip_HwConfig.c)检查 Pwm_Ip_ConfigType 结构体:{
.channelPeriod = 8000, // 确保周期值正确
.prescaler = 0, // 预分频器应为0
...
}Pwm_Ip_Init() 函数正确调用。示波器测量误差
测量高频信号时需注意探头带宽及触发设置。
检查步骤:
引脚复用配置错误
PWM输出引脚可能未正确配置为FTM功能。
检查步骤:
动态读取寄存器值
通过调试器实时检查关键寄存器:
// 读取系统时钟状态
uint32_t scg_csr = SCG_CSR;
// 读取FTM配置
uint32_t ftm_sc = FTM_SC_REG(FTM_INSTANCE);
uint32_t ftm_mod = FTM_MOD_REG(FTM_INSTANCE);最小化测试代码
排除其他驱动干扰,单独测试PWM:
Pwm_Ip_Init(PWM_INSTANCE, &PwmConfig);
Pwm_Ip_SetDutyCycle(PWM_INSTANCE, PWM_CHANNEL, 50); // 50%占空比FTM_SC[PS]=0。若以上步骤仍无效,可能是硬件故障(如晶振未起振),需检查外部电路。
举报
更多回帖