Added an asynchronous UART example, using separate RX and TX tasks.
Signed-off-by: krzychb <krzychb@gazeta.pl>
This commit is contained in:
parent
6cc8099610
commit
479ba94ef7
4 changed files with 96 additions and 0 deletions
8
examples/peripherals/uart_async_rxtxtasks/Makefile
Normal file
8
examples/peripherals/uart_async_rxtxtasks/Makefile
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := uart_async_rxtxtasks
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk
|
11
examples/peripherals/uart_async_rxtxtasks/README.md
Normal file
11
examples/peripherals/uart_async_rxtxtasks/README.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
UART asynchronous example, that uses separate RX and TX tasks
|
||||||
|
=============================================================
|
||||||
|
|
||||||
|
Starts two FreeRTOS tasks:
|
||||||
|
- One task for transmitting 'Hello world' via the UART.
|
||||||
|
- One task for receiving from the UART.
|
||||||
|
|
||||||
|
If you'd like to see your ESP32 receive something, simply short
|
||||||
|
TXD_PIN and RXD_PIN. By doing this data transmitted on TXD_PIN will
|
||||||
|
be received on RXD_PIN. See the definitions of TXD_PIN and RXD_PIN
|
||||||
|
in ./main/uart_async_rxtxtasks_main.c.
|
|
@ -0,0 +1,3 @@
|
||||||
|
#
|
||||||
|
# Main Makefile. This is basically the same as a component makefile.
|
||||||
|
#
|
|
@ -0,0 +1,74 @@
|
||||||
|
/* UART asynchronous example, that uses separate RX and TX tasks
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "driver/uart.h"
|
||||||
|
#include "soc/uart_struct.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
static const int RX_BUF_SIZE = 1024;
|
||||||
|
|
||||||
|
#define TXD_PIN (GPIO_NUM_4)
|
||||||
|
#define RXD_PIN (GPIO_NUM_5)
|
||||||
|
|
||||||
|
void init() {
|
||||||
|
const 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);
|
||||||
|
// We won't use a buffer for sending data.
|
||||||
|
uart_driver_install(UART_NUM_1, RX_BUF_SIZE * 2, 0, 0, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sendData(const char* logName, const char* data)
|
||||||
|
{
|
||||||
|
const int len = strlen(data);
|
||||||
|
const int txBytes = uart_write_bytes(UART_NUM_1, data, len);
|
||||||
|
ESP_LOGI(logName, "Wrote %d bytes", txBytes);
|
||||||
|
return txBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tx_task()
|
||||||
|
{
|
||||||
|
static const char *TX_TASK_TAG = "TX_TASK";
|
||||||
|
esp_log_level_set(TX_TASK_TAG, ESP_LOG_INFO);
|
||||||
|
while (1) {
|
||||||
|
sendData(TX_TASK_TAG, "Hello world");
|
||||||
|
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rx_task()
|
||||||
|
{
|
||||||
|
static const char *RX_TASK_TAG = "RX_TASK";
|
||||||
|
esp_log_level_set(RX_TASK_TAG, ESP_LOG_INFO);
|
||||||
|
uint8_t* data = (uint8_t*) malloc(RX_BUF_SIZE+1);
|
||||||
|
while (1) {
|
||||||
|
const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, 1000 / portTICK_RATE_MS);
|
||||||
|
if (rxBytes > 0) {
|
||||||
|
data[rxBytes] = 0;
|
||||||
|
ESP_LOGI(RX_TASK_TAG, "Read %d bytes: '%s'", rxBytes, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_main()
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
xTaskCreate(rx_task, "uart_rx_task", 1024*2, NULL, configMAX_PRIORITIES, NULL);
|
||||||
|
xTaskCreate(tx_task, "uart_tx_task", 1024*2, NULL, configMAX_PRIORITIES-1, NULL);
|
||||||
|
}
|
Loading…
Reference in a new issue