一.syscfg配置
(1)Clock Config
1.PWM Profiles 配置为 Custom(自定义)
2. 时钟源选择BUSCLK
3.定时器时钟分频 Timer Clock Driver 选择为一分频
4.时钟分频系数设为256
5.软件将会自动计算出可调节的频率范围
6.设置定时器的计数值,会影响最后的PWM频率
7.若勾选 Start Timer 则生成代码后,定时器会自动开启计数。否则要在代码中手动设置。
(2).PWM Config
1.PWM Mode 设置为 Edge-aligned Down Counting 。这个仅决定PWM波形的相位。
2.选择使能通道
3.设置某个PWM通道的参数
PWM Mode可选择计数器的计数方式(向上计数、向下计数、中心计数)
选择向上计数时,占空比 = CCR/(Period + 1)
(3).Pin Config
默认设置为了输出模式,速度为高速。
(4).Pin Mux
1.选择使用哪个定时器
2.选择输出PWM的引脚(引脚复用)
二.代码
0.生成代码后,会在ti_msp_dl_config.c中初始化PWM相关
SYSCFG_DL_init();
SYSCONFIG_WEAK void SYSCFG_DL_init(void)
{
SYSCFG_DL_initPower();
SYSCFG_DL_GPIO_init();
/* Module-Specific Initializations*/
SYSCFG_DL_SYSCTL_init();
SYSCFG_DL_PWM_0_init(); //初始化PWM相关
}
SYSCONFIG_WEAK void SYSCFG_DL_PWM_0_init(void) {
...
DL_TimerG_setCaptCompUpdateMethod(PWM_0_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERG_CAPTURE_COMPARE_0_INDEX);
DL_TimerG_setCaptureCompareValue(PWM_0_INST, 500, DL_TIMER_CC_0_INDEX); //设置CCR0的值为500
DL_TimerG_setCaptureCompareOutCtl(PWM_0_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
DL_TimerG_setCaptCompUpdateMethod(PWM_0_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
DL_TimerG_setCaptureCompareValue(PWM_0_INST, 1000, DL_TIMER_CC_1_INDEX); //设置CCR1的值
DL_TimerG_enableClock(PWM_0_INST);
DL_TimerG_setCCPDirection(PWM_0_INST , DL_TIMER_CC0_OUTPUT | DL_TIMER_CC1_OUTPUT );
}
1.初始化,若软件没有勾选 Start Timer 则需要在代码中手动开启定时器计数。
int main(void)
{
SYSCFG_DL_init();
DL_TimerG_startCounter(PWM_0_INST);
while (1) {
}
}
2.若要改变PWM的占空比,可以改变CCR的值
例如:已知Period的值为2000,则占空比 = CCR/(Period+1)
=1000/(2000 + 1) = 49.97%
DL_TimerG_setCaptureCompareValue(PWM_0_INST, 1000, DL_TIMER_CC_1_INDEX);