esp32 idf 串口通信重复接收发送数组例程
时间: 2023-10-01 21:05:56 浏览: 247
以下是一个 ESP32 IDF 的串口通信重复接收发送数组的例程:
```c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#define TXD_PIN (GPIO_NUM_17)
#define RXD_PIN (GPIO_NUM_16)
#define BUF_SIZE (1024)
void uart_task(void *pvParameters)
{
uint8_t data[BUF_SIZE];
while (1) {
// 从串口接收数据
int len = uart_read_bytes(UART_NUM_1, data, BUF_SIZE, 100 / portTICK_RATE_MS);
if (len > 0) {
// 打印接收到的数据
printf("Received: ");
for (int i = 0; i < len; i++) {
printf("%02x ", data[i]);
}
printf("\n");
// 将接收到的数据原样返回
uart_write_bytes(UART_NUM_1, (const char *)data, len);
}
}
}
void app_main()
{
// 配置串口参数
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
};
uart_param_config(UART_NUM_1, &uart_config);
uart_set_pin(UART_NUM_1, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
// 安装驱动程序
uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);
// 创建串口任务
xTaskCreate(uart_task, "uart_task", 1024 * 2, NULL, configMAX_PRIORITIES - 1, NULL);
}
```
这个例程中,我们使用 ESP32 的 UART1 接口进行串口通信。在任务中,我们使用 `uart_read_bytes()` 函数从串口接收数据,并使用 `uart_write_bytes()` 函数将接收到的数据原样返回。这样,当我们向串口发送数据时,就能够在串口助手中看到原样返回的数据了。
阅读全文