Skip to content

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

今天给大家分享一个M61接收红外信号的代码。群里一直说SDK有更新,可是我在github找不到一点。 然后目前使用的SDK是BL的SDK,昨天晚上才拉下来的。

在上述文件夹下,提供了一个example关于如何使用IR的。 也就是下图的这个库

但是群友可能并没有那么多BL的芯片,M61,32S的芯片是BL616(可以使用不同的编译命令编译不同的芯片固件). 所以我这边在它的代码上面加以修改使其可以烧录后直接通过红外遥控可以控制LED的闪烁(M61,BL616)

实验效果是每次按下遥控器按键的话,那么会toggle 蓝色led,同时串口输出数据

代码如下:

c
#include "board.h"
#include "bflb_ir.h"
#include "bflb_gpio.h"
#include "bl616_glb.h"
#ifdef BL616
#define TEST_IR_RX
#endif
struct bflb_device_s *irrx;
struct bflb_device_s *gpio;
void toggle_gpio(void)
{
    static int state = 1;
    if (state) {
        bflb_gpio_set(gpio, GPIO_PIN_15);
        state = 0;
    } else {
        bflb_gpio_reset(gpio, GPIO_PIN_15);
        state = 1;
    }
}
/* main */
int main(void)
{
    board_init();
    gpio = bflb_device_get_by_name("gpio");
    // 初始化GPIO PIN
    bflb_gpio_init(gpio, 11, (1 << 5) | (1 << (11)) | (0 << (12)));
    // 设置IR的接收或者发送PIN
    GLB_IR_RX_GPIO_Sel((11));
    // 初始化LED
    bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_OUTPUT | GPIO_PULLUP);
    uint64_t rx_data;
    uint8_t rx_len;
    // 配置红外接收
    struct bflb_ir_rx_config_s rx_cfg;
    irrx = bflb_device_get_by_name("irrx");
    /* RX init */
    rx_cfg.rx_mode = IR_RX_NEC;
    // 数据校验, 必须开启 0x00 反转后为0xff
    rx_cfg.input_inverse = true;
    // 滤波
    rx_cfg.deglitch_enable = false;
    bflb_ir_rx_init(irrx, &rx_cfg);
    // 开启接收
    bflb_ir_rx_enable(irrx, true);
    while (1) {
        /* Receive */
        rx_len = bflb_ir_receive(irrx, &rx_data);
        printf("Receive bit: %d, value: 0x%x\r\n", rx_len, rx_data);
        printf("%d", ((rx_data & 0xff000000) >> 24));
        if (((rx_data & 0xff000000) >> 24) == 0xba) {
            toggle_gpio();
        }
    }
}

工程文件我就不贴了,因为你需要根据你自己的环境设置SDK的目录,不如直接拷贝这个代码去运行

遇到问题?

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

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