版主好。
现在我在测试RS485的ModbusRTU通信时,CH32V203C8T6的串口DMA通信中,用DMA_GetFlagStatus(DMA1_FLAG_TC1)获取串口DMA发送完成状态来切换RS485芯片读写时,发现DMA_GetFlagStatus(DMA1_FLAG_TC1) != RESET的时间并不是DMA发送完成时产生的,而是提前两个字节就产生这个完成TC标志了,这样就会引起RS485芯片被DMA1_FLAG_TC1关闭了后面两个字节没完成发送出去导致通信不正常。以前都是用自动切换读写的RS485都没有发现这个bug....
请问,实际上DMA1_FLAG_TC1这个标志的产生时间到底是不是串口DMA全部发送完成才标志的?如果不是有没有确切的TC触发规则?实在不行只能查询串口空闲状态了。
逻辑分析仪截图如下,通道0是串口发出的数据,通道7是RS485读写(0是读,1是写)。