Advertisement

自定义一个printf函数通过DMA技术实现UART1打印输出功能

阅读量:

今日在研究DMA技术时,突然产生了一个想法,是否可以通过DMA对printf函数进行重定向。尝试了许久却始终未能成功,输出结果全是乱码。因此决定换一种方式,通过自定义一个与printf功能相同的函数,实现数据的DMA传输,从而有效节省单片机的资源。

具体实现思路如下:

在STM32F103ZET6这款芯片中,可以通过配置DMA来实现对printf函数输出路径的重新设定,使其不再默认使用串口进行输出,而是通过DMA将数据发送至内存。

具体的实施步骤包括以下几个方面:

1 首先完成UART和DMA模块的配置工作,确保UART的数据发送功能能够借助DMA完成。

2 接着定义一个字符型数组作为数据输出的缓存区,并设置好DMA传输过程中的源地址与目标地址。

3 然后编写一个自定义的输出函数,在该函数内部实现字符串的拼接操作,并通过DMA通道将数据发送出去。

4 最后将该自定义输出函数替代原有的标准输出流函数。

以下是相关代码实现

复制代码
    #include <string.h>
    #include <stdarg.h>
    //自定义printf函数,通过dma实现串口1打印输出
    #define BUFSIZE 100
    char buffer[BUFSIZE];
    void custom_printf(const char *fmt, 

全部评论 (0)

还没有任何评论哟~