- void HAL_UART_MspInit(UART_HandleTypeDef* huart)
- {
- // 关于 GPIO 引脚初始化的流程与上面介绍的“四步”相同
- GPIO_InitTypeDef GPIO_InitStruct;
- if(huart->Instance==USART2) // USART 2
- {
- /* USER CODE BEGIN USART2_MspInit 0 */
- /* USER CODE END USART2_MspInit 0 */
- /* Peripheral clock enable */
- __HAL_RCC_USART2_CLK_ENABLE(); // 使能串口时钟
-
- /**USART2 GPIO Configuration
- PA2 ------> USART2_TX
- PA3 ------> USART2_RX
- */
- GPIO_InitStruct.Pin = USART2_TX_Pin|USART2_RX_Pin; // 收发引脚
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF1_USART2; // 复用功能配置
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 结构体初始化
- /* USART2 DMA Init */ // DMA 方式收发初始化
- /* USART2_RX Init */
- hdma_usart2_rx.Instance = DMA1_Channel3;
- 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_LOW;
- if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- __HAL_DMA1_REMAP(HAL_DMA1_CH3_USART2_RX);
- __HAL_LINKDMA(huart,hdmarx,hdma_usart2_rx);
- /* USART2_TX Init */
- hdma_usart2_tx.Instance = DMA1_Channel4;
- 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_LOW;
- if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- __HAL_DMA1_REMAP(HAL_DMA1_CH4_USART2_TX);
- __HAL_LINKDMA(huart,hdmatx,hdma_usart2_tx);
- /* 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 */
- }
- }
|