本帖最后由 tyw 于 2021-3-8 14:02 编辑
void u3_printf(char* fmt,...)
{
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART3_TX_BUF,fmt,ap);
va_end(ap);
dma_channel_disable(DMA0,DMA_CH1);
dma_memory_address_config(DMA0,DMA_CH1,(uint32_t)USART3_TX_BUF);
dma_transfer_number_config(DMA0,DMA_CH1,strlen((const char*)USART3_TX_BUF));
dma_channel_enable(DMA0,DMA_CH1);
usart_dma_transmit_config(USART2, USART_DENT_ENABLE);//使能串口DMA发送
while(RESET == dma_flag_get(DMA0, DMA_CH1, DMA_FLAG_FTF)){};
/* wait DMA Channel transfer complete */
memset(USART3_TX_BUF,0,USART3_MAX_SEND_LEN);
}
如上代码:第一次发送正常,第二次发送,对端只能收到相应长度的空字符怀疑是第二次发送的时候没有从首地址开始发送,同样代码stm32是正常的
|