#include "driver/uart.h"
#include "driver/gpio.h"
#include <string.h>
TaskHandle_t Uart1Handle = NULL;
#define UART_TX_BUF_SIZE (1024) //Size of the TX ring buffer (if set uart_write_bytes() will block until all bytes sent)to 0
#define UART_RX_BUF_SIZE (1024)
//********************************
//********************************
//********** INITIALISE **********
//********************************
//********************************
//----- INIT UART1 -----
uart_config_t UartConfig1 = {
.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_HW_FLOWCTRL_CTS
.source_clk = UART_SCLK_APB,
.rx_flow_ctrl_thresh = 100
};
uart_driver_install(UART_NUM_1, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, 0, NULL, 0);
uart_param_config(UART_NUM_1, &UartConfig1);
uart_set_pin(UART_NUM_1, 17, 16, 0, 0); //UART, TX, RX, RTS, CTS
Transmit
char TxBuffer[] = {"AT\r\n"};
uart_write_bytes(UART_NUM_1, TxBuffer, strlen(TxBuffer)); //Copies data to tx ring buffer. Will only stall if UART_TX_BUF_SIZE=0
Receive – Polling for data
uint8_t RxData[128];
int RxLength = 0;
ESP_ERROR_CHECK(uart_get_buffered_data_len(UART_NUM_1, (size_t*)&RxLength));
if (RxLength > 0)
{
if (RxLength > sizeof(RxData))
RxLength = sizeof(RxData);
RxLength = uart_read_bytes(UART_NUM_1, RxData, RxLength, 100); //Returns -1 on error, >=0 the number of bytes read from UART buffer
ESP_LOGI(TAG, "RX %i bytes", (int)RxLength);
}
//If the data in the RX FIFO buffer is no longer needed you can use this:
//uart_flush(UART_NUM_1);
Receive – Using an xTask
xTaskCreate(UartRxTask, "UartRxTask", UART_RX_BUF_SIZE, NULL, 8, &Uart1Handle); //Create task for reading data received
//*****************************
//*****************************
//********** UART RX **********
//*****************************
//*****************************
static void UartRxTask (void *arg)
{
}
