版主好。
現(xiàn)在我在測(cè)試RS485的ModbusRTU通信時(shí),CH32V203C8T6的串口DMA通信中,用DMA_GetFlagStatus(DMA1_FLAG_TC1)獲取串口DMA發(fā)送完成狀態(tài)來(lái)切換RS485芯片讀寫(xiě)時(shí),發(fā)現(xiàn)DMA_GetFlagStatus(DMA1_FLAG_TC1)?!= RESET的時(shí)間并不是DMA發(fā)送完成時(shí)產(chǎn)生的,而是提前兩個(gè)字節(jié)就產(chǎn)生這個(gè)完成TC標(biāo)志了,這樣就會(huì)引起RS485芯片被DMA1_FLAG_TC1關(guān)閉了后面兩個(gè)字節(jié)沒(méi)完成發(fā)送出去導(dǎo)致通信不正常。以前都是用自動(dòng)切換讀寫(xiě)的RS485都沒(méi)有發(fā)現(xiàn)這個(gè)bug....
請(qǐng)問(wèn),實(shí)際上DMA1_FLAG_TC1這個(gè)標(biāo)志的產(chǎn)生時(shí)間到底是不是串口DMA全部發(fā)送完成才標(biāo)志的?如果不是有沒(méi)有確切的TC觸發(fā)規(guī)則?實(shí)在不行只能查詢串口空閑狀態(tài)了。
邏輯分析儀截圖如下,通道0是串口發(fā)出的數(shù)據(jù),通道7是RS485讀寫(xiě)(0是讀,1是寫(xiě))。