为什么串口的rdr寄存器收到了数据,dma缓冲区却没有数据,但是dma的__HAL_DMA_GET_COUNTER()函数又能准确获得收到多少个字节
以下是调试现象:
下面是用dma接收的代码,threadx的线程接收到信号量就会执行下面的函数
[C] 纯文本查看 复制代码 void serial_idle_recv_handler(struct serial_t *sObj)
{
HAL_UART_DMAStop(sObj->huart);
sObj->rx_num = sObj->buffer_size - __HAL_DMA_GET_COUNTER(sObj->huart->hdmarx);
sObj->serial_idle_callback(sObj->rx_buffer, sObj->rx_num);
memset(sObj->rx_buffer, 0, sObj->buffer_size);
HAL_UART_Receive_DMA(sObj->huart, sObj->rx_buffer, sObj->buffer_size);
}
void serial_idle_sem_set(struct serial_t *sObj)
{
tx_semaphore_put(&sObj->sem);
}
|