void USART2_Receive_Message(void)
{
u16 remain;
u16 avail = RX_SIZE - RxLen_Buf2;
u16 count = RR_SIZE - DMA_GetCurrDataCounter(DMA1_Channel6);
if (count == RxPtr_Ring2 || avail == 0)
{
return;
}
if (count > RxPtr_Ring2)
{
remain = count - RxPtr_Ring2;
if (avail >= remain)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], remain);
RxPtr_Ring2 = count;
RxLen_Buf2 = RxLen_Buf2 + remain;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf
{
u16 remain;
u16 avail = RX_SIZE - RxLen_Buf2;
u16 count = RR_SIZE - DMA_GetCurrDataCounter(DMA1_Channel6);
if (count == RxPtr_Ring2 || avail == 0)
{
return;
}
if (count > RxPtr_Ring2)
{
remain = count - RxPtr_Ring2;
if (avail >= remain)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], remain);
RxPtr_Ring2 = count;
RxLen_Buf2 = RxLen_Buf2 + remain;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf

该博客介绍了一种通过DMA(直接存储器访问)而非中断方式来接收USART数据的方法。在`USART2_Receive_Message`函数中,详细阐述了如何根据当前接收缓冲区的可用空间和DMA通道的数据计数来有效地复制接收到的数据到接收缓冲区,从而实现高效的数据处理。
&spm=1001.2101.3001.5002&articleId=7201089&d=1&t=3&u=93cd7f51651b4f55bc559ee637eec709)
5985

被折叠的 条评论
为什么被折叠?



