1. 程式人生 > 實用技巧 >W800 PWM調光LED以一定頻率閃爍

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的頻率閃爍。使用者可以自行調節第二,第三個引數來改變頻率,佔空比,實現自己的效果。