8000 stm32/uart: Add support for USART3-8 on F0 MCUs. · andrewleech/micropython@cdc0140 · GitHub
[go: up one dir, main page]

Skip to content

Commit cdc0140

Browse files
committed
stm32/uart: Add support for USART3-8 on F0 MCUs.
1 parent 84f4d58 commit cdc0140

File tree

1 file changed

+61
-3
lines changed

1 file changed

+61
-3
lines changed

ports/stm32/uart.c

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,11 @@ STATIC bool uart_init2(pyb_uart_obj_t *uart_obj) {
215215
case PYB_UART_3:
216216
uart_unit = 3;
217217
UARTx = USART3;
218+
#if defined(STM32F0)
219+
irqn = USART3_8_IRQn;
220+
#else
218221
irqn = USART3_IRQn;
222+
#endif
219223
pins[0] = MICROPY_HW_UART3_TX;
220224
pins[1] = MICROPY_HW_UART3_RX;
221225
#if defined(MICROPY_HW_UART3_RTS)
@@ -235,30 +239,46 @@ STATIC bool uart_init2(pyb_uart_obj_t *uart_obj) {
235239
#if defined(MICROPY_HW_UART4_TX) && defined(MICROPY_HW_UART4_RX)
236240
case PYB_UART_4:
237241
uart_unit = 4;
242+
#if defined(STM32F0)
243+
UARTx = USART4;
244+
irqn = USART3_8_IRQn;
245+
__HAL_RCC_USART4_CLK_ENABLE();
246+
#else
238247
UARTx = UART4;
239248
irqn = UART4_IRQn;
249+
__HAL_RCC_UART4_CLK_ENABLE();
250+
#endif
240251
pins[0] = MICROPY_HW_UART4_TX;
241252
pins[1] = MICROPY_HW_UART4_RX;
242-
__HAL_RCC_UART4_CLK_ENABLE();
243253
break;
244254
#endif
245255

246256
#if defined(MICROPY_HW_UART5_TX) && defined(MICROPY_HW_UART5_RX)
247257
case PYB_UART_5:
248258
uart_unit = 5;
259+
#if defined(STM32F0)
260+
UARTx = USART5;
261+
irqn = USART3_8_IRQn;
262+
__HAL_RCC_USART5_CLK_ENABLE();
263+
#else
249264
UARTx = UART5;
250265
irqn = UART5_IRQn;
266+
__HAL_RCC_UART5_CLK_ENABLE();
267+
#endif
251268
pins[0] = MICROPY_HW_UART5_TX;
252269
pins[1] = MICROPY_HW_UART5_RX;
253-
__HAL_RCC_UART5_CLK_ENABLE();
254270
break;
255271
#endif
256272

257273
#if defined(MICROPY_HW_UART6_TX) && defined(MICROPY_HW_UART6_RX)
258274
case PYB_UART_6:
259275
uart_unit = 6;
260276
UARTx = USART6;
277+
#if defined(STM32F0)
278+
irqn = USART3_8_IRQn;
279+
#else
261280
irqn = USART6_IRQn;
281+
#endif
262282
pins[0] = MICROPY_HW_UART6_TX;
263283
pins[1] = MICROPY_HW_UART6_RX;
264284
#if defined(MICROPY_HW_UART6_RTS)
@@ -278,11 +298,17 @@ STATIC bool uart_init2(pyb_uart_obj_t *uart_obj) {
278298
#if defined(MICROPY_HW_UART7_TX) && defined(MICROPY_HW_UART7_RX)
279299
case PYB_UART_7:
280300
uart_unit = 7;
301+
#if defined(STM32F0)
302+
UARTx = USART7;
303+
irqn = USART3_8_IRQn;
304+
__HAL_RCC_USART7_CLK_ENABLE();
305+
#else
281306
UARTx = UART7;
282307
irqn = UART7_IRQn;
308+
__HAL_RCC_UART7_CLK_ENABLE();
309+
#endif
283310
pins[0] = MICROPY_HW_UART7_TX;
284311
pins[1] = MICROPY_HW_UART7_RX;
285-
__HAL_RCC_UART7_CLK_ENABLE();
286312
break;
287313
#endif
288314

@@ -806,6 +832,14 @@ STATIC mp_obj_t pyb_uart_make_new(const mp_obj_type_t *type, size_t n_args, size
806832
} else if (strcmp(port, MICROPY_HW_UART6_NAME) == 0) {
807833
uart_id = PYB_UART_6;
808834
#endif
835+
#ifdef MICROPY_HW_UART7_NAME
836+
} else if (strcmp(port, MICROPY_HW_UART7_NAME) == 0) {
837+
uart_id = PYB_UART_7;
838+
#endif
839+
#ifdef MICROPY_HW_UART8_NAME
840+
} else if (strcmp(port, MICROPY_HW_UART8_NAME) == 0) {
841+
uart_id = PYB_UART_8;
842+
#endif
809843
} else {
810844
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "UART(%s) doesn't exist", port));
811845
}
@@ -876,13 +910,25 @@ STATIC mp_obj_t pyb_uart_deinit(mp_obj_t self_in) {
876910
__HAL_RCC_UART4_RELEASE_RESET();
877911
__HAL_RCC_UART4_CLK_DISABLE();
878912
#endif
913+
#if defined(USART4)
914+
} else if (uart->Instance == USART4) {
915+
__HAL_RCC_USART4_FORCE_RESET();
916+
__HAL_RCC_USART4_RELEASE_RESET();
917+
__HAL_RCC_USART4_CLK_DISABLE();
918+
#endif
879919
#if defined(UART5)
880920
} else if (uart->Instance == UART5) {
881921
HAL_NVIC_DisableIRQ(UART5_IRQn);
882922
__HAL_RCC_UART5_FORCE_RESET();
883923
__HAL_RCC_UART5_RELEASE_RESET();
884924
__HAL_RCC_UART5_CLK_DISABLE();
885925
#endif
926+
#if defined(USART5)
927+
} else if (uart->Instance == USART5) {
928+
__HAL_RCC_USART5_FORCE_RESET();
929+
__HAL_RCC_USART5_RELEASE_RESET();
930+
__HAL_RCC_USART5_CLK_DISABLE();
931+
#endif
886932
#if defined(UART6)
887933
} else if (uart->Instance == USART6) {
888934
HAL_NVIC_DisableIRQ(USART6_IRQn);
@@ -897,13 +943,25 @@ STATIC mp_obj_t pyb_uart_deinit(mp_obj_t self_in) {
897943
__HAL_RCC_UART7_RELEASE_RESET();
898944
__HAL_RCC_UART7_CLK_DISABLE();
899945
#endif
946+
#if defined(USART7)
947+
} else if (uart->Instance == USART7) {
948+
__HAL_RCC_USART7_FORCE_RESET();
949+
__HAL_RCC_USART7_RELEASE_RESET();
950+
__HAL_RCC_USART7_CLK_DISABLE();
951+
#endif
900952
#if defined(UART8)
901953
} else if (uart->Instance == UART8) {
902954
HAL_NVIC_DisableIRQ(UART8_IRQn);
903955
__HAL_RCC_UART8_FORCE_RESET();
904956
__HAL_RCC_UART8_RELEASE_RESET();
905957
__HAL_RCC_UART8_CLK_DISABLE();
906958
#endif
959+
#if defined(USART8)
960+
} else if (uart->Instance == USART8) {
961+
__HAL_RCC_USART8_FORCE_RESET();
962+
__HAL_RCC_USART8_RELEASE_RESET();
963+
__HAL_RCC_USART8_CLK_DISABLE();
964+
#endif
907965
}
908966
return mp_const_none;
909967
}

0 commit comments

Comments
 (0)
0