@@ -185,6 +185,31 @@ STATIC bool uart_init2(pyb_uart_obj_t *uart_obj) {
185185 break ;
186186 #endif
187187
188+ #if defined(UART5 ) && \
189+ defined(MICROPY_HW_UART5_TX_PORT ) && \
190+ defined(MICROPY_HW_UART5_TX_PIN ) && \
191+ defined(MICROPY_HW_UART5_RX_PORT ) && \
192+ defined(MICROPY_HW_UART5_RX_PIN )
193+ case PYB_UART_5 :
194+ UARTx = UART5 ;
195+ irqn = UART5_IRQn ;
196+ GPIO_AF_UARTx = GPIO_AF8_UART5 ;
197+ GPIO_Port = MICROPY_HW_UART5_TX_PORT ;
198+ GPIO_Pin = MICROPY_HW_UART5_TX_PIN ;
199+ __UART5_CLK_ENABLE ();
200+
201+ // The code after the case only deals with the case where the TX & RX
202+ // pins are on the same port. UART5 has them on different ports.
203+ GPIO_InitTypeDef GPIO_InitStructure ;
204+ GPIO_InitStructure .Pin = MICROPY_HW_UART5_RX_PIN ;
205+ GPIO_InitStructure .Speed = GPIO_SPEED_HIGH ;
206+ GPIO_InitStructure .Mode = GPIO_MODE_AF_PP ;
207+ GPIO_InitStructure .Pull = GPIO_PULLUP ;
208+ GPIO_InitStructure .Alternate = GPIO_AF_UARTx ;
209+ HAL_GPIO_Init (MICROPY_HW_UART5_RX_PORT , & GPIO_InitStructure );
210+ break ;
211+ #endif
212+
188213 #if defined(MICROPY_HW_UART6_PORT ) && defined(MICROPY_HW_UART6_PINS )
189214 // USART6 is on PC6/PC7 (CK on PC8)
190215 case PYB_UART_6 :
@@ -596,6 +621,13 @@ STATIC mp_obj_t pyb_uart_deinit(mp_obj_t self_in) {
596621 __UART4_RELEASE_RESET ();
597622 __UART4_CLK_DISABLE ();
598623 #endif
624+ #if defined(UART5 )
625+ } else if (uart -> Instance == UART5 ) {
626+ HAL_NVIC_DisableIRQ (UART5_IRQn );
627+ __UART5_FORCE_RESET ();
628+ __UART5_RELEASE_RESET ();
629+ __UART5_CLK_DISABLE ();
630+ #endif
599631 } else if (uart -> Instance == USART6 ) {
600632 HAL_NVIC_DisableIRQ (USART6_IRQn );
601633 __USART6_FORCE_RESET ();
0 commit comments