/*
 * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/uart.h"
#include "esp_log.h"

static const char *TAG = "uart_events";


#define EX_UART_NUM UART_NUM_1
#define TXD_PIN 17
#define RXD_PIN 18
#define BUF_SIZE (1024)

static QueueHandle_t uart1_queue;



static void uart_rx_task(void *arg)
{
    uint8_t data;
    while (1) {
        // 检查是否有数据可读
        int len = uart_read_bytes(EX_UART_NUM, &data, 1, portMAX_DELAY);
        if (len > 0) {
            // 处理接收到的单个字节
            ESP_LOGI(TAG, "Received byte: 0x%02X", data);
            // 可根据需要添加其他处理逻辑
            uart_write_bytes(EX_UART_NUM, &data, 1);
        }
    }
}

void app_main(void)
{
    esp_log_level_set(TAG, ESP_LOG_INFO);

    /* Configure parameters of an UART driver,
     * communication pins and install the driver */
    uart_config_t uart_config = {
        .baud_rate = 115200,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
        .source_clk = UART_SCLK_DEFAULT,
    };
    //Install UART driver, and get the queue.
    uart_driver_install(EX_UART_NUM, BUF_SIZE * 2, BUF_SIZE * 2, 20, &uart1_queue, 0);
    uart_param_config(EX_UART_NUM, &uart_config);

    //Set UART log level
    esp_log_level_set(TAG, ESP_LOG_INFO);
    //Set UART pins (using UART0 default pins ie no changes.)
    uart_set_pin(EX_UART_NUM, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);

    // 设置接收 FIFO 阈值为 1 字节
    uart_set_rx_full_threshold(EX_UART_NUM, 1);
    // 启用接收中断
    uart_enable_rx_intr(EX_UART_NUM);
    
    // 创建任务处理接收到的数据
    xTaskCreate(uart_rx_task, "uart_rx_task", 2048, NULL, 10, NULL);
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐