You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
282 lines
8.0 KiB
282 lines
8.0 KiB
/** |
|
****************************************************************************** |
|
* @file usart.c |
|
* @brief This file provides code for the configuration |
|
* of the USART instances. |
|
****************************************************************************** |
|
* @attention |
|
* |
|
* <h2><center>© Copyright (c) 2021 STMicroelectronics. |
|
* All rights reserved.</center></h2> |
|
* |
|
* This software component is licensed by ST under Ultimate Liberty license |
|
* SLA0044, the "License"; You may not use this file except in compliance with |
|
* the License. You may obtain a copy of the License at: |
|
* www.st.com/SLA0044 |
|
* |
|
****************************************************************************** |
|
*/ |
|
|
|
/* Includes ------------------------------------------------------------------*/ |
|
#include "usart.h" |
|
|
|
/* USER CODE BEGIN 0 */ |
|
|
|
/* USER CODE END 0 */ |
|
|
|
UART_HandleTypeDef huart1; |
|
UART_HandleTypeDef huart2; |
|
DMA_HandleTypeDef hdma_usart1_rx; |
|
DMA_HandleTypeDef hdma_usart1_tx; |
|
DMA_HandleTypeDef hdma_usart2_tx; |
|
DMA_HandleTypeDef hdma_usart2_rx; |
|
|
|
/* USART1 init function */ |
|
|
|
void MX_USART1_UART_Init(void) |
|
{ |
|
|
|
/* USER CODE BEGIN USART1_Init 0 */ |
|
|
|
/* USER CODE END USART1_Init 0 */ |
|
|
|
/* USER CODE BEGIN USART1_Init 1 */ |
|
|
|
/* USER CODE END USART1_Init 1 */ |
|
huart1.Instance = USART1; |
|
huart1.Init.BaudRate = 115200; |
|
huart1.Init.WordLength = UART_WORDLENGTH_8B; |
|
huart1.Init.StopBits = UART_STOPBITS_1; |
|
huart1.Init.Parity = UART_PARITY_NONE; |
|
huart1.Init.Mode = UART_MODE_TX_RX; |
|
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
|
huart1.Init.OverSampling = UART_OVERSAMPLING_16; |
|
if (HAL_UART_Init(&huart1) != HAL_OK) |
|
{ |
|
Error_Handler(); |
|
} |
|
/* USER CODE BEGIN USART1_Init 2 */ |
|
|
|
/* USER CODE END USART1_Init 2 */ |
|
|
|
} |
|
/* USART2 init function */ |
|
|
|
void MX_USART2_UART_Init(void) |
|
{ |
|
|
|
/* USER CODE BEGIN USART2_Init 0 */ |
|
|
|
/* USER CODE END USART2_Init 0 */ |
|
|
|
/* USER CODE BEGIN USART2_Init 1 */ |
|
|
|
/* USER CODE END USART2_Init 1 */ |
|
huart2.Instance = USART2; |
|
huart2.Init.BaudRate = 115200; |
|
huart2.Init.WordLength = UART_WORDLENGTH_8B; |
|
huart2.Init.StopBits = UART_STOPBITS_1; |
|
huart2.Init.Parity = UART_PARITY_NONE; |
|
huart2.Init.Mode = UART_MODE_TX_RX; |
|
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
|
huart2.Init.OverSampling = UART_OVERSAMPLING_16; |
|
if (HAL_UART_Init(&huart2) != HAL_OK) |
|
{ |
|
Error_Handler(); |
|
} |
|
/* USER CODE BEGIN USART2_Init 2 */ |
|
|
|
/* USER CODE END USART2_Init 2 */ |
|
|
|
} |
|
|
|
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) |
|
{ |
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
if(uartHandle->Instance==USART1) |
|
{ |
|
/* USER CODE BEGIN USART1_MspInit 0 */ |
|
|
|
/* USER CODE END USART1_MspInit 0 */ |
|
/* USART1 clock enable */ |
|
__HAL_RCC_USART1_CLK_ENABLE(); |
|
|
|
__HAL_RCC_GPIOA_CLK_ENABLE(); |
|
/**USART1 GPIO Configuration |
|
PA9 ------> USART1_TX |
|
PA10 ------> USART1_RX |
|
*/ |
|
GPIO_InitStruct.Pin = GPIO_PIN_9; |
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; |
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_10; |
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|
|
|
/* USART1 DMA Init */ |
|
/* USART1_RX Init */ |
|
hdma_usart1_rx.Instance = DMA1_Channel5; |
|
hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; |
|
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; |
|
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; |
|
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|
hdma_usart1_rx.Init.Mode = DMA_NORMAL; |
|
hdma_usart1_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; |
|
if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) |
|
{ |
|
Error_Handler(); |
|
} |
|
|
|
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx); |
|
|
|
/* USART1_TX Init */ |
|
hdma_usart1_tx.Instance = DMA1_Channel4; |
|
hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
|
hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
|
hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; |
|
hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|
hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|
hdma_usart1_tx.Init.Mode = DMA_NORMAL; |
|
hdma_usart1_tx.Init.Priority = DMA_PRIORITY_MEDIUM; |
|
if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) |
|
{ |
|
Error_Handler(); |
|
} |
|
|
|
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx); |
|
|
|
/* USART1 interrupt Init */ |
|
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); |
|
HAL_NVIC_EnableIRQ(USART1_IRQn); |
|
/* USER CODE BEGIN USART1_MspInit 1 */ |
|
|
|
/* USER CODE END USART1_MspInit 1 */ |
|
} |
|
else if(uartHandle->Instance==USART2) |
|
{ |
|
/* USER CODE BEGIN USART2_MspInit 0 */ |
|
|
|
/* USER CODE END USART2_MspInit 0 */ |
|
/* USART2 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_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; |
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_3; |
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|
|
|
/* USART2 DMA Init */ |
|
/* USART2_TX Init */ |
|
hdma_usart2_tx.Instance = DMA1_Channel7; |
|
hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
|
hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
|
hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; |
|
hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|
hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|
hdma_usart2_tx.Init.Mode = DMA_NORMAL; |
|
hdma_usart2_tx.Init.Priority = DMA_PRIORITY_MEDIUM; |
|
if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK) |
|
{ |
|
Error_Handler(); |
|
} |
|
|
|
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); |
|
|
|
/* USART2_RX Init */ |
|
hdma_usart2_rx.Instance = DMA1_Channel6; |
|
hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; |
|
hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; |
|
hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; |
|
hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|
hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|
hdma_usart2_rx.Init.Mode = DMA_NORMAL; |
|
hdma_usart2_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; |
|
if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) |
|
{ |
|
Error_Handler(); |
|
} |
|
|
|
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); |
|
|
|
/* USART2 interrupt Init */ |
|
HAL_NVIC_SetPriority(USART2_IRQn, 6, 0); |
|
HAL_NVIC_EnableIRQ(USART2_IRQn); |
|
/* USER CODE BEGIN USART2_MspInit 1 */ |
|
|
|
/* USER CODE END USART2_MspInit 1 */ |
|
} |
|
} |
|
|
|
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) |
|
{ |
|
|
|
if(uartHandle->Instance==USART1) |
|
{ |
|
/* USER CODE BEGIN USART1_MspDeInit 0 */ |
|
|
|
/* USER CODE END USART1_MspDeInit 0 */ |
|
/* Peripheral clock disable */ |
|
__HAL_RCC_USART1_CLK_DISABLE(); |
|
|
|
/**USART1 GPIO Configuration |
|
PA9 ------> USART1_TX |
|
PA10 ------> USART1_RX |
|
*/ |
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); |
|
|
|
/* USART1 DMA DeInit */ |
|
HAL_DMA_DeInit(uartHandle->hdmarx); |
|
HAL_DMA_DeInit(uartHandle->hdmatx); |
|
|
|
/* USART1 interrupt Deinit */ |
|
HAL_NVIC_DisableIRQ(USART1_IRQn); |
|
/* USER CODE BEGIN USART1_MspDeInit 1 */ |
|
|
|
/* USER CODE END USART1_MspDeInit 1 */ |
|
} |
|
else if(uartHandle->Instance==USART2) |
|
{ |
|
/* USER CODE BEGIN USART2_MspDeInit 0 */ |
|
|
|
/* USER CODE END USART2_MspDeInit 0 */ |
|
/* Peripheral clock disable */ |
|
__HAL_RCC_USART2_CLK_DISABLE(); |
|
|
|
/**USART2 GPIO Configuration |
|
PA2 ------> USART2_TX |
|
PA3 ------> USART2_RX |
|
*/ |
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); |
|
|
|
/* USART2 DMA DeInit */ |
|
HAL_DMA_DeInit(uartHandle->hdmatx); |
|
HAL_DMA_DeInit(uartHandle->hdmarx); |
|
|
|
/* USART2 interrupt Deinit */ |
|
HAL_NVIC_DisableIRQ(USART2_IRQn); |
|
/* USER CODE BEGIN USART2_MspDeInit 1 */ |
|
|
|
/* USER CODE END USART2_MspDeInit 1 */ |
|
} |
|
} |
|
|
|
/* USER CODE BEGIN 1 */ |
|
|
|
/* USER CODE END 1 */ |
|
|
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
|