void uart_deinit(pyb_uart_obj_t *self) { self->is_enabled = false; // Disable UART self->uartx->CR1 &= ~USART_CR1_UE; // Reset and turn off the UART peripheral if (self->uart_id == 1) { HAL_NVIC_DisableIRQ(USART1_IRQn); __HAL_RCC_USART1_FORCE_RESET(); __HAL_RCC_USART1_RELEASE_RESET(); __HAL_RCC_USART1_CLK_DISABLE(); } else if (self->uart_id == 2) { HAL_NVIC_DisableIRQ(USART2_IRQn); __HAL_RCC_USART2_FORCE_RESET(); __HAL_RCC_USART2_RELEASE_RESET(); __HAL_RCC_USART2_CLK_DISABLE(); #if defined(USART3) } else if (self->uart_id == 3) { #if !defined(STM32F0) HAL_NVIC_DisableIRQ(USART3_IRQn); #endif __HAL_RCC_USART3_FORCE_RESET(); __HAL_RCC_USART3_RELEASE_RESET(); __HAL_RCC_USART3_CLK_DISABLE(); #endif #if defined(UART4) } else if (self->uart_id == 4) { HAL_NVIC_DisableIRQ(UART4_IRQn); __HAL_RCC_UART4_FORCE_RESET(); __HAL_RCC_UART4_RELEASE_RESET(); __HAL_RCC_UART4_CLK_DISABLE(); #endif #if defined(USART4) } else if (self->uart_id == 4) { __HAL_RCC_USART4_FORCE_RESET(); __HAL_RCC_USART4_RELEASE_RESET(); __HAL_RCC_USART4_CLK_DISABLE(); #endif #if defined(UART5) } else if (self->uart_id == 5) { HAL_NVIC_DisableIRQ(UART5_IRQn); __HAL_RCC_UART5_FORCE_RESET(); __HAL_RCC_UART5_RELEASE_RESET(); __HAL_RCC_UART5_CLK_DISABLE(); #endif #if defined(USART5) } else if (self->uart_id == 5) { __HAL_RCC_USART5_FORCE_RESET(); __HAL_RCC_USART5_RELEASE_RESET(); __HAL_RCC_USART5_CLK_DISABLE(); #endif #if defined(UART6) } else if (self->uart_id == 6) { HAL_NVIC_DisableIRQ(USART6_IRQn); __HAL_RCC_USART6_FORCE_RESET(); __HAL_RCC_USART6_RELEASE_RESET(); __HAL_RCC_USART6_CLK_DISABLE(); #endif #if defined(UART7) } else if (self->uart_id == 7) { HAL_NVIC_DisableIRQ(UART7_IRQn); __HAL_RCC_UART7_FORCE_RESET(); __HAL_RCC_UART7_RELEASE_RESET(); __HAL_RCC_UART7_CLK_DISABLE(); #endif #if defined(USART7) } else if (self->uart_id == 7) { __HAL_RCC_USART7_FORCE_RESET(); __HAL_RCC_USART7_RELEASE_RESET(); __HAL_RCC_USART7_CLK_DISABLE(); #endif #if defined(UART8) } else if (self->uart_id == 8) { HAL_NVIC_DisableIRQ(UART8_IRQn); __HAL_RCC_UART8_FORCE_RESET(); __HAL_RCC_UART8_RELEASE_RESET(); __HAL_RCC_UART8_CLK_DISABLE(); #endif #if defined(USART8) } else if (self->uart_id == 8) { __HAL_RCC_USART8_FORCE_RESET(); __HAL_RCC_USART8_RELEASE_RESET(); __HAL_RCC_USART8_CLK_DISABLE(); #endif #if defined(UART9) } else if (self->uart_id == 9) { HAL_NVIC_DisableIRQ(UART9_IRQn); __HAL_RCC_UART9_FORCE_RESET(); __HAL_RCC_UART9_RELEASE_RESET(); __HAL_RCC_UART9_CLK_DISABLE(); #endif #if defined(UART10) } else if (self->uart_id == 10) { HAL_NVIC_DisableIRQ(UART10_IRQn); __HAL_RCC_UART10_FORCE_RESET(); __HAL_RCC_UART10_RELEASE_RESET(); __HAL_RCC_UART10_CLK_DISABLE(); #endif } }
/** * @brief UART MSP De-Initialization * This function frees the hardware resources used in this example: * - Disable the Peripheral's clock * - Revert GPIO and NVIC configuration to their default state * @param huart: UART handle pointer * @retval None */ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) { switch((uint32_t)huart->Instance) { case (uint32_t)USART1 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART1_FORCE_RESET(); __HAL_RCC_USART1_RELEASE_RESET(); __HAL_RCC_USART1_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9 | GPIO_PIN_10); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART1_IRQn); } break; case (uint32_t)USART2 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART2_FORCE_RESET(); __HAL_RCC_USART2_RELEASE_RESET(); __HAL_RCC_USART2_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5 | GPIO_PIN_6); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART2_IRQn); } break; case (uint32_t)USART3 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART3_FORCE_RESET(); __HAL_RCC_USART3_RELEASE_RESET(); __HAL_RCC_USART3_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOD, GPIO_PIN_9 | GPIO_PIN_10); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART3_8_IRQn); } break; case (uint32_t)USART4 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART4_FORCE_RESET(); __HAL_RCC_USART4_RELEASE_RESET(); __HAL_RCC_USART4_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10 | GPIO_PIN_11); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART3_8_IRQn); } break; case (uint32_t)USART5 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART5_FORCE_RESET(); __HAL_RCC_USART5_RELEASE_RESET(); __HAL_RCC_USART5_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3 | GPIO_PIN_4); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART3_8_IRQn); } break; case (uint32_t)USART6 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART6_FORCE_RESET(); __HAL_RCC_USART6_RELEASE_RESET(); __HAL_RCC_USART6_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOF, GPIO_PIN_9 | GPIO_PIN_10); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART3_8_IRQn); } break; case (uint32_t)USART7 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART7_FORCE_RESET(); __HAL_RCC_USART7_RELEASE_RESET(); __HAL_RCC_USART7_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOF, GPIO_PIN_2 | GPIO_PIN_3); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART3_8_IRQn); } break; case (uint32_t)USART8 : { /*##-1- Reset peripherals ##################################################*/ __HAL_RCC_USART8_FORCE_RESET(); __HAL_RCC_USART8_RELEASE_RESET(); __HAL_RCC_USART8_CLK_DISABLE(); /*##-2- Disable peripherals and GPIO Clocks #################################*/ /* Configure UART Tx/Rx as alternate function */ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_8 | GPIO_PIN_9); /*##-3- Disable the NVIC for UART ##########################################*/ IRQ_Managment(__DISABLE, USART3_8_IRQn); } break; } }