Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c3d41c9

Browse filesBrowse files
authored
Fixes baudrate with CPU Freq < 80MHz (espressif#6037)
This PR fixes an issue with UART when CPUFreq is lower than 80MHz (APB Freq)
1 parent d6934a5 commit c3d41c9
Copy full SHA for c3d41c9

File tree

Expand file treeCollapse file tree

1 file changed

+15
-2
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+15
-2
lines changed

‎cores/esp32/esp32-hal-uart.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-uart.c
+15-2Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ static uart_t _uart_bus_array[] = {
6969

7070
#endif
7171

72+
// solves issue https://github.com/espressif/arduino-esp32/issues/6032
73+
// baudrate must be multiplied when CPU Frequency is lower than APB 80MHz
74+
uint32_t _get_effective_baudrate(uint32_t baudrate)
75+
{
76+
uint32_t Freq = getApbFrequency()/1000000;
77+
if (Freq < 80) {
78+
return 80 / Freq * baudrate;
79+
}
80+
else {
81+
return baudrate;
82+
}
83+
}
84+
7285
bool uartIsDriverInstalled(uart_t* uart)
7386
{
7487
if(uart == NULL) {
@@ -121,7 +134,7 @@ uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rx
121134
UART_MUTEX_LOCK();
122135

123136
uart_config_t uart_config;
124-
uart_config.baud_rate = baudrate;
137+
uart_config.baud_rate = _get_effective_baudrate(baudrate);
125138
uart_config.data_bits = (config & 0xc) >> 2;
126139
uart_config.parity = (config & 0x3);
127140
uart_config.stop_bits = (config & 0x30) >> 4;
@@ -307,7 +320,7 @@ void uartSetBaudRate(uart_t* uart, uint32_t baud_rate)
307320
return;
308321
}
309322
UART_MUTEX_LOCK();
310-
uart_ll_set_baudrate(UART_LL_GET_HW(uart->num), baud_rate);
323+
uart_ll_set_baudrate(UART_LL_GET_HW(uart->num), _get_effective_baudrate(baud_rate));
311324
UART_MUTEX_UNLOCK();
312325
}
313326

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.