diff --git a/demos/STM32/RT-STM32L476-DISCOVERY-SB_HOST/debug/RT-STM32L476-DISCOVERY-SB_HOST (OpenOCD, Flash and Run).launch b/demos/STM32/RT-STM32L476-DISCOVERY-SB_HOST/debug/RT-STM32L476-DISCOVERY-SB_HOST (OpenOCD, Flash and Run).launch
index 4c94ad2ac..b7276b55a 100644
--- a/demos/STM32/RT-STM32L476-DISCOVERY-SB_HOST/debug/RT-STM32L476-DISCOVERY-SB_HOST (OpenOCD, Flash and Run).launch
+++ b/demos/STM32/RT-STM32L476-DISCOVERY-SB_HOST/debug/RT-STM32L476-DISCOVERY-SB_HOST (OpenOCD, Flash and Run).launch
@@ -1,52 +1,52 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti10_15.inc b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti10_15.inc
index 1a034df43..b0f6d0fbd 100644
--- a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti10_15.inc
+++ b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti10_15.inc
@@ -80,10 +80,16 @@ OSAL_IRQ_HANDLER(STM32_EXTI10_15_HANDLER) {
OSAL_IRQ_PROLOGUE();
pr = EXTI->PR1;
- pr &= EXTI->IMR1 & (1U << 0);
+ pr &= EXTI->IMR1 & ((1U << 10) | (1U << 11) | (1U << 12) | (1U << 13) |
+ (1U << 14) | (1U << 15));
EXTI->PR1 = pr;
- exti_serve_irq(pr, 0);
+ exti_serve_irq(pr, 10);
+ exti_serve_irq(pr, 11);
+ exti_serve_irq(pr, 12);
+ exti_serve_irq(pr, 13);
+ exti_serve_irq(pr, 14);
+ exti_serve_irq(pr, 15);
OSAL_IRQ_EPILOGUE();
}
diff --git a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti2.inc b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti2.inc
index 3e3733c9f..7fd803641 100644
--- a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti2.inc
+++ b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti2.inc
@@ -80,7 +80,7 @@ OSAL_IRQ_HANDLER(STM32_EXTI2_HANDLER) {
OSAL_IRQ_PROLOGUE();
pr = EXTI->PR1;
- pr &= EXTI->IMR1 & (1U << 0);
+ pr &= EXTI->IMR1 & (1U << 2);
EXTI->PR1 = pr;
exti_serve_irq(pr, 0);
diff --git a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti3.inc b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti3.inc
index 168377312..48cecee60 100644
--- a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti3.inc
+++ b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti3.inc
@@ -80,7 +80,7 @@ OSAL_IRQ_HANDLER(STM32_EXTI3_HANDLER) {
OSAL_IRQ_PROLOGUE();
pr = EXTI->PR1;
- pr &= EXTI->IMR1 & (1U << 0);
+ pr &= EXTI->IMR1 & (1U << 3);
EXTI->PR1 = pr;
exti_serve_irq(pr, 0);
diff --git a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti4.inc b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti4.inc
index 24b5e87ed..0749a1fb5 100644
--- a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti4.inc
+++ b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti4.inc
@@ -80,7 +80,7 @@ OSAL_IRQ_HANDLER(STM32_EXTI4_HANDLER) {
OSAL_IRQ_PROLOGUE();
pr = EXTI->PR1;
- pr &= EXTI->IMR1 & (1U << 0);
+ pr &= EXTI->IMR1 & (1U << 4);
EXTI->PR1 = pr;
exti_serve_irq(pr, 0);
diff --git a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti5_9.inc b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti5_9.inc
index 54d65e629..9de8ed600 100644
--- a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti5_9.inc
+++ b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti5_9.inc
@@ -80,10 +80,15 @@ OSAL_IRQ_HANDLER(STM32_EXTI5_9_HANDLER) {
OSAL_IRQ_PROLOGUE();
pr = EXTI->PR1;
- pr &= EXTI->IMR1 & (1U << 0);
+ pr &= EXTI->IMR1 & ((1U << 5) | (1U << 6) | (1U << 7) | (1U << 8) |
+ (1U << 9));
EXTI->PR1 = pr;
- exti_serve_irq(pr, 0);
+ exti_serve_irq(pr, 5);
+ exti_serve_irq(pr, 6);
+ exti_serve_irq(pr, 7);
+ exti_serve_irq(pr, 8);
+ exti_serve_irq(pr, 9);
OSAL_IRQ_EPILOGUE();
}
diff --git a/os/hal/ports/STM32/LLD/USARTv2/stm32_lpuart1.inc b/os/hal/ports/STM32/LLD/USARTv2/stm32_lpuart1.inc
index 4a67f8bd4..0efffc6d2 100644
--- a/os/hal/ports/STM32/LLD/USARTv2/stm32_lpuart1.inc
+++ b/os/hal/ports/STM32/LLD/USARTv2/stm32_lpuart1.inc
@@ -48,6 +48,19 @@
#error "Invalid IRQ priority assigned to STM32_IRQ_LPUART1_PRIORITY"
#endif
+/* Other checks.*/
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_LPUART1) && \
+ (HAL_USE_UART && STM32_UART_USE_LPUART1)
+#error "LPUART1 used by multiple drivers"
+#endif
+
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_LPUART1) || \
+ (HAL_USE_UART && STM32_UART_USE_LPUART1)
+#define STM32_LPUART1_IS_USED TRUE
+#else
+#define STM32_LPUART1_IS_USED FALSE
+#endif
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -61,13 +74,13 @@
/*===========================================================================*/
static inline void lpuart1_irq_init(void) {
-#if defined(STM32_LPUART1_IS_USED)
+#if STM32_LPUART1_IS_USED
nvicEnableVector(STM32_LPUART1_NUMBER, STM32_IRQ_LPUART1_PRIORITY);
#endif
}
static inline void lpuart1_irq_deinit(void) {
-#if defined(STM32_LPUART1_IS_USED)
+#if STM32_LPUART1_IS_USED
nvicDisableVector(STM32_LPUART1_NUMBER);
#endif
}
@@ -76,8 +89,7 @@ static inline void lpuart1_irq_deinit(void) {
/* Driver interrupt handlers. */
/*===========================================================================*/
-#if (HAL_USE_SERIAL && STM32_SERIAL_USE_LPUART1) || \
- defined(__DOXYGEN__)
+#if STM32_LPUART1_IS_USED || defined(__DOXYGEN__)
/**
* @brief LPUART1 interrupt handler.
*
diff --git a/os/hal/ports/STM32/LLD/USARTv2/stm32_uart4.inc b/os/hal/ports/STM32/LLD/USARTv2/stm32_uart4.inc
index 4487c0186..b602eea68 100644
--- a/os/hal/ports/STM32/LLD/USARTv2/stm32_uart4.inc
+++ b/os/hal/ports/STM32/LLD/USARTv2/stm32_uart4.inc
@@ -48,6 +48,19 @@
#error "Invalid IRQ priority assigned to STM32_IRQ_UART4_PRIORITY"
#endif
+/* Other checks.*/
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_UART4) && \
+ (HAL_USE_UART && STM32_UART_USE_UART4)
+#error "UART4 used by multiple drivers"
+#endif
+
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_UART4) || \
+ (HAL_USE_UART && STM32_UART_USE_UART4)
+#define STM32_UART4_IS_USED TRUE
+#else
+#define STM32_UART4_IS_USED FALSE
+#endif
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -61,13 +74,13 @@
/*===========================================================================*/
static inline void uart4_irq_init(void) {
-#if defined(STM32_UART4_IS_USED)
+#if STM32_UART4_IS_USED
nvicEnableVector(STM32_UART4_NUMBER, STM32_IRQ_UART4_PRIORITY);
#endif
}
static inline void uart4_irq_deinit(void) {
-#if defined(STM32_UART4_IS_USED)
+#if STM32_UART4_IS_USED
nvicDisableVector(STM32_UART4_NUMBER);
#endif
}
@@ -76,9 +89,7 @@ static inline void uart4_irq_deinit(void) {
/* Driver interrupt handlers. */
/*===========================================================================*/
-#if (HAL_USE_SERIAL && STM32_SERIAL_USE_UART4) || \
- (HAL_USE_UART && STM32_UART_USE_UART4) || \
- defined(__DOXYGEN__)
+#if STM32_UART4_IS_USED || defined(__DOXYGEN__)
/**
* @brief UART4 interrupt handler.
*
diff --git a/os/hal/ports/STM32/LLD/USARTv2/stm32_uart5.inc b/os/hal/ports/STM32/LLD/USARTv2/stm32_uart5.inc
index dbbb14a51..a109d1d91 100644
--- a/os/hal/ports/STM32/LLD/USARTv2/stm32_uart5.inc
+++ b/os/hal/ports/STM32/LLD/USARTv2/stm32_uart5.inc
@@ -48,6 +48,19 @@
#error "Invalid IRQ priority assigned to STM32_IRQ_UART5_PRIORITY"
#endif
+/* Other checks.*/
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_UART5) && \
+ (HAL_USE_UART && STM32_UART_USE_UART5)
+#error "UART5 used by multiple drivers"
+#endif
+
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_UART5) || \
+ (HAL_USE_UART && STM32_UART_USE_UART5)
+#define STM32_UART5_IS_USED TRUE
+#else
+#define STM32_UART5_IS_USED FALSE
+#endif
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -61,13 +74,13 @@
/*===========================================================================*/
static inline void uart5_irq_init(void) {
-#if defined(STM32_UART5_IS_USED)
+#if STM32_UART5_IS_USED
nvicEnableVector(STM32_UART5_NUMBER, STM32_IRQ_UART5_PRIORITY);
#endif
}
static inline void uart5_irq_deinit(void) {
-#if defined(STM32_UART5_IS_USED)
+#if STM32_UART5_IS_USED
nvicDisableVector(STM32_UART5_NUMBER);
#endif
}
@@ -76,9 +89,7 @@ static inline void uart5_irq_deinit(void) {
/* Driver interrupt handlers. */
/*===========================================================================*/
-#if (HAL_USE_SERIAL && STM32_SERIAL_USE_UART5) || \
- (HAL_USE_UART && STM32_UART_USE_UART5) || \
- defined(__DOXYGEN__)
+#if STM32_UART5_IS_USED || defined(__DOXYGEN__)
/**
* @brief UART5 interrupt handler.
*
diff --git a/os/hal/ports/STM32/LLD/USARTv2/stm32_usart1.inc b/os/hal/ports/STM32/LLD/USARTv2/stm32_usart1.inc
index 7bed6ce41..affe5917a 100644
--- a/os/hal/ports/STM32/LLD/USARTv2/stm32_usart1.inc
+++ b/os/hal/ports/STM32/LLD/USARTv2/stm32_usart1.inc
@@ -48,6 +48,19 @@
#error "Invalid IRQ priority assigned to STM32_IRQ_USART1_PRIORITY"
#endif
+/* Other checks.*/
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART1) && \
+ (HAL_USE_UART && STM32_UART_USE_USART1)
+#error "USART1 used by multiple drivers"
+#endif
+
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART1) || \
+ (HAL_USE_UART && STM32_UART_USE_USART1)
+#define STM32_USART1_IS_USED TRUE
+#else
+#define STM32_USART1_IS_USED FALSE
+#endif
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -61,13 +74,13 @@
/*===========================================================================*/
static inline void usart1_irq_init(void) {
-#if defined(STM32_USART1_IS_USED)
+#if STM32_USART1_IS_USED
nvicEnableVector(STM32_USART1_NUMBER, STM32_IRQ_USART1_PRIORITY);
#endif
}
static inline void usart1_irq_deinit(void) {
-#if defined(STM32_USART1_IS_USED)
+#if STM32_USART1_IS_USED
nvicDisableVector(STM32_USART1_NUMBER);
#endif
}
@@ -76,9 +89,7 @@ static inline void usart1_irq_deinit(void) {
/* Driver interrupt handlers. */
/*===========================================================================*/
-#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART1) || \
- (HAL_USE_UART && STM32_UART_USE_USART1) || \
- defined(__DOXYGEN__)
+#if STM32_USART1_IS_USED|| defined(__DOXYGEN__)
/**
* @brief USART1 interrupt handler.
*
diff --git a/os/hal/ports/STM32/LLD/USARTv2/stm32_usart2.inc b/os/hal/ports/STM32/LLD/USARTv2/stm32_usart2.inc
index 02982791e..17dacef50 100644
--- a/os/hal/ports/STM32/LLD/USARTv2/stm32_usart2.inc
+++ b/os/hal/ports/STM32/LLD/USARTv2/stm32_usart2.inc
@@ -48,6 +48,19 @@
#error "Invalid IRQ priority assigned to STM32_IRQ_USART2_PRIORITY"
#endif
+/* Other checks.*/
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART2) && \
+ (HAL_USE_UART && STM32_UART_USE_USART2)
+#error "USART2 used by multiple drivers"
+#endif
+
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART2) || \
+ (HAL_USE_UART && STM32_UART_USE_USART2)
+#define STM32_USART2_IS_USED TRUE
+#else
+#define STM32_USART2_IS_USED FALSE
+#endif
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -61,13 +74,13 @@
/*===========================================================================*/
static inline void usart2_irq_init(void) {
-#if defined(STM32_USART2_IS_USED)
+#if STM32_USART2_IS_USED
nvicEnableVector(STM32_USART2_NUMBER, STM32_IRQ_USART2_PRIORITY);
#endif
}
static inline void usart2_irq_deinit(void) {
-#if defined(STM32_USART2_IS_USED)
+#if STM32_USART2_IS_USED
nvicDisableVector(STM32_USART2_NUMBER);
#endif
}
@@ -76,9 +89,7 @@ static inline void usart2_irq_deinit(void) {
/* Driver interrupt handlers. */
/*===========================================================================*/
-#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART2) || \
- (HAL_USE_UART && STM32_UART_USE_USART2) || \
- defined(__DOXYGEN__)
+#if STM32_USART2_IS_USED || defined(__DOXYGEN__)
/**
* @brief USART2 interrupt handler.
*
diff --git a/os/hal/ports/STM32/LLD/USARTv2/stm32_usart3.inc b/os/hal/ports/STM32/LLD/USARTv2/stm32_usart3.inc
index 1ab7607ff..71d6423b9 100644
--- a/os/hal/ports/STM32/LLD/USARTv2/stm32_usart3.inc
+++ b/os/hal/ports/STM32/LLD/USARTv2/stm32_usart3.inc
@@ -48,6 +48,19 @@
#error "Invalid IRQ priority assigned to STM32_IRQ_USART3_PRIORITY"
#endif
+/* Other checks.*/
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART3) && \
+ (HAL_USE_UART && STM32_UART_USE_USART3)
+#error "USART3 used by multiple drivers"
+#endif
+
+#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART3) || \
+ (HAL_USE_UART && STM32_UART_USE_USART3)
+#define STM32_USART3_IS_USED TRUE
+#else
+#define STM32_USART3_IS_USED FALSE
+#endif
+
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -61,13 +74,13 @@
/*===========================================================================*/
static inline void usart3_irq_init(void) {
-#if defined(STM32_USART3_IS_USED)
+#if STM32_USART3_IS_USED
nvicEnableVector(STM32_USART3_NUMBER, STM32_IRQ_USART3_PRIORITY);
#endif
}
static inline void usart3_irq_deinit(void) {
-#if defined(STM32_USART3_IS_USED)
+#if STM32_USART3_IS_USED
nvicDisableVector(STM32_USART3_NUMBER);
#endif
}
@@ -76,9 +89,7 @@ static inline void usart3_irq_deinit(void) {
/* Driver interrupt handlers. */
/*===========================================================================*/
-#if (HAL_USE_SERIAL && STM32_SERIAL_USE_USART3) || \
- (HAL_USE_UART && STM32_UART_USE_USART3) || \
- defined(__DOXYGEN__)
+#if STM32_USART3_IS_USED || defined(__DOXYGEN__)
/**
* @brief USART3 interrupt handler.
*