当预分频器设置的值与 KPWM_Presca 不同时,IMXRT1062 上的 PWM 捕获已停止 您好, ,我遇到了一个问题,在配置四个 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); }
查看全文