1、配置GPIO

新建完项目后,右键项目找到“S32 Configuration Tools”–》“Open Pins”进入PIN脚操作页面配置GPIO。这里用的MCU为S32K144:
在这里插入图片描述
在“外设信号”窗口选择FTM0(这里选择的是FTM0),选择对应引脚进行配置,保存
在这里插入图片描述

2、添加PWM外设组件

右键项目找到“S32 Configuration Tools”–》“Open Peripherals”进入外设组件界面
在这里插入图片描述
选择Drivers搜索“pwm”,添加完双击“flexTimer_pwm_1",修改pwm配置信息后保存,添加一个“PWM Independent Configuration”,更新源码
在这里插入图片描述

3、初始化

初始化完成功后PWM就打开了

	ftm_state_t ftmStateStruct;//这个变量得时全局变量
	CLOCK_DRV_Init(&clockMan1_InitConfig0);//时钟初始化
	PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);//引脚初始化
    /* Initialize FTM instance */
    FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig, &ftmStateStruct);
    /* Initialize FTM PWM */
    FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig);

4、其他函数

//更改频率,输入变量为频率HZ,例如输入1KHZ则Frequency=1000
void PWM_FrequencyChange(uint32_t Frequency){
	FTM_DRV_UpdatePwmPeriod(INST_FLEXTIMER_PWM_1,FTM_PWM_UPDATE_IN_DUTY_CYCLE,Frequency,true);
	PWM_DutyCycleChange(Pwm_CurrentDutyCycle);//保持占空比不变
}

//更换占空比,输入变量为百分比值,例如百分之10则DutyCycle=10
void PWM_DutyCycleChange(uint32_t DutyCycle){
	Pwm_CurrentDutyCycle=DutyCycle;
	uint16_t dutyValue=(0x8000*(100-DutyCycle))/100;
    FTM_DRV_UpdatePwmChannel(INST_FLEXTIMER_PWM_1,
                             flexTimer_pwm_1_IndependentChannelsConfig[0].hwChannelId,
							 FTM_PWM_UPDATE_IN_DUTY_CYCLE, dutyValue,
                             0U,
                             true);
}

更多推荐