57
57
extern "C" {
58
58
#endif
59
59
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 )
92
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
93
70
static UART_HandleTypeDef * uart_handlers [UART_NUM ] = {NULL };
94
71
static void (* rx_callback [UART_NUM ])(serial_t * );
95
72
static serial_t * rx_callback_obj [UART_NUM ];
96
73
static int (* tx_callback [UART_NUM ])(serial_t * );
97
74
static serial_t * tx_callback_obj [UART_NUM ];
98
75
99
76
static 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
- */
115
77
116
78
/**
117
79
* @brief Function called to initialize the uart interface
@@ -177,6 +139,14 @@ void uart_init(serial_t *obj)
177
139
obj -> index = 3 ;
178
140
obj -> irq = UART4_IRQn ;
179
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
+ }
180
150
#endif
181
151
#if defined(UART5_BASE )
182
152
else if (obj -> uart == UART5 ) {
@@ -186,6 +156,14 @@ void uart_init(serial_t *obj)
186
156
obj -> index = 4 ;
187
157
obj -> irq = UART5_IRQn ;
188
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
+ }
189
167
#endif
190
168
#if defined(USART6_BASE )
191
169
else if (obj -> uart == USART6 ) {
@@ -204,6 +182,14 @@ void uart_init(serial_t *obj)
204
182
obj -> index = 6 ;
205
183
obj -> irq = UART7_IRQn ;
206
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
+ }
207
193
#endif
208
194
#if defined(UART8_BASE )
209
195
else if (obj -> uart == UART8 ) {
@@ -213,6 +199,32 @@ void uart_init(serial_t *obj)
213
199
obj -> index = 7 ;
214
200
obj -> irq = UART8_IRQn ;
215
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
+ }
216
228
#endif
217
229
218
230
//Configure GPIOs
@@ -291,13 +303,25 @@ void uart_deinit(serial_t *obj)
291
303
__HAL_RCC_UART4_RELEASE_RESET ();
292
304
__HAL_RCC_UART4_CLK_DISABLE ();
293
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 ;
294
312
#endif
295
313
#if defined(UART5_BASE )
296
314
case 4 :
297
315
__HAL_RCC_UART5_FORCE_RESET ();
298
316
__HAL_RCC_UART5_RELEASE_RESET ();
299
317
__HAL_RCC_UART5_CLK_DISABLE ();
300
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 ;
301
325
#endif
302
326
#if defined(USART6_BASE )
303
327
case 5 :
@@ -312,15 +336,41 @@ void uart_deinit(serial_t *obj)
312
336
__HAL_RCC_UART7_RELEASE_RESET ();
313
337
__HAL_RCC_UART7_CLK_DISABLE ();
314
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 ;
315
345
#endif
316
346
#if defined(UART8_BASE )
317
347
case 7 :
318
348
__HAL_RCC_UART8_FORCE_RESET ();
319
349
__HAL_RCC_UART8_RELEASE_RESET ();
320
350
__HAL_RCC_UART8_CLK_DISABLE ();
321
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 ;
322
358
#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
+ }
324
374
325
375
HAL_UART_DeInit (uart_handlers [obj -> index ]);
326
376
}
@@ -590,7 +640,50 @@ void USART2_IRQHandler(void)
590
640
void USART3_IRQHandler (void )
591
641
{
592
642
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
594
687
}
595
688
#endif
596
689
@@ -608,7 +701,27 @@ void UART4_IRQHandler(void)
608
701
#endif
609
702
610
703
/**
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
612
725
* @param None
613
726
* @retval None
614
727
*/
@@ -625,7 +738,7 @@ void UART5_IRQHandler(void)
625
738
* @param None
626
739
* @retval None
627
740
*/
628
- #if defined(USART6_BASE )
741
+ #if defined(USART6_BASE ) && !defined( STM32F0xx )
629
742
void USART6_IRQHandler (void )
630
743
{
631
744
HAL_NVIC_ClearPendingIRQ (USART6_IRQn );
@@ -660,16 +773,31 @@ void UART8_IRQHandler(void)
660
773
#endif
661
774
662
775
/**
663
- * @}
776
+ * @brief UART 9 IRQ handler
777
+ * @param None
778
+ * @retval None
664
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
665
787
666
788
/**
667
- * @}
789
+ * @brief UART 10 IRQ handler
790
+ * @param None
791
+ * @retval None
668
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
669
800
670
- /**
671
- * @}
672
- */
673
801
#ifdef __cplusplus
674
802
}
675
803
#endif
0 commit comments