FTM输出PWM
1、宏定义
#define FTM_INSTANCE FTM2
#define FTM_CHANNAL0 0U
#define FTM_CHANNAL1 1U
#define FTM_CLKFREQ() CLOCK_GetFreq(kCLOCK_BusClk)
#define FTM_PORT PORTB
#define FTM_PIN1 18U
#define FTM_PIN2 19U
2、PWM初始化
void FWM_INIT(void)
{
ftm_config_t FTMconfig
;
CLOCK_EnableClock(kCLOCK_PortB
);
PORT_SetPinMux(FTM_PORT
,FTM_PIN1
,kPORT_MuxAlt3
);
PORT_SetPinMux(FTM_PORT
,FTM_PIN2
,kPORT_MuxAlt3
);
ftm_chnl_pwm_signal_param_t FTM_PARAM
[2];
FTM_PARAM
[0].chnlNumber
= FTM_CHANNAL0
;
FTM_PARAM
[0].dutyCyclePercent
= 0U;
FTM_PARAM
[0].firstEdgeDelayPercent
= 10U;
FTM_PARAM
[0].level
= kFTM_HighTrue
;
FTM_PARAM
[1].chnlNumber
= FTM_CHANNAL1
;
FTM_PARAM
[1].dutyCyclePercent
= 0U;
FTM_PARAM
[1].firstEdgeDelayPercent
= 10U;
FTM_PARAM
[1].level
= kFTM_HighTrue
;
FTM_GetDefaultConfig(&FTMconfig
);
FTM_Init(FTM_INSTANCE
,&FTMconfig
);
FTM_SetupPwm(FTM_INSTANCE
,FTM_PARAM
,2U,kFTM_EdgeAlignedPwm
,200000,FTM_CLKFREQ());
FTM_StartTimer(FTM_INSTANCE
,kFTM_SystemClock
);
}
其中,FTM_SetupPwm函数的参数为:
status_t
FTM_SetupPwm(FTM_Type
*base
,
const ftm_chnl_pwm_signal_param_t
*chnlParams
,
uint8_t numOfChnls
,
ftm_pwm_mode_t mode
,
uint32_t pwmFreq_Hz
,
uint32_t srcClock_Hz
)
FTM_StartTimer的函数
static inline void FTM_StartTimer(FTM_Type
*base
,
ftm_clock_source_t clockSource
)
3、改变占空比
void FTM_UpdatePwmDutycycle(FTM_Type
*base
,
ftm_chnl_t chnlNumber
,
ftm_pwm_mode_t currentPwmMode
, pwm模式(一般为边缘触发)
uint8_t dutyCyclePercent
)
FTM_UpdatePwmDutycycle(FTM0_INSTANCE
,FTM0_CHANNAL0
,kFTM_EdgeAlignedPwm
,duty
);
4、使能软件流控制
static inline void FTM_SetSoftwareTrigger(FTM_Type
*base
,
bool enable
)
FTM_SetSoftwareTrigger(FTM_INSTANCE
,1);
这里注意一点:每次改变完占空比后都要使能软件流控制,不然不会执行,也就是没有PWM输出