Skip to main content
ughr1
Associate II
August 11, 2021
Question

GPIO UART disable and enable

  • August 11, 2021
  • 2 replies
  • 891 views

Hi I use UART very rarely and I would like to disable gpio:

void Disable_Not_Used_Pins(void) {
	/* Disable UART pins*/
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
	GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

How to enable this pins and uart again?

void enableUART() {
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	MX_USART2_UART_Init(); //init uart 2 
	__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
}

After using the function above uart does not work

    This topic has been closed for replies.

    2 replies

    waclawek.jan
    Super User
    August 11, 2021

    Read out and check UART and relevant GPIO registers content, compare between working and nonworking state.

    JW

    ughr1
    ughr1Author
    Associate II
    August 11, 2021

    Here is answer

    just use HAL_UART_MspInit

    void HAL_UART_MspInit(UART_HandleTypeDef* huart)
    {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     if(huart->Instance==USART2)
     {
     /* USER CODE BEGIN USART2_MspInit 0 */
     
     /* USER CODE END USART2_MspInit 0 */
     /* Peripheral clock enable */
     __HAL_RCC_USART2_CLK_ENABLE();
     
     __HAL_RCC_GPIOA_CLK_ENABLE();
     /**USART2 GPIO Configuration
     PA2 ------> USART2_TX
     PA3 ------> USART2_RX
     */
     GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
     
     /* USART2 interrupt Init */
     HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
     HAL_NVIC_EnableIRQ(USART2_IRQn);
     /* USER CODE BEGIN USART2_MspInit 1 */
     
     /* USER CODE END USART2_MspInit 1 */
     }
     
    }