CH32V203 串口發(fā)送DMA異常

我發(fā)現(xiàn)在串口發(fā)送一個數(shù)據(jù)后,立即啟動發(fā)送的DMA就會導致之前發(fā)送的數(shù)據(jù)發(fā)不出來

????uint8?sendHeadAndDatas(const?byte*?pkg,?uint8?len)?{
????????goSend();
????????txDmaInterruptOn();//現(xiàn)在是9Byte模式,第一個字節(jié)是地址,后面8個字節(jié)是數(shù)據(jù)。
????????USART2->DATAR?=?0x100?|?pkg[0];//發(fā)送地址
????????delayMs(0.1);//必須等待地址發(fā)送一段時間,才能發(fā)送數(shù)據(jù),否則地址發(fā)送不出來
????????aClr(DMA1C[TX_DMA_CH]->CFGR,?bit(EN));
????????DMA1C[TX_DMA_CH]->CNTR?=?len-1;
????????DMA1C[TX_DMA_CH]->MADDR?=?(uint32)(pkg+1);
????????aSet(DMA1C[TX_DMA_CH]->CFGR,?bit(EN));//啟動DMA
????????return?0;
????}

這樣發(fā)送才行

image.png

如果不等待一小段時間,直接發(fā)送:地址就丟了

image.png

您好,可在發(fā)送地址結(jié)束后加下列語句試一下呢。若不行可將工程發(fā)我郵箱(lzs@wch.cn)具體看一下。

while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);



程序邏輯上有問題吧,為啥不把地址也直接丟到DMA數(shù)組的第一個存儲單元里面直接操作DMA發(fā)送?非得單獨發(fā)送?要知道DMA有優(yōu)先接管權的。


謝謝@TECH62,已經(jīng)解決了。就是等待這個TXE為1。


邏輯上是沒有問題的。

這個是9bit通信,第一個數(shù)據(jù)是地址,第九位=1;后面是數(shù)據(jù),第九位=0。


發(fā)送的數(shù)據(jù)是存在byte數(shù)組里的,第一個數(shù)據(jù)要特殊處理:

????????USART2->DATAR?=?0x100?|?pkg[0];//發(fā)送地址

后面的數(shù)據(jù)則是直接發(fā)送。




只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频