PWM一共有两种模式:
一个是边缘对齐PWM,指的是定时器使用的向下计数模式,输出通道在定时器计数开始的时候会输出高电平, 当计数值与输出通道的比较值相同的时候, 输出通道会输出低电平,一直到定时器的计数值计数到0,就完成了一个周期的脉冲输出
另一个模式是中心对齐模式,指的是定时器的上下计数模式,输出通道会在定时器开始的时候输出低电平,在定时器向上计数和向下计数两次到达输出通道的比较值相等的时候各翻转一次电平
本案例将使用板载的LED灯(PB22)实现呼吸灯效果,逐渐亮再逐渐灭
一,图形化配置界面
Name:用户自定义名称
PWM Profiles(PWM模板):Custom 自定义
PWM Period Count(PWM周期计数值):1000
Calculated PWM Frq(Hz)(软件计算的PWM波频率):xxxxHz
PWM Mode(PWM波模式):Edge-aligned Up Counting (边缘对齐+向上)
PWM Channel(s)(配置PWM输出通道):PWM Channel 1 (这里只开通道1,即LED的PB22)
Enable Channel Complimentary Output(是否开启互补输出通道):None
Inital Value(默认输出状态):Low
Counter Compare Value(配置PWM比较值):0 这个值与下面的参数是对应的
Desired Duty Cycle(%)(配置PWM占空比):xx%
定时器输入频率 = BUSCK(时钟源)/ Timer Clock Divider(分频系数)* Timer Clock Prescale (定时器时钟刻度1~256)
PWM波频率 = 定时器输入频率 / PWM Period Count (PWM计数周期)
二,代码编写:
// 呼吸灯渐亮过程
for (i = 0; i <= 999; i++)
{
//设置PWM比较值==>PWM占空比==>设置 LED 亮度
DL_TimerG_setCaptureCompareValue(PWM_LED_INST,i,GPIO_PWM_LED_C1_IDX);
delay_ms(15);
}
// 呼吸灯渐暗过程
for (i = 999; i > 0; i--)
{
//设置PWM比较值==>PWM占空比==>设置 LED 亮度
DL_TimerG_setCaptureCompareValue(PWM_LED_INST,i,GPIO_PWM_LED_C1_IDX);
delay_ms(15);
}
补充:
获取定时器通道的比较值:DL_TimerG_getCaptureCompareValue