5858#endif
5959
6060// @brief uart caracteristics
61+ #if defined(STM32F4xx )
62+ #define UART_NUM (10)
63+ #elif defined(STM32F0xx ) || defined(STM32F7xx )
6164#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
6270static UART_HandleTypeDef * uart_handlers [UART_NUM ] = {NULL };
6371static void (* rx_callback [UART_NUM ])(serial_t * );
6472static serial_t * rx_callback_obj [UART_NUM ];
@@ -131,6 +139,14 @@ void uart_init(serial_t *obj)
131139 obj -> index = 3 ;
132140 obj -> irq = UART4_IRQn ;
133141 }
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+ }
134150#endif
135151#if defined(UART5_BASE )
136152 else if (obj -> uart == UART5 ) {
@@ -140,6 +156,14 @@ void uart_init(serial_t *obj)
140156 obj -> index = 4 ;
141157 obj -> irq = UART5_IRQn ;
142158 }
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+ }
143167#endif
144168#if defined(USART6_BASE )
145169 else if (obj -> uart == USART6 ) {
@@ -158,6 +182,14 @@ void uart_init(serial_t *obj)
158182 obj -> index = 6 ;
159183 obj -> irq = UART7_IRQn ;
160184 }
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+ }
161193#endif
162194#if defined(UART8_BASE )
163195 else if (obj -> uart == UART8 ) {
@@ -167,6 +199,32 @@ void uart_init(serial_t *obj)
167199 obj -> index = 7 ;
168200 obj -> irq = UART8_IRQn ;
169201 }
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+ }
170228#endif
171229
172230 //Configure GPIOs
@@ -245,13 +303,25 @@ void uart_deinit(serial_t *obj)
245303 __HAL_RCC_UART4_RELEASE_RESET ();
246304 __HAL_RCC_UART4_CLK_DISABLE ();
247305 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 ;
248312#endif
249313#if defined(UART5_BASE )
250314 case 4 :
251315 __HAL_RCC_UART5_FORCE_RESET ();
252316 __HAL_RCC_UART5_RELEASE_RESET ();
253317 __HAL_RCC_UART5_CLK_DISABLE ();
254318 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 ;
255325#endif
256326#if defined(USART6_BASE )
257327 case 5 :
@@ -266,15 +336,41 @@ void uart_deinit(serial_t *obj)
266336 __HAL_RCC_UART7_RELEASE_RESET ();
267337 __HAL_RCC_UART7_CLK_DISABLE ();
268338 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 ;
269345#endif
270346#if defined(UART8_BASE )
271347 case 7 :
272348 __HAL_RCC_UART8_FORCE_RESET ();
273349 __HAL_RCC_UART8_RELEASE_RESET ();
274350 __HAL_RCC_UART8_CLK_DISABLE ();
275351 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 ;
276358#endif
277- }
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+ }
278374
279375 HAL_UART_DeInit (uart_handlers [obj -> index ]);
280376}
@@ -544,7 +640,50 @@ void USART2_IRQHandler(void)
544640void USART3_IRQHandler (void )
545641{
546642 HAL_NVIC_ClearPendingIRQ (USART3_IRQn );
547- 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
548687}
549688#endif
550689
@@ -562,7 +701,27 @@ void UART4_IRQHandler(void)
562701#endif
563702
564703/**
565- * @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
566725 * @param None
567726 * @retval None
568727 */
@@ -579,7 +738,7 @@ void UART5_IRQHandler(void)
579738 * @param None
580739 * @retval None
581740 */
582- #if defined(USART6_BASE )
741+ #if defined(USART6_BASE ) && !defined( STM32F0xx )
583742void USART6_IRQHandler (void )
584743{
585744 HAL_NVIC_ClearPendingIRQ (USART6_IRQn );
@@ -613,6 +772,32 @@ void UART8_IRQHandler(void)
613772}
614773#endif
615774
775+ /**
776+ * @brief UART 9 IRQ handler
777+ * @param None
778+ * @retval None
779+ */
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
787+
788+ /**
789+ * @brief UART 10 IRQ handler
790+ * @param None
791+ * @retval None
792+ */
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
800+
616801#ifdef __cplusplus
617802}
618803#endif
0 commit comments