Skip to content

Commit b963d89

Browse files
authored
Merge pull request #1255 from fpistm/Fix_UART
[U(S)ART] hardening
2 parents 750710a + 2c99b52 commit b963d89

File tree

6 files changed

+114
-30
lines changed

6 files changed

+114
-30
lines changed

cores/arduino/HardwareSerial.cpp

+14-4
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@
9595
#endif
9696

9797
#if defined(HAVE_HWSERIAL10)
98-
HardwareSerial Serial10(UART10);
98+
#if defined(USART10)
99+
HardwareSerial Serial10(USART10);
100+
#else
101+
HardwareSerial Serial10(UART10);
102+
#endif
99103
void serialEvent10() __attribute__((weak));
100104
#endif
101105

@@ -218,16 +222,22 @@ HardwareSerial::HardwareSerial(void *peripheral, HalfDuplexMode_t halfDuplex)
218222
setTx(PIN_SERIAL8_TX);
219223
} else
220224
#endif
221-
#if defined(PIN_SERIAL9_TX) && defined(UART9)
225+
#if defined(PIN_SERIAL9_TX) && defined(UART9_BASE)
222226
if (peripheral == UART9) {
223227
#if defined(PIN_SERIAL9_RX)
224228
setRx(PIN_SERIAL9_RX);
225229
#endif
226230
setTx(PIN_SERIAL9_TX);
227231
} else
228232
#endif
229-
#if defined(PIN_SERIAL10_TX) && defined(UART10)
230-
if (peripheral == UART10) {
233+
#if defined(PIN_SERIAL10_TX) &&\
234+
(defined(USART10_BASE) || defined(UART10_BASE))
235+
#if defined(USART10_BASE)
236+
if (peripheral == USART10)
237+
#elif defined(UART10_BASE)
238+
if (peripheral == UART10)
239+
#endif
240+
{
231241
#if defined(PIN_SERIAL10_RX)
232242
setRx(PIN_SERIAL10_RX);
233243
#endif

cores/arduino/HardwareSerial.h

+33-11
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,38 @@ class HardwareSerial : public Stream {
173173
void configForLowPower(void);
174174
};
175175

176-
extern HardwareSerial Serial1;
177-
extern HardwareSerial Serial2;
178-
extern HardwareSerial Serial3;
179-
extern HardwareSerial Serial4;
180-
extern HardwareSerial Serial5;
181-
extern HardwareSerial Serial6;
182-
extern HardwareSerial Serial7;
183-
extern HardwareSerial Serial8;
184-
extern HardwareSerial Serial9;
185-
extern HardwareSerial Serial10;
186-
extern HardwareSerial SerialLP1;
176+
#if defined(USART1)
177+
extern HardwareSerial Serial1;
178+
#endif
179+
#if defined(USART2)
180+
extern HardwareSerial Serial2;
181+
#endif
182+
#if defined(USART3)
183+
extern HardwareSerial Serial3;
184+
#endif
185+
#if defined(UART4) || defined(USART4)
186+
extern HardwareSerial Serial4;
187+
#endif
188+
#if defined(UART5) || defined(USART5)
189+
extern HardwareSerial Serial5;
190+
#endif
191+
#if defined(USART6)
192+
extern HardwareSerial Serial6;
193+
#endif
194+
#if defined(UART7) || defined(USART7)
195+
extern HardwareSerial Serial7;
196+
#endif
197+
#if defined(UART8) || defined(USART8)
198+
extern HardwareSerial Serial8;
199+
#endif
200+
#if defined(UART9)
201+
extern HardwareSerial Serial9;
202+
#endif
203+
#if defined(UART10) || defined(USART10)
204+
extern HardwareSerial Serial10;
205+
#endif
206+
#if defined(LPUART1)
207+
extern HardwareSerial SerialLP1;
208+
#endif
187209

188210
#endif

cores/arduino/WSerial.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ WEAK void serialEventRun(void)
4848
}
4949
#endif
5050
#if defined(HAVE_HWSERIAL10)
51-
if (serialEventl10 && Serial10.available()) {
51+
if (serialEvent10 && Serial10.available()) {
5252
serialEvent10();
5353
}
5454
#endif

cores/arduino/WSerial.h

+35-13
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
#if defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY)
4242
#if !defined(HWSERIAL_NONE) && defined(SERIAL_UART_INSTANCE)
43-
#if SERIAL_UART_INSTANCE == 0
43+
#if SERIAL_UART_INSTANCE == 0 || SERIAL_UART_INSTANCE == 101
4444
#define ENABLE_HWSERIALLP1
4545
#if !defined(Serial)
4646
#define Serial SerialLP1
@@ -164,22 +164,44 @@
164164
#endif
165165
#endif
166166
#if defined(ENABLE_HWSERIAL10)
167-
#if defined(UART10_BASE)
167+
#if defined(USART10_BASE) || defined(UART10_BASE)
168168
#define HAVE_HWSERIAL10
169169
#endif
170170
#endif
171171

172-
extern void serialEvent1(void) __attribute__((weak));
173-
extern void serialEvent2(void) __attribute__((weak));
174-
extern void serialEvent3(void) __attribute__((weak));
175-
extern void serialEvent4(void) __attribute__((weak));
176-
extern void serialEvent5(void) __attribute__((weak));
177-
extern void serialEvent6(void) __attribute__((weak));
178-
extern void serialEvent7(void) __attribute__((weak));
179-
extern void serialEvent8(void) __attribute__((weak));
180-
extern void serialEvent9(void) __attribute__((weak));
181-
extern void serialEvent10(void) __attribute__((weak));
182-
extern void serialEventLP1(void) __attribute__((weak));
172+
#if defined(HAVE_HWSERIAL1)
173+
extern void serialEvent1(void) __attribute__((weak));
174+
#endif
175+
#if defined(HAVE_HWSERIAL2)
176+
extern void serialEvent2(void) __attribute__((weak));
177+
#endif
178+
#if defined(HAVE_HWSERIAL3)
179+
extern void serialEvent3(void) __attribute__((weak));
180+
#endif
181+
#if defined(HAVE_HWSERIAL4)
182+
extern void serialEvent4(void) __attribute__((weak));
183+
#endif
184+
#if defined(HAVE_HWSERIAL5)
185+
extern void serialEvent5(void) __attribute__((weak));
186+
#endif
187+
#if defined(HAVE_HWSERIAL6)
188+
extern void serialEvent6(void) __attribute__((weak));
189+
#endif
190+
#if defined(HAVE_HWSERIAL7)
191+
extern void serialEvent7(void) __attribute__((weak));
192+
#endif
193+
#if defined(HAVE_HWSERIAL8)
194+
extern void serialEvent8(void) __attribute__((weak));
195+
#endif
196+
#if defined(HAVE_HWSERIAL9)
197+
extern void serialEvent9(void) __attribute__((weak));
198+
#endif
199+
#if defined(HAVE_HWSERIAL10)
200+
extern void serialEvent10(void) __attribute__((weak));
201+
#endif
202+
#if defined(HAVE_HWSERIALLP1)
203+
extern void serialEventLP1(void) __attribute__((weak));
204+
#endif
183205
#endif /* HAL_UART_MODULE_ENABLED && !HAL_UART_MODULE_ONLY */
184206

185207
extern void serialEventRun(void);

keywords.txt

+1
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,7 @@ USART7 LITERAL1
796796
UART8 LITERAL1
797797
UART9 LITERAL1
798798
UART10 LITERAL1
799+
USART10 LITERAL1
799800
LPUART1 LITERAL1
800801

801802
# Port

libraries/SrcWrapper/src/stm32/uart.c

+30-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ typedef enum {
8787
#if defined(UART9_BASE)
8888
UART9_INDEX,
8989
#endif
90-
#if defined(UART10_BASE)
90+
#if defined(UART10_BASE) || defined(USART10_BASE)
9191
UART10_INDEX,
9292
#endif
9393
#if defined(LPUART1_BASE)
@@ -284,6 +284,15 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
284284
obj->irq = UART10_IRQn;
285285
}
286286
#endif
287+
#if defined(USART10_BASE)
288+
else if (obj->uart == USART10) {
289+
__HAL_RCC_USART10_FORCE_RESET();
290+
__HAL_RCC_USART10_RELEASE_RESET();
291+
__HAL_RCC_USART10_CLK_ENABLE();
292+
obj->index = UART10_INDEX;
293+
obj->irq = USART10_IRQn;
294+
}
295+
#endif
287296

288297
#if defined(STM32F091xC) || defined (STM32F098xx)
289298
/* Enable SYSCFG Clock */
@@ -487,6 +496,13 @@ void uart_deinit(serial_t *obj)
487496
__HAL_RCC_UART10_RELEASE_RESET();
488497
__HAL_RCC_UART10_CLK_DISABLE();
489498
break;
499+
#endif
500+
#if defined(USART10_BASE)
501+
case UART10_INDEX:
502+
__HAL_RCC_USART10_FORCE_RESET();
503+
__HAL_RCC_USART10_RELEASE_RESET();
504+
__HAL_RCC_USART10_CLK_DISABLE();
505+
break;
490506
#endif
491507
}
492508

@@ -1062,6 +1078,19 @@ void UART10_IRQHandler(void)
10621078
}
10631079
#endif
10641080

1081+
/**
1082+
* @brief USART 10 IRQ handler
1083+
* @param None
1084+
* @retval None
1085+
*/
1086+
#if defined(USART10_BASE)
1087+
void USART10_IRQHandler(void)
1088+
{
1089+
HAL_NVIC_ClearPendingIRQ(USART10_IRQn);
1090+
HAL_UART_IRQHandler(uart_handlers[UART10_INDEX]);
1091+
}
1092+
#endif
1093+
10651094
/**
10661095
* @brief HAL UART Call Back
10671096
* @param UART handler

0 commit comments

Comments
 (0)