Skip to content

由 WangChong 贡献,Ai-Thinker 进行整理

PWM的详细教程请参考泽哥的文章,当前文章基于泽哥的文章进行补充。

操作步骤

1
零基础开发小安派-Eyes_DU之【PWM循环呼吸灯】

零基础开发小安派-Eyes_DU之【PWM循环呼吸灯】 http://ai-thinker.com/forum.php?mod=viewthread&tid=279 (出处: 物联网开发者社区-安信可论坛)

2
[[http://ai-thinker.com/forum.php?](http://ai-thinker.com/fo

[http://ai-thinker.com/forum.php? … pwm&_dsign=d510fc0b](http://ai-thinker.com/forum.php?mod=viewthread&tid=622&highlight=pwm&_dsign=d510fc0b)

直接上代码,我的代码也是基于泽哥的。

c
#include "bflb_mtimer.h"
#include "bflb_pwm_v2.h"
#include "bflb_clock.h"
#include "bflb_gpio.h"
#include "board.h"
struct bflb_device_s *pwm;
struct bflb_device_s *gpio;
#define PWM_PERIOD_MAX 255
int main(void)
{
    int i;
    board_init();
    pwm = bflb_device_get_by_name("pwm_v2_0");
    gpio = bflb_device_get_by_name("gpio");
    // 白灯
    bflb_gpio_init(gpio, 29, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
    /* period = .XCLK / .clk_div / .period = 40MHz / 40 / 1000 = 1KHz */
    struct bflb_pwm_v2_config_s cfg = {
        .clk_source = BFLB_SYSTEM_XCLK,
        .clk_div = 40,
        .period = PWM_PERIOD_MAX,
    };
    /*初始化PWM输出*/
    bflb_pwm_v2_init(pwm, &cfg);
    bflb_pwm_v2_start(pwm);
    while (1) {
        // 白灯呼吸亮灭
        bflb_pwm_v2_channel_positive_start(pwm, PWM_CH1); // 使能白灯通道
        for (i = 0; i < PWM_PERIOD_MAX; i++) {
            bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH1, 0, i);
            bflb_mtimer_delay_ms(5);
        }
        for (i = PWM_PERIOD_MAX; i > 0; i--) {
            bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH1, 0, i);
            bflb_mtimer_delay_ms(5);
        }
        bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH1); // 失能白灯通道
    }
}

这里主要说明的是这个文档的信息。我需要额外补充一下。

  • 首先,Ai-M61-32S-Kit 的规格书中,只说明了哪些端口可以用PWM0,并没有说明哪些端口用什么通道。
  • 需要查看具体的通道的话则需要查看,BL616/618的文档。文档如下:

上传的附件:

bl616_bl618_ds_zh_cn_1.4.pdf(1023.13 KB, 下载次数: 4)

解释说明: 关于通道,请查看管脚定义的章节。 拿GPIO21 举例(开发板上的引脚),如下代表这个IO可以支持两个PWM通道,正PWM通道1, 和负PWM通道2,其他的同理.

下图为树莓派PICO逻辑分析仪捕获的数据:

遇到问题?

如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

Released under the MIT License. Build Time 2026-09-11 14:52:23