简介
这篇文章介绍了串口+DMA的接收过程:GD32F130之FreeRTOS环境下USART+DMA接收不定长数据_哈士奇去买菜的博客-CSDN博客
本文主要介绍串口+DMA的发送过程。
起因
起初我的发送代码写的是下面这种实现:
void USART0_printf(const char*format , ...)
{
int tx_len;
va_list args;
//将要发送的数据写入到DMA发送缓冲区USART0_tx_dma_buf
va_start(args,format);
tx_len = vsnprintf((char*)USART0_tx_dma_buf,USART0_TX_DMA_BUF_SIZE,format,args);
va_end(args);
if(tx_len>0)
{
dma_channel_disable(USART0_TX_DMA_CH); //关闭DMA通道,这样才能设置传输长度
dma_transfer_number_config(USART0_TX_DMA_CH,tx_len); //设置本次DMA传输长度
dma_channel_enable(USART0_TX_DMA_CH); //使能USART0_TX使用的DMA通道,开始DMA传输
}
//等待传输完成TC
while(!usart_flag_get(USART0,USART_FLAG_TC));
usart_flag_clear(USART_FLAG_TC);
}
但是群友提出,