W800 PWM调光LED以一定频率闪烁
本节使用PWM输出,通过观察LED来查看PWM频率,可以调节占空比来改变LED的亮度。
首先编写PWM配置函数,后面通过传入参数来配置:
static int pwm_demo_allsyc_mode(u8 channel,u32 freq, u8 duty, u8 num)
{
pwm_init_param pwm_param;
int ret=-1;
tls_sys_clk sysclk;
tls_sys_clk_get(&sysclk);
memset(&pwm_param, 0, sizeof(pwm_init_param));
pwm_param.period = 255;
pwm_param.cnt_type = WM_PWM_CNT_TYPE_EDGE_ALIGN_OUT;
pwm_param.loop_type = WM_PWM_LOOP_TYPE_LOOP;
pwm_param.mode = WM_PWM_OUT_MODE_ALLSYC;
pwm_param.inverse_en = DISABLE;
pwm_param.pnum = num;
pwm_param.pnum_int = DISABLE;
pwm_param.duty = duty;
pwm_param.channel = channel;
pwm_param.clkdiv = sysclk.apbclk*UNIT_MHZ/256/freq;
ret = tls_pwm_out_init(&pwm_param);
return ret;
}
在主程序中传入配置参数,这里配置PB0引脚输出PWM,调用
pwm_demo_allsyc_mode(u8 channel,u32 freq, u8 duty, u8 num)配置。
括号中的第一个参数为通道序号。
第二 个参数是期望输出的 pwm频率。
第三个参数占空比,如此处是 99 则表示实际占空比为 99/255。
第 四个参 数表示输出的波形周期,其中 0表示持续输 出波形。
void UserMain(void)
{
printf("\n user task \n");
wm_pwm0_config(WM_IO_PB_00);
tls_pwm_stop(0);
pwm_demo_allsyc_mode(0,20,200, 0);
tls_pwm_start(0);//pwm启动
}
编译下载程序到开发板,可以看到开发板led以20HZ的频率闪烁。用户可以自行调节第二,第三个参数来改变频率,占空比,实现自己的效果。