可参考8H实验箱例程包里面例子:57-DMA-UART串口与存储器数据自动收发 / 串口1234使用DMA中断模式与电脑收发测试-串口1超时处理
早期芯片DMA没有硬件超时中断,这里的例子使用软件超时中断来实现接收一串数据后进行处理,然后重新开始接收下一串数据:
- //关闭接收DMA,下次接收的数据重新存放在起始地址位置,否则下次接收数据继续往后面存放。
- DMA_UR1R_CR = 0x00; //bit7 1:使能 UART1_DMA, bit5 1:开始 UART1_DMA 自动接收, bit0 1:清除 FIFO
-
- printf("\r\nUART1 Timeout!\r\n"); //UART1发送一个字符串
- UART1_DMA_Transmit(DmaBuffer1,RX1_Cnt); //设置DMA发送缓冲区,数据长度,并启动发送
- RX1_Cnt = 0;
- DmaTx1Flag = 0;
- DmaRx1Flag = 0;
- UART1_DMA_Receive(DmaBuffer1,DMA_RX_LEN+1); //设置DMA接收缓冲区,数据长度,并启动接收
复制代码
|