TMR时钟模块时钟源为啥纹丝不动? Ø 问题 客户使用MCUXpresso ConfigTools 自定义了的一个时钟配置(如图1所示),目标是将系统时钟降到25MHz,实现低功耗运行。为了验证时钟配置是否正确,使用MCUXpresso Config Tools生成的clock_config.c和clock_config.h替代inputcapture_outputpwm工程中的clock_config.c和clock_config.h。在debug时,发现QTMR_SOURCE_CLOCK还是跟原先保持一致,都是125MHz,但是用示波器观察从J17_5脚输出的PWM波,发现频率为9.95 KHz,约为原先的1/5。这表明自定义的时钟配置其实是工作的了,但为啥QTMR_SOURCE_CLOCK还是保持125MHz呢? 图1时钟配置 图2PWM脉冲 Ø 原因解释 QTMR_SOURCE_CLOCK是通过CLOCK_GetFreq(kCLOCK_IpgClk)函数获得,而该函数是通过获取Periph clock和AHB_PODF,IPG_PODF分频系数后计算所得,在CLOCK_GetPeriphClkFreq函数中,直接返回的Periph clock:500 MHz在ARM_PODF分配系数为1时是正确的,而客户自定义了的时钟配置中,ARM_PODF却为5(如图4所示)。 所以Periph clock实际应为500/5=100 MHz,而示波器中显示出的PWM脉冲频率也证明了这点。 图3CLOCK_GetPeriphClkFreq 图4ARM_PODF:5 |