#include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" #include "driver/uart.h" #include "driver/gpio.h" #include "esp_log.h" #include "sdkconfig.h" #include "uart2.h" #define CYCLE_RATE_UART_RX_TASK_MS 1000 / 10 #define CYCLE_RATE_UART_TX_TASK_MS 1000 / 1 #define TXD_PIN (GPIO_NUM_4) #define RXD_PIN (GPIO_NUM_5) #define RTS_PIN (UART_PIN_NO_CHANGE) #define CTS_PIN (UART_PIN_NO_CHANGE) #define TASK_STACK_SIZE (2048) #define BAUD_RATE (9600) #define PORT_NUM (UART_NUM_0) #define RX_BUF_SIZE (1024) static void initUartConfiguration(void); static void uartRxTask(void * pvParameters); static void uartTxTask(void * pvParameters); static int sendUart(const char* logName, const char* data); const char test_message[] = "The quick brown fox jumps over the lazy dog!"; static void initUartConfiguration(void) { static const char* TASK_TAG = "UART"; ESP_LOGI(TASK_TAG, "configure UART start"); const uart_config_t uartConfig = { .baud_rate = BAUD_RATE, .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_APB, }; int intr_alloc_flags = 0; ESP_ERROR_CHECK(uart_driver_install(PORT_NUM, RX_BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags)); ESP_ERROR_CHECK(uart_param_config(PORT_NUM, &uartConfig)); ESP_ERROR_CHECK(uart_set_pin(PORT_NUM, TXD_PIN, RXD_PIN, RTS_PIN, CTS_PIN)); ESP_LOGI(TASK_TAG, "configure UART finished"); } static int sendUart(const char* logName, const char* data) { const int len = strlen(data); const int txBytes = uart_write_bytes(PORT_NUM, data, len); ESP_LOGI(logName, "Wrote %d bytes", txBytes); return txBytes; } static void uartRxTask(void * pvParameters) { static const char* TASK_TAG = "UART_RX_TASK"; esp_log_level_set(TASK_TAG, ESP_LOG_INFO); // Configure a temporary buffer for the incoming data uint8_t *data = (uint8_t *) malloc(RX_BUF_SIZE); TickType_t xLastWakeTime; xLastWakeTime = xTaskGetTickCount(); while(1) { vTaskDelayUntil(&xLastWakeTime, CYCLE_RATE_UART_RX_TASK_MS); } } static void uartTxTask(void* pvParameters) { static const char* TASK_TAG = "UART_TX_TASK"; esp_log_level_set(TASK_TAG, ESP_LOG_INFO); TickType_t xLastWakeTime; xLastWakeTime = xTaskGetTickCount(); while(1) { vTaskDelayUntil(&xLastWakeTime, CYCLE_RATE_UART_TX_TASK_MS); sendUart(TASK_TAG, "Hello from UART"); } } void initUartTask(void) { initUartConfiguration(); //xTaskCreate(uartRxTask, "uartRxTask", 8000, (void*)1, tskIDLE_PRIORITY, NULL); xTaskCreate(uartRxTask, "uartTxTask", 8000, (void*)1, tskIDLE_PRIORITY, NULL); }