文章
博客 网店

 STM32F1 LL库示例 - USART1



//USART1初始化
void Uart1Init(uint32_t ulWantedBaud)
{
  LL_USART_InitTypeDef USART_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  
  /* Peripheral clock enable */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);

  /**USART1 GPIO Configuration
  PB6   ------> USART1_TX
  PB7   ------> USART1_RX
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  
  LL_GPIO_AF_EnableRemap_USART1();
  
  //RS485方向控制端口
  LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_5);
  GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  USART_InitStruct.BaudRate = ulWantedBaud;
  USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
  USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
  USART_InitStruct.Parity = LL_USART_PARITY_NONE;
  USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
  USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
  USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
  LL_USART_Init(USART1, &USART_InitStruct);
  LL_USART_ConfigAsyncMode(USART1);
  
  NVIC_SetPriority(USART1_IRQn,NVIC_EncodePriority(NVIC_GetPriorityGrouping(),PRIORITY_DEF,PRIORITY_SUB));
  NVIC_EnableIRQ(USART1_IRQn);
  
  LL_USART_EnableIT_RXNE(USART1);//接收中断使能
  
  LL_USART_Enable(USART1);
}


//UART1中断函数
void USART1_IRQHandler( void )
{
  uint8_t cChar;

  if(LL_USART_IsActiveFlag_TXE(USART1) != RESET )//数据空中断
  {
    if(有数据发送)
      ;//LL_USART_TransmitData8(USART1,[dat]);
    else
    {
      LL_USART_DisableIT_TXE(USART1);
      LL_USART_EnableIT_TC(USART1);
    }      
  }

  if(LL_USART_IsActiveFlag_TC(USART1) != RESET )  //发送完成中断
  {
    //g_Uart1SendFlag=1;
    LL_USART_DisableIT_TC(USART1);
    //UART1_RX_SEL;
  }  
  
  if(LL_USART_IsActiveFlag_RXNE(USART1) != RESET )//接收一字节中断
  {
    cChar = LL_USART_ReceiveData8(USART1);
    //...
  }  
}


芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved