usart3,接收和发送都用DMA,都是非循环模式,接收完成有中断,波特率115200,用的是带自动切换方向的max13487芯片(RS485)。
问题是这样的:1.接收完后了,中断里设个标志,主程序里判断这个标志,将接收到的数据立马用DMA再发送出去,但是电脑串口接收到的数据不是其发发出的数据。如果stm32接收完毕后,延时一点点时间再发送出去,则电脑接收到的数据是正确的。不知道是max13487切换来不及导致的数据错误,还是stm32接收完成后,要等一段时间才能转发?
2.DMA的发送在非循环模式下,只能发送一次(已经执行了关闭DMA-设置发送数据量-开启DMA的动作),必须重新初始化设置DMA通道后,才能再次发送。是不是必须这样?stm32F1就不需要重新初始化通道,只需要执行关闭DMA-设置发送数据量-开启DMA的动作就可以再次发送。是什么原因呢? |