@@ -96,6 +96,30 @@ typedef enum {
96
96
UART_PARITY_ERROR
97
97
} hardwareSerial_error_t;
98
98
99
+ typedef enum {
100
+ #if SOC_UART_SUPPORT_APB_CLK
101
+ UART_CLK_SRC_APB = SOC_MOD_CLK_APB,
102
+ #endif
103
+ #if SOC_UART_SUPPORT_PLL_F40M_CLK
104
+ UART_CLK_SRC_PLL = SOC_MOD_CLK_PLL_F40M,
105
+ #endif
106
+ #if SOC_UART_SUPPORT_PLL_F80M_CLK
107
+ UART_CLK_SRC_PLL = SOC_MOD_CLK_PLL_F80M,
108
+ #endif
109
+ #if CONFIG_IDF_TARGET_ESP32H2
110
+ UART_CLK_SRC_PLL = SOC_MOD_CLK_PLL_F48M,
111
+ #endif
112
+ #if SOC_UART_SUPPORT_XTAL_CLK
113
+ UART_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,
114
+ #endif
115
+ #if SOC_UART_SUPPORT_RTC_CLK
116
+ UART_CLK_SRC_RTC_FAST = SOC_MOD_CLK_RC_FAST,
117
+ #endif
118
+ #if SOC_UART_SUPPORT_REF_TICK
119
+ UART_CLK_SRC_REF_TICK = SOC_MOD_CLK_REF_TICK,
120
+ #endif
121
+ } SerialClkSrc;
122
+
99
123
#ifndef ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE
100
124
#ifndef CONFIG_ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE
101
125
#define ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE 2048
@@ -344,9 +368,18 @@ class HardwareSerial : public Stream {
344
368
// UART_MODE_RS485_COLLISION_DETECT = 0x03 mode: RS485 collision detection UART mode (used for test purposes)
345
369
// UART_MODE_RS485_APP_CTRL = 0x04 mode: application control RS485 UART mode (used for test purposes)
346
370
bool setMode (SerialMode mode);
371
+ // Used to set the UART clock source mode. It must be set before calling begin(), otherwise it won't have any effect.
372
+ // Not all clock source are available to every SoC. The compatible option are listed here:
373
+ // UART_CLK_SRC_APB :: ESP32, ESP32-S2, ESP32-C3 and ESP32-S3
374
+ // UART_CLK_SRC_PLL :: ESP32-C2, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2 and ESP32-P4
375
+ // UART_CLK_SRC_XTAL :: ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S3 and ESP32-P4
376
+ // UART_CLK_SRC_RTC_FAST :: ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S3 and ESP32-P4
377
+ // UART_CLK_SRC_REF_TICK :: ESP32 and ESP32-S2
378
+ // Note: CLK_SRC_PLL Freq depends on the SoC - ESP32-C2 has 40MHz, ESP32-H2 has 48MHz and ESP32-C5, C6, C61 and P4 has 80MHz
379
+ // Note: ESP32-C6, C61, ESP32-P4 and ESP32-C5 have LP UART that will use only RTC_FAST or XTAL/2 as Clock Source
380
+ bool setClockSource (SerialClkSrc clkSrc);
347
381
size_t setRxBufferSize (size_t new_size);
348
382
size_t setTxBufferSize (size_t new_size);
349
-
350
383
protected:
351
384
uint8_t _uart_nr;
352
385
uart_t *_uart;
0 commit comments