5757 extern "C" {
5858#endif
5959
60- /**
61- * @}
62- */
63-
64- /** @addtogroup STM32F4xx_System_Private_Defines
65- * @{
66- */
67-
68- /**
69- * @}
70- */
71-
72- /** @addtogroup STM32F4xx_System_Private_TypesDefinitions
73- * @{
74- */
75-
76- /**
77- * @}
78- */
79-
80- /** @addtogroup STM32F4xx_System_Private_Macros
81- * @{
82- */
83-
84- /**
85- * @}
86- */
87-
88- /** @addtogroup STM32F4xx_System_Private_Variables
89- * @{
90- */
91- /// @brief uart caracteristics
60+ // @brief uart caracteristics
61+ #if defined(STM32F4xx )
62+ #define UART_NUM (10)
63+ #elif defined(STM32F0xx ) || defined(STM32F7xx )
9264#define UART_NUM (8)
65+ #elif defined(STM32F2xx )
66+ #define UART_NUM (6)
67+ #else // STM32F1xx || STM32F3xx || STM32L0xx || STM32L1xx || STM32L4xx
68+ #define UART_NUM (5)
69+ #endif
9370static UART_HandleTypeDef * uart_handlers [UART_NUM ] = {NULL };
9471static void (* rx_callback [UART_NUM ])(serial_t * );
9572static serial_t * rx_callback_obj [UART_NUM ];
9673static int (* tx_callback [UART_NUM ])(serial_t * );
9774static serial_t * tx_callback_obj [UART_NUM ];
9875
9976static uint8_t rx_buffer [1 ] = {0 };
100- /**
101- * @}
102- */
103-
104- /** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
105- * @{
106- */
107-
108- /**
109- * @}
110- */
111-
112- /** @addtogroup STM32F4xx_System_Private_Functions
113- * @{
114- */
11577
11678/**
11779 * @brief Function called to initialize the uart interface
@@ -177,6 +139,14 @@ void uart_init(serial_t *obj)
177139 obj -> index = 3 ;
178140 obj -> irq = UART4_IRQn ;
179141 }
142+ #elif defined(USART4_BASE )
143+ else if (obj -> uart == USART4 ) {
144+ __HAL_RCC_USART4_FORCE_RESET ();
145+ __HAL_RCC_USART4_RELEASE_RESET ();
146+ __HAL_RCC_USART4_CLK_ENABLE ();
147+ obj -> index = 3 ;
148+ obj -> irq = USART4_IRQn ;
149+ }
180150#endif
181151#if defined(UART5_BASE )
182152 else if (obj -> uart == UART5 ) {
@@ -186,6 +156,14 @@ void uart_init(serial_t *obj)
186156 obj -> index = 4 ;
187157 obj -> irq = UART5_IRQn ;
188158 }
159+ #elif defined(USART5_BASE )
160+ else if (obj -> uart == USART5 ) {
161+ __HAL_RCC_USART5_FORCE_RESET ();
162+ __HAL_RCC_USART5_RELEASE_RESET ();
163+ __HAL_RCC_USART5_CLK_ENABLE ();
164+ obj -> index = 4 ;
165+ obj -> irq = USART5_IRQn ;
166+ }
189167#endif
190168#if defined(USART6_BASE )
191169 else if (obj -> uart == USART6 ) {
@@ -204,6 +182,14 @@ void uart_init(serial_t *obj)
204182 obj -> index = 6 ;
205183 obj -> irq = UART7_IRQn ;
206184 }
185+ #elif defined(USART7_BASE )
186+ else if (obj -> uart == USART7 ) {
187+ __HAL_RCC_USART7_FORCE_RESET ();
188+ __HAL_RCC_USART7_RELEASE_RESET ();
189+ __HAL_RCC_USART7_CLK_ENABLE ();
190+ obj -> index = 6 ;
191+ obj -> irq = USART7_IRQn ;
192+ }
207193#endif
208194#if defined(UART8_BASE )
209195 else if (obj -> uart == UART8 ) {
@@ -213,6 +199,32 @@ void uart_init(serial_t *obj)
213199 obj -> index = 7 ;
214200 obj -> irq = UART8_IRQn ;
215201 }
202+ #elif defined(USART8_BASE )
203+ else if (obj -> uart == USART8 ) {
204+ __HAL_RCC_USART8_FORCE_RESET ();
205+ __HAL_RCC_USART8_RELEASE_RESET ();
206+ __HAL_RCC_USART8_CLK_ENABLE ();
207+ obj -> index = 7 ;
208+ obj -> irq = USART8_IRQn ;
209+ }
210+ #endif
211+ #if defined(UART9_BASE )
212+ else if (obj -> uart == UART9 ) {
213+ __HAL_RCC_UART9_FORCE_RESET ();
214+ __HAL_RCC_UART9_RELEASE_RESET ();
215+ __HAL_RCC_UART9_CLK_ENABLE ();
216+ obj -> index = 8 ;
217+ obj -> irq = UART9_IRQn ;
218+ }
219+ #endif
220+ #if defined(UART10_BASE )
221+ else if (obj -> uart == UART10 ) {
222+ __HAL_RCC_UART10_FORCE_RESET ();
223+ __HAL_RCC_UART10_RELEASE_RESET ();
224+ __HAL_RCC_UART10_CLK_ENABLE ();
225+ obj -> index = 9 ;
226+ obj -> irq = UART10_IRQn ;
227+ }
216228#endif
217229
218230 //Configure GPIOs
@@ -291,13 +303,25 @@ void uart_deinit(serial_t *obj)
291303 __HAL_RCC_UART4_RELEASE_RESET ();
292304 __HAL_RCC_UART4_CLK_DISABLE ();
293305 break ;
306+ #elif defined(USART4_BASE )
307+ case 3 :
308+ __HAL_RCC_USART4_FORCE_RESET ();
309+ __HAL_RCC_USART4_RELEASE_RESET ();
310+ __HAL_RCC_USART4_CLK_DISABLE ();
311+ break ;
294312#endif
295313#if defined(UART5_BASE )
296314 case 4 :
297315 __HAL_RCC_UART5_FORCE_RESET ();
298316 __HAL_RCC_UART5_RELEASE_RESET ();
299317 __HAL_RCC_UART5_CLK_DISABLE ();
300318 break ;
319+ #elif defined(USART5_BASE )
320+ case 4 :
321+ __HAL_RCC_USART5_FORCE_RESET ();
322+ __HAL_RCC_USART5_RELEASE_RESET ();
323+ __HAL_RCC_USART5_CLK_DISABLE ();
324+ break ;
301325#endif
302326#if defined(USART6_BASE )
303327 case 5 :
@@ -312,15 +336,41 @@ void uart_deinit(serial_t *obj)
312336 __HAL_RCC_UART7_RELEASE_RESET ();
313337 __HAL_RCC_UART7_CLK_DISABLE ();
314338 break ;
339+ #elif defined(USART7_BASE )
340+ case 6 :
341+ __HAL_RCC_USART7_FORCE_RESET ();
342+ __HAL_RCC_USART7_RELEASE_RESET ();
343+ __HAL_RCC_USART7_CLK_DISABLE ();
344+ break ;
315345#endif
316346#if defined(UART8_BASE )
317347 case 7 :
318348 __HAL_RCC_UART8_FORCE_RESET ();
319349 __HAL_RCC_UART8_RELEASE_RESET ();
320350 __HAL_RCC_UART8_CLK_DISABLE ();
321351 break ;
352+ #elif defined(USART8_BASE )
353+ case 7 :
354+ __HAL_RCC_USART8_FORCE_RESET ();
355+ __HAL_RCC_USART8_RELEASE_RESET ();
356+ __HAL_RCC_USART8_CLK_DISABLE ();
357+ break ;
322358#endif
323- }
359+ #if defined(UART9_BASE )
360+ case 8 :
361+ __HAL_RCC_UART9_FORCE_RESET ();
362+ __HAL_RCC_UART9_RELEASE_RESET ();
363+ __HAL_RCC_UART9_CLK_DISABLE ();
364+ break ;
365+ #endif
366+ #if defined(UART10_BASE )
367+ case 9 :
368+ __HAL_RCC_UART10_FORCE_RESET ();
369+ __HAL_RCC_UART10_RELEASE_RESET ();
370+ __HAL_RCC_UART10_CLK_DISABLE ();
371+ break ;
372+ #endif
373+ }
324374
325375 HAL_UART_DeInit (uart_handlers [obj -> index ]);
326376}
@@ -590,7 +640,50 @@ void USART2_IRQHandler(void)
590640void USART3_IRQHandler (void )
591641{
592642 HAL_NVIC_ClearPendingIRQ (USART3_IRQn );
593- HAL_UART_IRQHandler (uart_handlers [2 ]);
643+ #if defined(STM32F091xC ) || defined (STM32F098xx )
644+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART3 )!= RESET )
645+ {
646+ HAL_UART_IRQHandler (uart_handlers [2 ]);
647+ }
648+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART4 )!= RESET )
649+ {
650+ HAL_UART_IRQHandler (uart_handlers [3 ]);
651+ }
652+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART5 )!= RESET )
653+ {
654+ HAL_UART_IRQHandler (uart_handlers [4 ]);
655+ }
656+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART6 )!= RESET )
657+ {
658+ HAL_UART_IRQHandler (uart_handlers [5 ]);
659+ }
660+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART7 )!= RESET )
661+ {
662+ HAL_UART_IRQHandler (uart_handlers [6 ]);
663+ }
664+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART8 )!= RESET )
665+ {
666+ HAL_UART_IRQHandler (uart_handlers [7 ]);
667+ }
668+ #else
669+ if (uart_handlers [2 ] != NULL ) {
670+ HAL_UART_IRQHandler (uart_handlers [2 ]);
671+ }
672+ #if defined(STM32F0xx )
673+ // USART3_4_IRQn
674+ if (uart_handlers [3 ] != NULL ) {
675+ HAL_UART_IRQHandler (uart_handlers [3 ]);
676+ }
677+ #if defined(STM32F030xC )
678+ if (uart_handlers [4 ] != NULL ) {
679+ HAL_UART_IRQHandler (uart_handlers [4 ]);
680+ }
681+ if (uart_handlers [5 ] != NULL ) {
682+ HAL_UART_IRQHandler (uart_handlers [5 ]);
683+ }
684+ #endif // STM32F030xC
685+ #endif // STM32F0xx
686+ #endif // STM32F091xC || STM32F098xx
594687}
595688#endif
596689
@@ -608,7 +701,27 @@ void UART4_IRQHandler(void)
608701#endif
609702
610703/**
611- * @brief USART 3 IRQ handler
704+ * @brief USART 4/5 IRQ handler
705+ * @param None
706+ * @retval None
707+ */
708+ #if defined(STM32L0xx )
709+ #if defined(USART4_BASE ) || defined(USART5_BASE )
710+ void USART4_5_IRQHandler (void )
711+ {
712+ HAL_NVIC_ClearPendingIRQ (USART4_IRQn );
713+ if (uart_handlers [3 ] != NULL ) {
714+ HAL_UART_IRQHandler (uart_handlers [3 ]);
715+ }
716+ if (uart_handlers [4 ] != NULL ) {
717+ HAL_UART_IRQHandler (uart_handlers [4 ]);
718+ }
719+ }
720+ #endif
721+ #endif
722+
723+ /**
724+ * @brief USART 5 IRQ handler
612725 * @param None
613726 * @retval None
614727 */
@@ -625,7 +738,7 @@ void UART5_IRQHandler(void)
625738 * @param None
626739 * @retval None
627740 */
628- #if defined(USART6_BASE )
741+ #if defined(USART6_BASE ) && !defined( STM32F0xx )
629742void USART6_IRQHandler (void )
630743{
631744 HAL_NVIC_ClearPendingIRQ (USART6_IRQn );
@@ -660,16 +773,31 @@ void UART8_IRQHandler(void)
660773#endif
661774
662775/**
663- * @}
776+ * @brief UART 9 IRQ handler
777+ * @param None
778+ * @retval None
664779 */
780+ #if defined(UART9_BASE )
781+ void UART9_IRQHandler (void )
782+ {
783+ HAL_NVIC_ClearPendingIRQ (UART9_IRQn );
784+ HAL_UART_IRQHandler (uart_handlers [8 ]);
785+ }
786+ #endif
665787
666788/**
667- * @}
789+ * @brief UART 10 IRQ handler
790+ * @param None
791+ * @retval None
668792 */
793+ #if defined(UART10_BASE )
794+ void UART10_IRQHandler (void )
795+ {
796+ HAL_NVIC_ClearPendingIRQ (UART10_IRQn );
797+ HAL_UART_IRQHandler (uart_handlers [9 ]);
798+ }
799+ #endif
669800
670- /**
671- * @}
672- */
673801#ifdef __cplusplus
674802}
675803#endif
0 commit comments