diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp index 9200431340..dfa9b8d759 100644 --- a/cores/arduino/HardwareSerial.cpp +++ b/cores/arduino/HardwareSerial.cpp @@ -95,7 +95,11 @@ #endif #if defined(HAVE_HWSERIAL10) - HardwareSerial Serial10(UART10); + #if defined(USART10) + HardwareSerial Serial10(USART10); + #else + HardwareSerial Serial10(UART10); + #endif void serialEvent10() __attribute__((weak)); #endif @@ -218,7 +222,7 @@ HardwareSerial::HardwareSerial(void *peripheral, HalfDuplexMode_t halfDuplex) setTx(PIN_SERIAL8_TX); } else #endif -#if defined(PIN_SERIAL9_TX) && defined(UART9) +#if defined(PIN_SERIAL9_TX) && defined(UART9_BASE) if (peripheral == UART9) { #if defined(PIN_SERIAL9_RX) setRx(PIN_SERIAL9_RX); @@ -226,8 +230,14 @@ HardwareSerial::HardwareSerial(void *peripheral, HalfDuplexMode_t halfDuplex) setTx(PIN_SERIAL9_TX); } else #endif -#if defined(PIN_SERIAL10_TX) && defined(UART10) - if (peripheral == UART10) { +#if defined(PIN_SERIAL10_TX) &&\ + (defined(USART10_BASE) || defined(UART10_BASE)) +#if defined(USART10_BASE) + if (peripheral == USART10) +#elif defined(UART10_BASE) + if (peripheral == UART10) +#endif + { #if defined(PIN_SERIAL10_RX) setRx(PIN_SERIAL10_RX); #endif diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h index 4d015e9e93..3271ebade5 100644 --- a/cores/arduino/HardwareSerial.h +++ b/cores/arduino/HardwareSerial.h @@ -173,16 +173,38 @@ class HardwareSerial : public Stream { void configForLowPower(void); }; -extern HardwareSerial Serial1; -extern HardwareSerial Serial2; -extern HardwareSerial Serial3; -extern HardwareSerial Serial4; -extern HardwareSerial Serial5; -extern HardwareSerial Serial6; -extern HardwareSerial Serial7; -extern HardwareSerial Serial8; -extern HardwareSerial Serial9; -extern HardwareSerial Serial10; -extern HardwareSerial SerialLP1; +#if defined(USART1) + extern HardwareSerial Serial1; +#endif +#if defined(USART2) + extern HardwareSerial Serial2; +#endif +#if defined(USART3) + extern HardwareSerial Serial3; +#endif +#if defined(UART4) || defined(USART4) + extern HardwareSerial Serial4; +#endif +#if defined(UART5) || defined(USART5) + extern HardwareSerial Serial5; +#endif +#if defined(USART6) + extern HardwareSerial Serial6; +#endif +#if defined(UART7) || defined(USART7) + extern HardwareSerial Serial7; +#endif +#if defined(UART8) || defined(USART8) + extern HardwareSerial Serial8; +#endif +#if defined(UART9) + extern HardwareSerial Serial9; +#endif +#if defined(UART10) || defined(USART10) + extern HardwareSerial Serial10; +#endif +#if defined(LPUART1) + extern HardwareSerial SerialLP1; +#endif #endif diff --git a/cores/arduino/WSerial.cpp b/cores/arduino/WSerial.cpp index dfbda4320d..4a83f999c9 100644 --- a/cores/arduino/WSerial.cpp +++ b/cores/arduino/WSerial.cpp @@ -48,7 +48,7 @@ WEAK void serialEventRun(void) } #endif #if defined(HAVE_HWSERIAL10) - if (serialEventl10 && Serial10.available()) { + if (serialEvent10 && Serial10.available()) { serialEvent10(); } #endif diff --git a/cores/arduino/WSerial.h b/cores/arduino/WSerial.h index 5cd5e9ef07..436b8ec2e1 100644 --- a/cores/arduino/WSerial.h +++ b/cores/arduino/WSerial.h @@ -40,7 +40,7 @@ #if defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY) #if !defined(HWSERIAL_NONE) && defined(SERIAL_UART_INSTANCE) - #if SERIAL_UART_INSTANCE == 0 + #if SERIAL_UART_INSTANCE == 0 || SERIAL_UART_INSTANCE == 101 #define ENABLE_HWSERIALLP1 #if !defined(Serial) #define Serial SerialLP1 @@ -164,22 +164,44 @@ #endif #endif #if defined(ENABLE_HWSERIAL10) - #if defined(UART10_BASE) + #if defined(USART10_BASE) || defined(UART10_BASE) #define HAVE_HWSERIAL10 #endif #endif - extern void serialEvent1(void) __attribute__((weak)); - extern void serialEvent2(void) __attribute__((weak)); - extern void serialEvent3(void) __attribute__((weak)); - extern void serialEvent4(void) __attribute__((weak)); - extern void serialEvent5(void) __attribute__((weak)); - extern void serialEvent6(void) __attribute__((weak)); - extern void serialEvent7(void) __attribute__((weak)); - extern void serialEvent8(void) __attribute__((weak)); - extern void serialEvent9(void) __attribute__((weak)); - extern void serialEvent10(void) __attribute__((weak)); - extern void serialEventLP1(void) __attribute__((weak)); + #if defined(HAVE_HWSERIAL1) + extern void serialEvent1(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL2) + extern void serialEvent2(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL3) + extern void serialEvent3(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL4) + extern void serialEvent4(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL5) + extern void serialEvent5(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL6) + extern void serialEvent6(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL7) + extern void serialEvent7(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL8) + extern void serialEvent8(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL9) + extern void serialEvent9(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIAL10) + extern void serialEvent10(void) __attribute__((weak)); + #endif + #if defined(HAVE_HWSERIALLP1) + extern void serialEventLP1(void) __attribute__((weak)); + #endif #endif /* HAL_UART_MODULE_ENABLED && !HAL_UART_MODULE_ONLY */ extern void serialEventRun(void); diff --git a/keywords.txt b/keywords.txt index 019b437912..3bb267ac17 100644 --- a/keywords.txt +++ b/keywords.txt @@ -796,6 +796,7 @@ USART7 LITERAL1 UART8 LITERAL1 UART9 LITERAL1 UART10 LITERAL1 +USART10 LITERAL1 LPUART1 LITERAL1 # Port diff --git a/libraries/SrcWrapper/src/stm32/uart.c b/libraries/SrcWrapper/src/stm32/uart.c index abdaec6014..2c61c3158b 100644 --- a/libraries/SrcWrapper/src/stm32/uart.c +++ b/libraries/SrcWrapper/src/stm32/uart.c @@ -87,7 +87,7 @@ typedef enum { #if defined(UART9_BASE) UART9_INDEX, #endif -#if defined(UART10_BASE) +#if defined(UART10_BASE) || defined(USART10_BASE) UART10_INDEX, #endif #if defined(LPUART1_BASE) @@ -284,6 +284,15 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par obj->irq = UART10_IRQn; } #endif +#if defined(USART10_BASE) + else if (obj->uart == USART10) { + __HAL_RCC_USART10_FORCE_RESET(); + __HAL_RCC_USART10_RELEASE_RESET(); + __HAL_RCC_USART10_CLK_ENABLE(); + obj->index = UART10_INDEX; + obj->irq = USART10_IRQn; + } +#endif #if defined(STM32F091xC) || defined (STM32F098xx) /* Enable SYSCFG Clock */ @@ -487,6 +496,13 @@ void uart_deinit(serial_t *obj) __HAL_RCC_UART10_RELEASE_RESET(); __HAL_RCC_UART10_CLK_DISABLE(); break; +#endif +#if defined(USART10_BASE) + case UART10_INDEX: + __HAL_RCC_USART10_FORCE_RESET(); + __HAL_RCC_USART10_RELEASE_RESET(); + __HAL_RCC_USART10_CLK_DISABLE(); + break; #endif } @@ -1062,6 +1078,19 @@ void UART10_IRQHandler(void) } #endif +/** + * @brief USART 10 IRQ handler + * @param None + * @retval None + */ +#if defined(USART10_BASE) +void USART10_IRQHandler(void) +{ + HAL_NVIC_ClearPendingIRQ(USART10_IRQn); + HAL_UART_IRQHandler(uart_handlers[UART10_INDEX]); +} +#endif + /** * @brief HAL UART Call Back * @param UART handler