3. 功能函数编写
此处使用环形FIFO缓存区对串口数据进行处理,因此编写环形FIFO缓冲区的功能函数
uint8_t InterRxBufferWrite(void) //串口接收缓冲区写函数
{
if (InterFifo.RxBufferWptr == (InterFifo.RxBufferRptr - 1)) //串口缓冲区满了
{
return 0;
}
HAL_UART_Receive_IT(&huart2, &InterFifo.RxBuffer[InterFifo.RxBufferWptr++], 1);
InterFifo.RxBufferWptr %= INTER_BUFFER_NUM;//写入一个字节数据到缓冲区中
return 1;
}
uint8_t InterRxBufferRead(uint8_t* data) //串口接收缓冲区读函数
{
if (InterFifo.RxBufferRptr == InterFifo.RxBufferWptr) //串口缓冲区为空
{
return 0;
}
*data = InterFifo.RxBuffer[InterFifo.RxBufferRptr++]; //从缓冲区读取一个字节数据并返回
InterFifo.RxBufferRptr %= INTER_BUFFER_NUM;
return 1;
}
uint8_t InterTxBufferWrite(uint8_t data) //串口发送缓冲区写函数
{
if(InterFifo.TxBufferWptr == (InterFifo.TxBufferRptr - 1)) //串口缓冲区满了
{
return 0;
}
InterFifo.TxBuffer[InterFifo.TxBufferWptr++] = data;
InterFifo.TxBufferWptr %= INTER_BUFFER_NUM; //写入一个字节数据到缓冲区中
return 1;
}
uint8_t InterTxBufferRead(uint8_t* data) //串口发送缓冲区读函数
{
if(InterFifo.TxBufferRptr == InterFifo.TxBufferWptr) //串口缓冲区为空
{
return 0;
}
*data = InterFifo.TxBuffer[InterFifo.TxBufferRptr++]; //从缓冲区读取一个字节数据并返回
InterFifo.TxBufferRptr %= INTER_BUFFER_NUM;
return 1;
}
|