Skip to content

Commit f64ded2

Browse files
authored
feat(uart): adds function to set clock source
1 parent bb136c8 commit f64ded2

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

cores/esp32/HardwareSerial.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,30 @@ typedef enum {
9696
UART_PARITY_ERROR
9797
} hardwareSerial_error_t;
9898

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+
99123
#ifndef ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE
100124
#ifndef CONFIG_ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE
101125
#define ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE 2048
@@ -344,9 +368,18 @@ class HardwareSerial : public Stream {
344368
// UART_MODE_RS485_COLLISION_DETECT = 0x03 mode: RS485 collision detection UART mode (used for test purposes)
345369
// UART_MODE_RS485_APP_CTRL = 0x04 mode: application control RS485 UART mode (used for test purposes)
346370
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);
347381
size_t setRxBufferSize(size_t new_size);
348382
size_t setTxBufferSize(size_t new_size);
349-
350383
protected:
351384
uint8_t _uart_nr;
352385
uart_t *_uart;

0 commit comments

Comments
 (0)