HAL_UARTEx_RxEventCallback() 循环DMA:数据是什么地址?

HAL_UARTEx_RxEventCallback() circular DMA: What address is the data?

我将 HAL 与 STM32F3xx 一起使用,通过 循环 DMA 实现 UART 接收。数据应该不断地接收到 huart->pRxBuffPtr 缓冲区,当新数据到达时覆盖旧数据,并且定期调用 HAL_UARTEx_RxEventCallback() 函数以在数据被覆盖之前复制出数据。 HAL_UARTEx_RxEventCallback() 函数接收一个 size 参数,当然还有一个指针 huart,但没有直接指示新到达的数据在 huart->pRxBuffPtr 中的 DMA 位置。

我如何知道 huart->pRxBuffPtr 新到达的数据开始的位置?

感谢 Tom V 的提示。对于后代,这里是解决方案代码 - returns true 并获取下一个可用字节的函数,否则 returns false:

bool uart_receiveByte(uint8_t *pData) {
  static size_t dmaTail = 0u;

  bool isByteReceived = false;

  // dmaHead is the next position in the buffer the DMA will write to.
  // dmaTail is the next position in the buffer to be read from.
  const size_t dmaHead = huart->RxXferSize - huart->hdmarx->Instance->CNDTR;

  if (dmaTail != dmaHead) {
    isByteReceived = true;
    *pData = pRxDmaBuffer[dmaTail];
    if (++dmaTail >= huart->RxXferSize) {
      dmaTail = 0u;
    }
  }

  return isByteReceived;
}