void serial_free(serial_t *obj) { // Reset UART and disable clock if (obj->uart == UART_1) { __USART1_FORCE_RESET(); __USART1_RELEASE_RESET(); __USART1_CLK_DISABLE(); } if (obj->uart == UART_2) { __USART2_FORCE_RESET(); __USART2_RELEASE_RESET(); __USART2_CLK_DISABLE(); } if (obj->uart == UART_3) { __USART3_FORCE_RESET(); __USART3_RELEASE_RESET(); __USART3_CLK_DISABLE(); } if (obj->uart == UART_4) { __USART4_FORCE_RESET(); __USART4_RELEASE_RESET(); __USART4_CLK_DISABLE(); } if (obj->uart == UART_5) { __USART5_FORCE_RESET(); __USART5_RELEASE_RESET(); __USART5_CLK_DISABLE(); } if (obj->uart == UART_6) { __USART6_FORCE_RESET(); __USART6_RELEASE_RESET(); __USART6_CLK_DISABLE(); } if (obj->uart == UART_7) { __USART7_FORCE_RESET(); __USART7_RELEASE_RESET(); __USART7_CLK_DISABLE(); } if (obj->uart == UART_8) { __USART8_FORCE_RESET(); __USART8_RELEASE_RESET(); __USART8_CLK_DISABLE(); } // Configure GPIOs pin_function(obj->pin_tx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); pin_function(obj->pin_rx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); serial_irq_ids[obj->index] = 0; }
/** * @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 ##################################################*/ __USART1_FORCE_RESET(); __USART1_RELEASE_RESET(); __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 ##################################################*/ __USART2_FORCE_RESET(); __USART2_RELEASE_RESET(); __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 ##################################################*/ __USART3_FORCE_RESET(); __USART3_RELEASE_RESET(); __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 ##################################################*/ __USART4_FORCE_RESET(); __USART4_RELEASE_RESET(); __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 ##################################################*/ __USART5_FORCE_RESET(); __USART5_RELEASE_RESET(); __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 ##################################################*/ __USART6_FORCE_RESET(); __USART6_RELEASE_RESET(); __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 ##################################################*/ __USART7_FORCE_RESET(); __USART7_RELEASE_RESET(); __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 ##################################################*/ __USART8_FORCE_RESET(); __USART8_RELEASE_RESET(); __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; } }