怎么用usart+dma+printf

2019-10-11 17:03发布

在使用USART来向电脑传输数据的时候,传递速度比较慢,故使用dma方式。但是发现DMA传输的数据是16进制,不能向printf函数一样的格式输出,为了方便观察数据,我想DMA输出向printf一样,但是都没有实现。。。
求大神帮助啊!!!!给点指导!!!或者例程!!!附上全部金钱!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
正点原子
2019-10-11 17:06
可以自己改写printf
参考我们的扩展例程,蓝牙模块实验的,printf自定义写法如下:
[mw_shl_code=c,true]//串口3,printf 函数
//确保一次发送数据不超过USART3_MAX_SEND_LEN字节
void u3_printf(char* fmt,...)  
{  
        u16 i,j;
        va_list ap;
        va_start(ap,fmt);
        vsprintf((char*)USART3_TX_BUF,fmt,ap);
        va_end(ap);
        i=strlen((const char*)USART3_TX_BUF);                //此次发送数据的长度
        for(j=0;j<i;j++)                                                        //循环发送数据
        {
                while((USART3->SR&0X40)==0);                        //循环发送,直到发送完毕   
                USART3->DR=USART3_TX_BUF[j];  
        }
}[/mw_shl_code]

你如果要改成DMA传输,那就只需要修改for循环发送,改为DMA就可以了。
不过,这样我认为你也是要等待DMA传输结束的,实际上节省的时间,并不明显。

一周热门 更多>