58
58
#endif
59
59
60
60
// @brief uart caracteristics
61
+ #if defined(STM32F4xx )
62
+ #define UART_NUM (10)
63
+ #elif defined(STM32F0xx ) || defined(STM32F7xx )
61
64
#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
62
70
static UART_HandleTypeDef * uart_handlers [UART_NUM ] = {NULL };
63
71
static void (* rx_callback [UART_NUM ])(serial_t * );
64
72
static serial_t * rx_callback_obj [UART_NUM ];
@@ -131,6 +139,14 @@ void uart_init(serial_t *obj)
131
139
obj -> index = 3 ;
132
140
obj -> irq = UART4_IRQn ;
133
141
}
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
+ }
134
150
#endif
135
151
#if defined(UART5_BASE )
136
152
else if (obj -> uart == UART5 ) {
@@ -140,6 +156,14 @@ void uart_init(serial_t *obj)
140
156
obj -> index = 4 ;
141
157
obj -> irq = UART5_IRQn ;
142
158
}
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
+ }
143
167
#endif
144
168
#if defined(USART6_BASE )
145
169
else if (obj -> uart == USART6 ) {
@@ -158,6 +182,14 @@ void uart_init(serial_t *obj)
158
182
obj -> index = 6 ;
159
183
obj -> irq = UART7_IRQn ;
160
184
}
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
+ }
161
193
#endif
162
194
#if defined(UART8_BASE )
163
195
else if (obj -> uart == UART8 ) {
@@ -167,6 +199,32 @@ void uart_init(serial_t *obj)
167
199
obj -> index = 7 ;
168
200
obj -> irq = UART8_IRQn ;
169
201
}
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
+ }
170
228
#endif
171
229
172
230
//Configure GPIOs
@@ -245,13 +303,25 @@ void uart_deinit(serial_t *obj)
245
303
__HAL_RCC_UART4_RELEASE_RESET ();
246
304
__HAL_RCC_UART4_CLK_DISABLE ();
247
305
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 ;
248
312
#endif
249
313
#if defined(UART5_BASE )
250
314
case 4 :
251
315
__HAL_RCC_UART5_FORCE_RESET ();
252
316
__HAL_RCC_UART5_RELEASE_RESET ();
253
317
__HAL_RCC_UART5_CLK_DISABLE ();
254
318
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 ;
255
325
#endif
256
326
#if defined(USART6_BASE )
257
327
case 5 :
@@ -266,15 +336,41 @@ void uart_deinit(serial_t *obj)
266
336
__HAL_RCC_UART7_RELEASE_RESET ();
267
337
__HAL_RCC_UART7_CLK_DISABLE ();
268
338
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 ;
269
345
#endif
270
346
#if defined(UART8_BASE )
271
347
case 7 :
272
348
__HAL_RCC_UART8_FORCE_RESET ();
273
349
__HAL_RCC_UART8_RELEASE_RESET ();
274
350
__HAL_RCC_UART8_CLK_DISABLE ();
275
351
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 ;
276
358
#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
+ }
278
374
279
375
HAL_UART_DeInit (uart_handlers [obj -> index ]);
280
376
}
@@ -544,7 +640,50 @@ void USART2_IRQHandler(void)
544
640
void USART3_IRQHandler (void )
545
641
{
546
642
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
548
687
}
549
688
#endif
550
689
@@ -562,7 +701,26 @@ void UART4_IRQHandler(void)
562
701
#endif
563
702
564
703
/**
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
+ {
711
+ HAL_NVIC_ClearPendingIRQ (USART4_IRQn );
712
+ if (uart_handlers [3 ] != NULL ) {
713
+ HAL_UART_IRQHandler (uart_handlers [3 ]);
714
+ }
715
+ if (uart_handlers [4 ] != NULL ) {
716
+ HAL_UART_IRQHandler (uart_handlers [4 ]);
717
+ }
718
+ }
719
+ #endif
720
+ #endif
721
+
722
+ /**
723
+ * @brief USART 5 IRQ handler
566
724
* @param None
567
725
* @retval None
568
726
*/
@@ -579,7 +737,7 @@ void UART5_IRQHandler(void)
579
737
* @param None
580
738
* @retval None
581
739
*/
582
- #if defined(USART6_BASE )
740
+ #if defined(USART6_BASE ) && !defined( STM32F0xx )
583
741
void USART6_IRQHandler (void )
584
742
{
585
743
HAL_NVIC_ClearPendingIRQ (USART6_IRQn );
@@ -613,6 +771,32 @@ void UART8_IRQHandler(void)
613
771
}
614
772
#endif
615
773
774
+ /**
775
+ * @brief UART 9 IRQ handler
776
+ * @param None
777
+ * @retval None
778
+ */
779
+ #if defined(UART9_BASE )
780
+ void UART9_IRQHandler (void )
781
+ {
782
+ HAL_NVIC_ClearPendingIRQ (UART9_IRQn );
783
+ HAL_UART_IRQHandler (uart_handlers [8 ]);
784
+ }
785
+ #endif
786
+
787
+ /**
788
+ * @brief UART 10 IRQ handler
789
+ * @param None
790
+ * @retval None
791
+ */
792
+ #if defined(UART10_BASE )
793
+ void UART10_IRQHandler (void )
794
+ {
795
+ HAL_NVIC_ClearPendingIRQ (UART10_IRQn );
796
+ HAL_UART_IRQHandler (uart_handlers [9 ]);
797
+ }
798
+ #endif
799
+
616
800
#ifdef __cplusplus
617
801
}
618
802
#endif
0 commit comments