因为STM32F101RB串口没有FIFO,所以想用DMA方式操作串口。可是存在一个问题,因为串口接收的长度是不可预知的,假设我将DMA数据长度设成16,但是只接收了2个数据。这种情况下,DMA中断是进不去的。我现在的想法是,设一个全局的计数器g_byDMAUartCnt,每次发生DMA中断时,将byDMAUartCnt置成100,系统ticks是1ms,在1ms中断中,加入 if(byDMAUartCnt != 0) byDMAUartCnt--;主流程中查byDMAUartCnt,如果该值等于0,说明100ms超时到了,将DMA串口缓冲区中的实收数据处理掉,重新初始化DMA,然后置byDMAUartCnt = 100; 请问有其它好的处理方法吗? |