Stm32 HAL 库的使用---Uart:

Main.c
HAL_Init(); 
SystemClock_Config();
MX_Uart3_Init();
MX_Uart1_Init();

Stm32f4xx_hal_msp.c
UART_HandleTypeDef USART1Handle;
void MX_Uart1_Init(void)
{

  USART1Handle.Instance          = USART1;

  USART1Handle.Init.BaudRate     = 115200;
  USART1Handle.Init.WordLength   = UART_WORDLENGTH_8B;
  USART1Handle.Init.StopBits     = UART_STOPBITS_1;
  USART1Handle.Init.Parity       = UART_PARITY_NONE;
  USART1Handle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
  USART1Handle.Init.Mode         = UART_MODE_TX_RX;

  USART1Handle.Init.OverSampling = UART_OVERSAMPLING_16;
    if(HAL_UART_Init(&USART1Handle) != HAL_OK)
  {
    err++;
  }
}

 UART_HandleTypeDef USART3Handle;
int err=0;
// uart3  tx--pb10  rx---pb11
void MX_Uart3_Init(void)
{

  USART3Handle.Instance          = USART3;

  USART3Handle.Init.BaudRate     = 115200;
  USART3Handle.Init.WordLength   = UART_WORDLENGTH_8B;
  USART3Handle.Init.StopBits     = UART_STOPBITS_1;
  USART3Handle.Init.Parity       = UART_PARITY_NONE;
  USART3Handle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
  USART3Handle.Init.Mode         = UART_MODE_TX_RX;

  USART3Handle.Init.OverSampling = UART_OVERSAMPLING_16;
    if(HAL_UART_Init(&USART3Handle) != HAL_OK)
  {
    err++;
  }
}

// uart3  tx--pb10  rx---pb11
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{  
     if(huart->Instance ==USART3)// PB10 PB11
     {

            GPIO_InitTypeDef  GPIO_InitStruct;
            __HAL_RCC_GPIOB_CLK_ENABLE();
            __HAL_RCC_USART3_CLK_ENABLE(); 
            GPIO_InitStruct.Pin       = GPIO_PIN_10;
            GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
            GPIO_InitStruct.Pull      = GPIO_PULLUP;
            GPIO_InitStruct.Speed     = GPIO_SPEED_FAST;
            GPIO_InitStruct.Alternate = GPIO_AF7_USART3;

            HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
            GPIO_InitStruct.Pin = GPIO_PIN_11;
            GPIO_InitStruct.Alternate = GPIO_AF7_USART3; 
            HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
            HAL_NVIC_SetPriority( USART3_IRQn, 2, 1);
            HAL_NVIC_EnableIRQ( USART3_IRQn);
     }
     else if(huart->Instance ==USART1)//   PA9  PA10
     {
            GPIO_InitTypeDef  GPIO_InitStruct;
            __HAL_RCC_GPIOA_CLK_ENABLE();
            __HAL_RCC_USART1_CLK_ENABLE(); 
            GPIO_InitStruct.Pin       = GPIO_PIN_10;
            GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
            GPIO_InitStruct.Pull      = GPIO_PULLUP;
            GPIO_InitStruct.Speed     = GPIO_SPEED_FAST;
            GPIO_InitStruct.Alternate = GPIO_AF7_USART1;

            HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
            GPIO_InitStruct.Pin = GPIO_PIN_9;
            GPIO_InitStruct.Alternate = GPIO_AF7_USART1; 
            HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
            HAL_NVIC_SetPriority( USART1_IRQn, 2, 2);
            HAL_NVIC_EnableIRQ( USART1_IRQn);
     }
}



void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
{
   if(huart->Instance ==USART3) //   PB10 PB11
     {
            __HAL_RCC_USART3_FORCE_RESET();
            __HAL_RCC_USART3_RELEASE_RESET(); 
            HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10);
            HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11);
     }

     else if (huart->Instance ==USART1)//    PA9  PA10
     {
            __HAL_RCC_USART1_FORCE_RESET();
            __HAL_RCC_USART1_RELEASE_RESET(); 
            HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10);
            HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9);
     }
}

Stm32f4xx_it.c

 void USART3_IRQHandler(void)
 {     
      HAL_UART_IRQHandler(&USART3Handle);
 }


  void USART1_IRQHandler(void)
 {         
      ExCount++;
      HAL_UART_IRQHandler(&USART1Handle);
 }

int UartTxCount =0;
 int UartRcvCount =0 ;
 int UartErrCount =0 ;
 int ExCount =0 ;
 extern unsigned char aRxBuffer[100] ;

 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
{
            UartTxCount++;   
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
      UartRcvCount++;  
      HAL_UART_Receive_IT(&USART3Handle, (uint8_t *)aRxBuffer,  1 ); // 重新开启中断,需在初始化函数前开启中断
}


void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle)
{
     UartErrCount++ ;   
}

Uart3_thread.c

void Uart3_tread(void)
{
     HAL_UART_Receive_IT(&USART3Handle, (uint8_t *)aRxBuffer,  1 ); //先开启中断,在中断函数种,需再次开启中断
     while(1)
     {
         HAL_UART_Transmit_IT(&USART3Handle, (uint8_t*)"222222222222", 10);  
         rcvcount++ ;
         osDelay(1000);
     }
}

猜你喜欢

转载自blog.csdn.net/tiger15605353603/article/details/81380301