IR - rc5
本 demo 主要介绍 IR 以 rc5 协议收发数据。
硬件连接
本 demo 使用到的 gpio 参考 board_ir_gpio_init
,将红外发射二极管和接收头与 IR 引脚连接,具体连接方式如下表(以BL808为例):
开发板 IR 引脚 |
外接模块 |
---|---|
VCC |
红外接收头 VCC |
GND |
红外接收头 GND |
RX(GPIO17) |
红外接收头 OUT |
VCC |
红外发射二极管正极 |
TX(GPIO11) |
红外发射二极管负极 |
软件实现
更详细的代码请参考 examples/peripherals/ir/ir_rc5
1board_init();
board_init
中会开启 IR 时钟,并选择 IR 时钟源和分频。
1board_ir_gpio_init();
配置相关引脚为 IR 功能
1uint32_t tx_buffer[1] = { 0x123D };
2struct bflb_ir_tx_config_s tx_cfg;
3
4irtx = bflb_device_get_by_name("irtx");
5
6/* TX init */
7tx_cfg.tx_mode = IR_TX_RC5;
8bflb_ir_tx_init(irtx, &tx_cfg);
获取 irtx 句柄
设置 tx_mode 为 RC5 模式,调用
bflb_ir_tx_init(irtx, &tx_cfg)
初始化 ir tx
1uint64_t rx_data;
2uint8_t rx_len;
3struct bflb_ir_rx_config_s rx_cfg;
4
5irrx = bflb_device_get_by_name("irrx");
6
7/* RX init */
8rx_cfg.rx_mode = IR_RX_RC5;
9rx_cfg.input_inverse = true;
10rx_cfg.deglitch_enable = false;
11bflb_ir_rx_init(irrx, &rx_cfg);
12
13/* Enable rx, wait for sending */
14bflb_ir_rx_enable(irrx, true);
获取 irrx 句柄
设置 rx_mode 为 RC5 模式,调用
bflb_ir_rx_init(irrx, &rx_cfg)
初始化 ir rx调用
bflb_ir_rx_enable(irrx, true)
使能 ir rx,等待数据发送
1bflb_ir_send(irtx, tx_buffer, 1);
2rx_len = bflb_ir_receive(irrx, &rx_data);
调用
bflb_ir_send(irtx, tx_buffer, 1)
发送 tx_buffer 中的数据调用
bflb_ir_receive(irrx, &rx_data)
将接收到的数据存放在 rx_data 中
1/* Check data received */
2if (rx_data != tx_buffer[0]) {
3 printf("Data error! receive bit: %d, value: 0x%016lx\r\n", rx_len, rx_data);
4} else {
5 printf("Received correctly. receive bit: %d, value: 0x%016lx\r\n", rx_len, rx_data);
6}
检查发送和接收的数据是否一致
编译和烧录
参考 环境搭建
实验现象
按下开发板中 RST 按键,串口打印接收到的数据。