Ai-M61-32S开发环境搭建3 - 点灯进阶

[复制链接]
查看695 | 回复5 | 2023-12-7 23:02:02 | 显示全部楼层 |阅读模式
本帖最后由 fanq211 于 2023-12-8 16:26 编辑

点灯进阶

参考帖子  (九)零基础开发小安派-Eyes-S1【外设篇】——PWM


阅读手册,  通过GPIO29 和GPIO27 实现PWM 控制LED灯  
原理图
333.png

手册如下:
444.png 333.png

查看Ai-M61-32S 简介就有个疑惑 怎么都是PWM0, 然后看AiPi-Eyes-DU 源码,就有疑问 PWM的通道如何关联?
阅读bl616_bl618_ds_zh_cn_1.4.pdf 才理解. 原来PWM0 是有多个通道, 同一个PWM下的同一个通道,在芯片上可能有多个管脚,但只能选一个管脚, 一旦同通道的PWM通道被选用了. 另一个管脚就不能再选做PWM了,能用作其他功能使用.
AiPi-Eyes-DU  控制 GPIO12 GPIO15 GPIO14 对应PWM_CH0 PWM_CH2 PWM_CH3

改用  GPIO29 和GPIO27  后 就会发现 GPIO27 和 GPIO14的  PWM通道冲突, GPIO27做PWM后,GPIO14就能不做PWM

基于AiPi-Eyes-DU 修改main.c  源码修改后如下.

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, GPIO_PIN_27, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
    bflb_gpio_init(gpio, GPIO_PIN_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 = 1000,
    };


    /*初始化PWM输出*/
    bflb_pwm_v2_init(pwm, &cfg);
    bflb_pwm_v2_start(pwm);

    while (1) {
        //GPIO_27
    bflb_pwm_v2_channel_positive_start(pwm, PWM_CH3);
    for(i=100;i>0;i--)
    {
        bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, i, 100);

        bflb_mtimer_delay_ms(10);
    }
     for(i=1;i<100;i++)
    {
        bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, i, 100);

        bflb_mtimer_delay_ms(10);
    }
    bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH3);

                        //GPIO_29
            bflb_pwm_v2_channel_positive_start(pwm, PWM_CH1);
            for(i=100;i>0;i--)
            {
                bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH1, i, 100);

                bflb_mtimer_delay_ms(10);
            }
             for(i=1;i<100;i++)
            {
                bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH1, i, 100);

                bflb_mtimer_delay_ms(10);
            }
            bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH1);
    }
}

编译 烧写 运行
在开发板上按住 IO2 按键并按一下 EN 按键进入烧录模式

make flash COMX=/dev/ttyCH341USB0


烧写完后 后再按一次 EN
IMG_20231207_223325.jpg


关键是手册手册啊.~~~~~

IMG_20231207_223325.jpg
回复

使用道具 举报

bzhou830 | 2023-12-8 08:40:28 | 显示全部楼层
很棒,加油
选择去发光,而不是被照亮
回复

使用道具 举报

WT_0213 | 2023-12-8 08:43:03 | 显示全部楼层
加油
回复

使用道具 举报

1084504793 | 2023-12-8 08:56:52 | 显示全部楼层
右手册就是好
回复 支持 反对

使用道具 举报

干簧管 | 2023-12-8 09:27:55 | 显示全部楼层
加油
回复

使用道具 举报

xiaoxie888 | 2023-12-8 10:10:59 | 显示全部楼层
我也成功点亮了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则