/********************************************************************************
 * @file    UART_Communication.c
 * @author  SOC AE Team
 * @version V1.1
 * @date    2025-06-27
 * @brief   UART2把接收到数据重新发送出去，波特率为115200。
 *
 *******************************************************************************/
#include "sc32_conf.h"
#include "Function_Init.h"

static volatile FlagStatus UART_RxFlag = RESET;

void UART_Communication_Function(void)
{
  uint8_t i;
  volatile uint16_t UART_RxData[5];                            //发送5个8位自定义数据（若要修改数据个数需修改相应数组大小和发送/接收for循环大小）
  UART_InitTypeDef UART_InitStruct;                             //定义UART初始化结构体变量
  
  /* 使能UART时钟 */
  RCC_APB1Cmd(ENABLE);                                          //UART0和1外设挂载在APB1时钟上
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2,ENABLE);          //开启UART2时钟
  
  UART_InitStruct.UART_BaudRate = 115200;	                //串口波特率为115200
#if defined(SC32f10xx)|| defined(SC32f12xx)
  UART_InitStruct.UART_ClockFrequency = 32000000;	        //APB时钟频率配置为32MHz

#endif
  UART_InitStruct.UART_Mode = UART_Mode_10B;	                //工作在模式1
  
  /*  根据结构体配置初始化串口 */
  UART_Init(UART2,&UART_InitStruct);		
  
  /* 使能串口接收中断 */
  UART_ITConfig(UART2,UART_IT_EN | UART_IT_RX,ENABLE);
#if defined(SC32f12xx)
  NVIC_EnableIRQ(UART0_2_4_IRQn);
#elif defined(SC32f10xx)
    NVIC_EnableIRQ(UART0_2_IRQn);
#endif
  /* 使能接收发送口 */
  UART_TXCmd(UART2,ENABLE);
  UART_RXCmd(UART2,ENABLE);
  
  while(1)
  {
    /* UART2接收到5个8位数据 */
    for(i=0;i<5;i++)
    {
      while(UART_RxFlag == RESET);
      UART_RxFlag = RESET;
      UART_RxData[i] = UART_ReceiveData(UART2);
    }
    /* UART2将接收到的数据发送出去 */
    for(i=0;i<5;i++)
    {
      UART_SendData(UART2,UART_RxData[i]);
      while(UART_GetFlagStatus(UART2,UART_Flag_TX) == RESET);
      UART_ClearFlag(UART2,UART_Flag_TX);
    }
  }
}

void UART_Communication_UART2Handler(void)
{
  if(UART_GetFlagStatus(UART2,UART_Flag_RX))
  {
    UART_ClearFlag(UART2,UART_Flag_RX);
    UART_RxFlag = SET;
  }
}
