ESP-IDF之ESP32S3学习笔记二:串口中断处理一个字节的数据
·
/*
* 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);
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)