21ic问答首页 - GD32使用DMA发送问题
GD32使用DMA发送问题
A星星之火2021-03-08
本帖最后由 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是正常的
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是正常的
您需要登录后才可以回复 登录 | 注册