我发现在串口发送一个数据后,立即启动发送的DMA就会导致之前发送的数据发不出来
uint8 sendHeadAndDatas(const byte* pkg, uint8 len) { goSend(); txDmaInterruptOn();//现在是9Byte模式,第一个字节是地址,后面8个字节是数据。 USART2->DATAR = 0x100 | pkg[0];//发送地址 delayMs(0.1);//必须等待地址发送一段时间,才能发送数据,否则地址发送不出来 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; }
这样发送才行
如果不等待一小段时间,直接发送:地址就丢了
热门产品 :
CH394: 以太网协议栈芯片