我是靠谱客的博主 能干路人,最近开发中收集的这篇文章主要介绍BL602 PWM的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、我们直接调用官方的库即可,主要以下几个函数

    //PWM恢复默认值
    //id:  PWM的id,一共支持5组PWM,范围0~4
    int hal_pwm_deinit(uint8_t id)


    //PWM初始化
    //id:  PWM的id,一共支持5组PWM,范围0~4
    //pin: PWM的管脚
    int hal_pwm_init(uint8_t id, int pin)


    //PWM占空比设置
    //id:   PWM的id,一共支持5组PWM,范围0~4
    //duty: 占空比(分度是100,范围0~10000,即5000时为50%)
    //duration_ms: 持续时间(设为0即可)
    int hal_pwm_duty_set(uint8_t id, uint32_t duty, uint32_t duration_ms)


    //PWM频率设置(默认是2khz)
    //id:   PWM的id,一共支持5组PWM,范围0~4
    //freq:频率(范围611~40000,单位HZ)
    int hal_pwm_freq_update(uint8_t id, uint32_t freq)


    //PWM开始
    //id:   PWM的id,一共支持5组PWM,范围0~4
    int hal_pwm_start(uint8_t id)


    //PWM停止
    //id:   PWM的id,一共支持5组PWM,范围0~4
    int hal_pwm_stop(uint8_t id)

  这些函数属于hal_drv模块,因此我们需要把工程路径下的Makefile文件中的INCLUDE_COMPONENTS字段添加hal_drv

2、BL602/BL604共有五组PWM,其中GPIO与PWM对应的关系如下图:

 

3、下面我们创建一个PWM任务,IO0接LED管脚,并实现呼吸灯效果

//PWM编号
#define PWM0            0
#define PWM1            1
#define PWM2            2
#define PWM3            3
#define PWM4            4


//5组PWM固定以下管脚
#define PWM0_GPIO_0     0
#define PWM0_GPIO_5     5
#define PWM0_GPIO_20    20

#define PWM1_GPIO_1     1
#define PWM1_GPIO_11    11
#define PWM1_GPIO_21    21

#define PWM2_GPIO_2     2
#define PWM2_GPIO_12    12
#define PWM2_GPIO_17    17
#define PWM2_GPIO_22    22

#define PWM3_GPIO_3     3
#define PWM3_GPIO_8     8

#define PWM4_GPIO_4     4
#define PWM4_GPIO_14    14




/********************************************************************
 *@brief	PWM任务
 *@input    
 *@return
********************************************************************/
static void user_pwm_task(void *arg)
{
    //PWM恢复默认值
    //id:  PWM的id,一共支持5组PWM,范围0~4
    hal_pwm_deinit(PWM0);

    //PWM初始化
    //id:  PWM的id,一共支持5组PWM,范围0~4
    //pin: PWM的管脚,
    hal_pwm_init(PWM0,PWM0_GPIO_0);

    //PWM占空比设置
    //id:   PWM的id,一共支持5组PWM,范围0~4
    //duty: 占空比(分度是100,范围0~10000,即5000时为50%)
    //duration_ms: 持续时间(设为0即可)
    hal_pwm_duty_set(PWM0,5000,0);

    //PWM频率设置(默认是2khz)
    //id:   PWM的id,一共支持5组PWM,范围0~4
    //freq:频率(范围611~40000,单位HZ)
    hal_pwm_freq_update(PWM0,1000);

    //PWM开始
    //id:   PWM的id,一共支持5组PWM,范围0~4
    hal_pwm_start(PWM0);

    bool flag = 0;
	while(1)
	{
    	vTaskDelay(10/portTICK_RATE_MS);

        //下面实现呼吸灯效果
        uint32_t p_duty;
        hal_pwm_duty_get(PWM0,&p_duty);
    //  printf("p_duty %drn",p_duty);

        if(flag)
        {
            if(p_duty >= 10000)
            {
                flag   = 0;
                p_duty = 9900;
            }
            else{
                p_duty += 100;
            }
        }
        else
        {
            if(p_duty == 0)
            {
                flag   = 1;
                p_duty = 100;
            }
            else{
                p_duty -= 100;
            }
        }

        hal_pwm_duty_set(PWM0,p_duty,0);
	}	

	vTaskDelete(NULL);
}


/********************************************************************
 *@brief	PWM初始化
 *@input    
 *@return
********************************************************************/
void user_pwm_init()
{
    xTaskCreate(user_pwm_task, "", 512, NULL, 2, NULL);
}

 

 

最后

以上就是能干路人为你收集整理的BL602 PWM的使用的全部内容,希望文章能够帮你解决BL602 PWM的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部