1
0

uart.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "freertos/FreeRTOS.h"
  4. #include "freertos/task.h"
  5. #include "freertos/queue.h"
  6. #include "driver/uart.h"
  7. #include "esp_log.h"
  8. #include "config.h"
  9. #include "uart.h"
  10. #ifdef SERIAL_ENABLED
  11. /************************************************************************************************
  12. * On the ESP-WROOM-32 Card, the UART2-Pins are avaialable.
  13. * TXD: GPIO17
  14. * RXD: GPIO16
  15. * https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf
  16. * http://esp32.net/images/MH-ET-LIVE/ESP32-DevKit/MH-ET-LIVE_ESP32-DevKit_DiagramPinout.png
  17. * https://i.imgur.com/ctokhuk.jpg (Schematic of the MH-ET-LIVE)
  18. *
  19. ************************************************************************************************/
  20. #define UART_NUMBER UART_NUM_2
  21. void initUart() {
  22. uart_config_t uart_config = {
  23. .baud_rate = 19200,
  24. .data_bits = UART_DATA_8_BITS,
  25. .parity = UART_PARITY_DISABLE,
  26. .stop_bits = UART_STOP_BITS_1,
  27. .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
  28. };
  29. ESP_ERROR_CHECK(uart_param_config(UART_NUMBER, &uart_config));
  30. ESP_ERROR_CHECK(uart_set_pin(UART_NUMBER, UART_TX_PIN, UART_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
  31. const int uart_buffer_size = (1024 * 2);
  32. QueueHandle_t uart_queue;
  33. ESP_ERROR_CHECK(uart_driver_install(UART_NUMBER, uart_buffer_size, uart_buffer_size, 10, &uart_queue, 0));
  34. }
  35. unsigned char serialRead(void) {
  36. unsigned char data;
  37. const int length = uart_read_bytes(UART_NUMBER, (uint8_t*)&data, 1, 0);
  38. if( length > 0 )
  39. return data;
  40. else
  41. return '\0';
  42. }
  43. int serialAvailable() {
  44. size_t size;
  45. uart_get_buffered_data_len(UART_NUMBER, &size);
  46. return (size == 0)? 0 : 1;
  47. }
  48. void writeUARTData(const char *str) {
  49. uart_tx_chars(UART_NUMBER, (const char*)str, strlen(str));
  50. }
  51. void readData() {
  52. uint8_t data[2048];
  53. int length = 0;
  54. printf("readData()a\n");
  55. ESP_ERROR_CHECK(uart_get_buffered_data_len(UART_NUMBER, (size_t*)&length));
  56. printf("readData()b %d\n",length);
  57. length = uart_read_bytes(UART_NUMBER, data, length, 100);
  58. printf("readData()c %d\n",length);
  59. data[length] = '\0';
  60. printf("Read:%d :%s\n",length,(char *)data);
  61. }
  62. #endif