您好,
,我遇到了一个问题,在配置四个 PWM 外围设备中任何一个的时钟分频器时,如果使用的值不是 kPWM_Prescale_Divide_1,则所选 PWM 外围设备的计数器根本不起作用。
我使用的是 imxrt1062 处理器和 MCUXpresso IDE v11.9.1
,希望你们能尽快支持我。
下面是我配置和初始化 PWM 外围设备的代码片段。
静态 void pwm_init(void)
{
pwm_config_tpwmConfig;
pwm_input_capture_param_tcaptureConfig;
pwm_fault_param_tfaultConfig;
/* 读取 PWM 默认配置 */
PWM_GetDefaultConfig(&pwmConfig);
pwmConfig.时钟源= kPWM_BusClock;
pwmConfig.预标度= kPWM_Prescale_Divide_2;
pwmConfig.配对操作= kPWM_Independent;
pwmConfig.初始化控制= kPWM_Initialize_LocalSync;
pwmConfig.重载逻辑= kPWM_ReloadImmediate;
pwmConfig.重新加载选择= kPWM_LocalReload;
pwmConfig.重载频率= kPWM_LoadEveryOportunity;
pwmConfig.强制触发= kPWM_Force_LocalSync;
pwmConfig.启用调试模式= true;
PWM_Init(PWM1_BASEADDR、 kPWM_Module_3,&pwmConfig);
PWM_Init(PWM2_BASEADDR、 kPWM_Module_3,&pwmConfig);
PWM_Init(PWM3_BASEADDR、 kPWM_Module_1,&pwmConfig);
PWM_Init(PWM4_BASEADDR、 kPWM_Module_1,&pwmConfig);
// 故障配置
PWM_FaultDefaultConfig(&faultConfig);
/* 安装 PWM 故障保护 */
PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_0&faultConfig);
PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_1&faultConfig);
PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_2&faultConfig);
PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_3&faultConfig);
/* 为子模块 0/1/2 设置 PWM 故障禁用映射 */
PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
/* 安装 PWM 故障保护 */
PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_0&faultConfig);
PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_1&faultConfig);
PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_2&faultConfig);
PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_3&faultConfig);
/* 为子模块 0/1/2 设置 PWM 故障禁用映射 */
PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
/* 安装 PWM 故障保护 */
PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_0&faultConfig);
PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_1&faultConfig);
PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_2&faultConfig);
PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_3&faultConfig);
/* 为子模块 0/1/2 设置 PWM 故障禁用映射 */
PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
/* 安装 PWM 故障保护 */
PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_0&faultConfig);
PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_1&faultConfig);
PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_2&faultConfig);
PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_3&faultConfig);
/* 为子模块 0/1/2 设置 PWM 故障禁用映射 */
PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0| kPWM_FaultDisable_1| kPWM_FaultDisable_2| kPWM_FaultDisable_3);
/* 为单次轮询配置 PWM 的捕获输入 */
captureConfig.captureInputSel= true;
捕捉配置。边缘0= kPWM_RiseAndFallEdge;
捕捉配置。边缘1= kPWM_Disable;
captureConfig.enableOneShotCapture= false;
captureConfig.edgeCompareValue= 1;
PWM_SetupInputCapture(PWM1_BASEADDR、 kPWM_Module_3, kPWM_PwmA&captureConfig);
PWM_SetupInputCapture(PWM2_BASEADDR、 kPWM_Module_3, kPWM_PwmA&captureConfig);
PWM_SetupInputCapture(PWM3_BASEADDR、 kPWM_Module_1, kPWM_PwmA&captureConfig);
PWM_SetupInputCapture(PWM4_BASEADDR、 kPWM_Module_1, kPWM_PwmA&captureConfig);
PWM_SetPwmLdok(PWM1_BASEADDR、 kPWM_Control_Module_3,true);
PWM_SetPwmLdok(PWM2_BASEADDR、 kPWM_Control_Module_3,true);
PWM_SetPwmLdok(PWM3_BASEADDR、 kPWM_Control_Module_1,true);
PWM_SetPwmLdok(PWM4_BASEADDR、 kPWM_Control_Module_1,true);
PWM_StartTimer(PWM1_BASEADDR、 kPWM_Control_Module_3);
PWM_StartTimer(PWM2_BASEADDR、 kPWM_Control_Module_3);
PWM_StartTimer(PWM3_BASEADDR、 kPWM_Control_Module_1);
PWM_StartTimer(PWM4_BASEADDR、 kPWM_Control_Module_1);
}