关于B-3132(模组BK3432)芯片官方SDK对PWM配置及输出
@[TOC]关于B-3132(模组BK3432)芯片官方SDK对PWM配置及输出PWM初始化有6个16位的pwm计时器,可通过寄存器选择32k或者16mM的时钟频率。有两种模式:记时器模式、pwm模式,这篇文章主要解释PWM的配置和输出PWM初始化PWM_DRV_DESC结构体进行配置,我这里使用多个PWM通道输出口,因此采用传参方式:PWM_DRV_DESC tra_high;PWM_DRV_D
·
@[TOC]关于B-3132(模组BK3432)芯片官方SDK对PWM配置及输出
PWM初始化
有6个16位的pwm计时器,可通过寄存器选择32k或者16mM的时钟频率。有两种模式:记时器模式、pwm模式,这篇文章主要解释PWM的配置和输出
PWM初始化
PWM_DRV_DESC结构体进行配置,我这里使用多个PWM通道输出口,因此采用传参方式:
PWM_DRV_DESC tra_high;
PWM_DRV_DESC tra_midle;
void user_pwm_init(PWM_DRV_DESC timer_desc,unsigned char channel,unsigned short end_value,unsigned short duty_cycle)
{
// timer_desc;
timer_desc.channel = channel;//设置为通道
timer_desc.mode = (1 << 0); //default pwm mode
// | (1 << 4); // select 16MHz
timer_desc.end_value = end_value;//定时器时长
timer_desc.duty_cycle = duty_cycle;
timer_desc.pre_divid=0;
timer_desc.p_Int_Handler = NULL;
// timer_desc.p_Int_Handler = user_timer_cb;//定时器中断回调函数,PWM输出不需要配置
pwm_init(&timer_desc);
pwm_disable(timer_desc.channel);
icu_set_sleep_mode(0);//允许系统进入降压休眠
rwip_prevent_sleep_clear(BK_DRIVER_TIMER_ACTIVE);//清除标志
}
为了便于开启和关闭PWM通道,这里我加了一个运行环境前提,您也可以在配置中修改
void pwm_ready(void)
{
icu_set_sleep_mode(1);//设置当前系统工作在idel模式下,不允许降压休眠
rwip_prevent_sleep_set(BK_DRIVER_TIMER_ACTIVE); //必须设置
}
再设计一个具体开哪一个PWM通断函数:
//开启PWM函数
void user_pwm_on(unsigned char channel)
{
pwm_ready();
rwip_prevent_sleep_set(BK_DRIVER_TIMER_ACTIVE); //必须设置(有重复的语句,能跑起来就没有修改)
pwm_enable(channel);
}
当然,有开PWM就有关PWM函数:
//关闭PWM的函数
void user_pwm_off(unsigned char channel)
{
//uart_printf("BUZZ off \r\n");
pwm_disable(channel);
icu_set_sleep_mode(0);//允许系统进入降压休眠
rwip_prevent_sleep_clear(BK_DRIVER_TIMER_ACTIVE);//清除标志
}
这样,在主函数中调用,就能开启你想要开启的PWM了:
pwm_ready();
user_pwm_init(tra_high,2,3200,3000);
user_pwm_on(2);
user_pwm_init(tra_midle;,3,3200,3000);
user_pwm_on(3);
ok,这样就开启了通道2和通道3的PWM输出了! end_value、duty_cycle这两个值在官方SDK中已经有了很好的解释了!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)