DEVKIT-mpc5744p配置flexPWM
软件:S32 Design Studio for Power Architecture Version 2.1
新建工程,配置与生成代码
本文工程下载
- 双击添加flexpwm模块
- 选取pwm的输出io口
- 双击
Components/clockMan1
,配置时钟
- 在
Clock Values Summary
下滑可以看到FlexPWM1的时钟频率
- FlexPWM对应时钟是MOTC时钟, 在
settings
处可配置MOTC的时钟源和分频,setting
旁边的选项卡也可以单独配置时钟源的倍频和分频, 这里选择了IRCOSC/16
, 再到Clock Values Summary
可看到FlexPWM模块的频率变成了1MHz
- 双击
Components/flexpwm
模块, all-选择DeviceFlexPWM_1
- 输入周期1000, 则最后pwm频率为 1MHz/1000=1kHz
- 使能输出口
- 保存,生成代码
- 在
main.c
添加业务代码#define STEP 100 #define MAX_VAL 1000 // 周期 uint16_t dutyCycle = MAX_VAL; bool increaseDutyCycle = false; // 初始化pwm1模块0 CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT); CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT); FLEXPWM_DRV_SetupPwm(INST_FLEXPWM1, 0U, &flexPWM1_flexpwm_module_setup_t0, &flexPWM1_flexpwm_module_signal_setup_t0); FLEXPWM_DRV_CounterStart(INST_FLEXPWM1, 0U); FLEXPWM_DRV_UpdatePulseWidth(INST_FLEXPWM1, 0U, 300, 0UL, FlexPwmEdgeAligned); FLEXPWM_DRV_LoadCommands(INST_FLEXPWM1, (1UL << 0)); // while(1) { /* Insert a small delay to make the blinking visible */ delay(7200000); /* Toggle output value LED1 */ PINS_DRV_TogglePins(PTC, (1<<12)); if (increaseDutyCycle == false) { if (dutyCycle < STEP) increaseDutyCycle = true; else dutyCycle -= STEP; } else { if (dutyCycle > MAX_VAL - STEP) increaseDutyCycle = false; else dutyCycle += STEP; } FLEXPWM_DRV_UpdatePulseWidth(INST_FLEXPWM1, 0U, dutyCycle, 0UL, FlexPwmEdgeAligned); FLEXPWM_DRV_LoadCommands(INST_FLEXPWM1, (1UL << 0)); }
- 编译,调试