本帖最后由 apple_3275 于 2017-1-22 22:15 编辑
我稍微理解你意思了,DMA我已经给了个接收用的128个字节的缓存区RxBuffer,一开始你说FIFO,因为我看STM32F103C8 手册,它的DMA是没有FIFO的,包括它的库函数都没有FIFO的配置参数,于是我另外搞了个环形队列14400字节的缓存区,于是就有了昨天的问题。
今天我调试了一天,第一次使能DMA接收通道时,是可以接收到48个字节的完整数据,甚至有61个字节,之后的接收发现DMA只接收了1个字节,可能是串口的空闲中断频率太频繁导致,即便DMA能把串口接收的数据以超快速填充到RxBuffer,DMA只接收了1个字节就被重置;当我做了些DMA重置后的延迟关闭操作,发现它很快就触发了DMA1_IT_TC5中断,说明它是有在接收的------>这里我就没看懂,上位机115200波特率,10ms发送48个字节数据,下位机串口的空闲中断怎么会这么频繁?我一直以为它只要接收到48个字节后才会触发空闲中断,能否说说你的理解。可能你会认为我没有清中断标志位,其实在空闲中断一触发我就已经清掉了该串口的所有中断标志位if (USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
{
USART1->DR;
USART_ClearITPendingBit(USART1, USART_IT_IDLE | USART_IT_PE | USART_IT_FE | USART_IT_NE | USART_IT_RXNE);
......
}
我终于明白你所说的定时器,双缓存的意思,我得重新设计代码。
|