1 /** 2 ****************************************************************************** 3 * File Name : USART.c 4 * Description : This file provides code for the configuration 5 * of the USART instances. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© Copyright (c) 2019 STMicroelectronics. 10 * All rights reserved.</center></h2> 11 * 12 * This software component is licensed by ST under BSD 3-Clause license, 13 * the "License"; You may not use this file except in compliance with the 14 * License. You may obtain a copy of the License at: 15 * opensource.org/licenses/BSD-3-Clause 16 * 17 ****************************************************************************** 18 */ 19 20 /* Includes ------------------------------------------------------------------*/ 21 #include "usart.h" 22 23 /* USER CODE BEGIN 0 */ 24 25 /* USER CODE END 0 */ 26 27 UART_HandleTypeDef huart2; 28 UART_HandleTypeDef huart3; 29 DMA_HandleTypeDef hdma_usart3_rx; 30 DMA_HandleTypeDef hdma_usart3_tx; 31 32 /* USART2 init function */ 33 34 void MX_USART2_UART_Init(void) 35 { 36 37 huart2.Instance = USART2; 38 huart2.Init.BaudRate = 115200; 39 huart2.Init.WordLength = UART_WORDLENGTH_8B; 40 huart2.Init.StopBits = UART_STOPBITS_1; 41 huart2.Init.Parity = UART_PARITY_NONE; 42 huart2.Init.Mode = UART_MODE_TX_RX; 43 huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; 44 huart2.Init.OverSampling = UART_OVERSAMPLING_16; 45 if (HAL_UART_Init(&huart2) != HAL_OK) 46 { 47 Error_Handler(); 48 } 49 50 } 51 /* USART3 init function */ 52 53 void MX_USART3_UART_Init(void) 54 { 55 56 huart3.Instance = USART3; 57 huart3.Init.BaudRate = 115200; 58 huart3.Init.WordLength = UART_WORDLENGTH_8B; 59 huart3.Init.StopBits = UART_STOPBITS_1; 60 huart3.Init.Parity = UART_PARITY_NONE; 61 huart3.Init.Mode = UART_MODE_TX_RX; 62 huart3.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS; 63 huart3.Init.OverSampling = UART_OVERSAMPLING_8; 64 if (HAL_UART_Init(&huart3) != HAL_OK) 65 { 66 Error_Handler(); 67 } 68 69 } 70 71 void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) 72 { 73 74 GPIO_InitTypeDef GPIO_InitStruct = {0}; 75 if(uartHandle->Instance==USART2) 76 { 77 /* USER CODE BEGIN USART2_MspInit 0 */ 78 79 /* USER CODE END USART2_MspInit 0 */ 80 /* USART2 clock enable */ 81 __HAL_RCC_USART2_CLK_ENABLE(); 82 83 __HAL_RCC_GPIOA_CLK_ENABLE(); 84 /**USART2 GPIO Configuration 85 PA2 ------> USART2_TX 86 PA3 ------> USART2_RX 87 */ 88 GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; 89 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 90 GPIO_InitStruct.Pull = GPIO_PULLUP; 91 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 92 GPIO_InitStruct.Alternate = GPIO_AF7_USART2; 93 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 94 95 /* USART2 interrupt Init */ 96 HAL_NVIC_SetPriority(USART2_IRQn, 15, 0); 97 HAL_NVIC_EnableIRQ(USART2_IRQn); 98 /* USER CODE BEGIN USART2_MspInit 1 */ 99 100 /* USER CODE END USART2_MspInit 1 */ 101 } 102 else if(uartHandle->Instance==USART3) 103 { 104 /* USER CODE BEGIN USART3_MspInit 0 */ 105 106 /* USER CODE END USART3_MspInit 0 */ 107 /* USART3 clock enable */ 108 __HAL_RCC_USART3_CLK_ENABLE(); 109 110 __HAL_RCC_GPIOD_CLK_ENABLE(); 111 /**USART3 GPIO Configuration 112 PD8 ------> USART3_TX 113 PD9 ------> USART3_RX 114 PD11 ------> USART3_CTS 115 PD12 ------> USART3_RTS 116 */ 117 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; 118 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 119 GPIO_InitStruct.Pull = GPIO_PULLUP; 120 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 121 GPIO_InitStruct.Alternate = GPIO_AF7_USART3; 122 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 123 124 GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; 125 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 126 GPIO_InitStruct.Pull = GPIO_NOPULL; 127 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 128 GPIO_InitStruct.Alternate = GPIO_AF7_USART3; 129 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 130 131 /* USART3 DMA Init */ 132 /* USART3_RX Init */ 133 hdma_usart3_rx.Instance = DMA1_Stream1; 134 hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4; 135 hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; 136 hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE; 137 hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE; 138 hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; 139 hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; 140 hdma_usart3_rx.Init.Mode = DMA_NORMAL; 141 hdma_usart3_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; 142 hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; 143 if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK) 144 { 145 Error_Handler(); 146 } 147 148 __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx); 149 150 /* USART3_TX Init */ 151 hdma_usart3_tx.Instance = DMA1_Stream4; 152 hdma_usart3_tx.Init.Channel = DMA_CHANNEL_7; 153 hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; 154 hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE; 155 hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE; 156 hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; 157 hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; 158 hdma_usart3_tx.Init.Mode = DMA_NORMAL; 159 hdma_usart3_tx.Init.Priority = DMA_PRIORITY_MEDIUM; 160 hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; 161 if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK) 162 { 163 Error_Handler(); 164 } 165 166 __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx); 167 168 /* USART3 interrupt Init */ 169 HAL_NVIC_SetPriority(USART3_IRQn, 1, 0); 170 HAL_NVIC_EnableIRQ(USART3_IRQn); 171 /* USER CODE BEGIN USART3_MspInit 1 */ 172 173 /* USER CODE END USART3_MspInit 1 */ 174 } 175 } 176 177 void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) 178 { 179 180 if(uartHandle->Instance==USART2) 181 { 182 /* USER CODE BEGIN USART2_MspDeInit 0 */ 183 184 /* USER CODE END USART2_MspDeInit 0 */ 185 /* Peripheral clock disable */ 186 __HAL_RCC_USART2_CLK_DISABLE(); 187 188 /**USART2 GPIO Configuration 189 PA2 ------> USART2_TX 190 PA3 ------> USART2_RX 191 */ 192 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); 193 194 /* USART2 interrupt Deinit */ 195 HAL_NVIC_DisableIRQ(USART2_IRQn); 196 /* USER CODE BEGIN USART2_MspDeInit 1 */ 197 198 /* USER CODE END USART2_MspDeInit 1 */ 199 } 200 else if(uartHandle->Instance==USART3) 201 { 202 /* USER CODE BEGIN USART3_MspDeInit 0 */ 203 204 /* USER CODE END USART3_MspDeInit 0 */ 205 /* Peripheral clock disable */ 206 __HAL_RCC_USART3_CLK_DISABLE(); 207 208 /**USART3 GPIO Configuration 209 PD8 ------> USART3_TX 210 PD9 ------> USART3_RX 211 PD11 ------> USART3_CTS 212 PD12 ------> USART3_RTS 213 */ 214 HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12); 215 216 /* USART3 DMA DeInit */ 217 HAL_DMA_DeInit(uartHandle->hdmarx); 218 HAL_DMA_DeInit(uartHandle->hdmatx); 219 220 /* USART3 interrupt Deinit */ 221 HAL_NVIC_DisableIRQ(USART3_IRQn); 222 /* USER CODE BEGIN USART3_MspDeInit 1 */ 223 224 /* USER CODE END USART3_MspDeInit 1 */ 225 } 226 } 227 228 /* USER CODE BEGIN 1 */ 229 230 /* USER CODE END 1 */ 231 232 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 233