原创不易,转载需注明来源:https://blog.csdn.net/qq_32955031
解析之后再编辑,肚子要紧,肠胃不好的人得惜命。
/**
* 这是一个串口通讯实验
* 源于官方Githu
* 本人联系方式QQ:1737410733
* 本人CSDN博客:https://blog.csdn.net/qq_32955031
*
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
/**
* 以下文字由官方Github 相应部分翻译而来
* 这是一个示例,它将在UART1上收到的任何数据回传给发件人,
* 关闭硬件流量控制。 它不使用UART驱动程序事件队列。
*
* - 端口:UART1
* - 接收(Rx)缓冲区:开
* - 发送(Tx)缓冲器:关闭
* - 流量控制:关闭
* - 事件队列:关闭
* - 引脚分配:见下面的定义
*/
//定义管脚
#define ECHO_TEST_TXD (GPIO_NUM_4)
#define ECHO_TEST_RXD (GPIO_NUM_5)
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
//定义缓冲区
#define BUF_SIZE (1024)
//具体任务
static void echo_task()
{
/*配置UART驱动程序的参数,
*通讯引脚并安装驱动程序*/
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, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS);
uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);
//为传入数据配置临时缓冲区
uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
while (1) {
//从UART读取数据
int len = uart_read_bytes(UART_NUM_1, data, BUF_SIZE, 20 / portTICK_RATE_MS);
//将数据写回UART
uart_write_bytes(UART_NUM_1, (const char *) data, len);
}
}
void app_main()
{
//创建任务
xTaskCreate(echo_task, "uart_echo_task", 1024, NULL, 10, NULL);
}