RYMCU

STM32 HAL 库串口DMA实现 printf 打印调试信息

Hugh 4 月前
# STM32移植 # DMA # 串口 # printf

在代码调试过程中,经常使用 printf 函数输出调试信息。我们加 printf_DMA 函数,通过串口输出调试信息。

step1 main.c 文件中添加头文件及函数声明

#include "stdio.h"
#include "stdarg.h"
#include "stm32f1xx_hal_uart.h"

void printf_DMA(const char *format,...);

step2 编写 printf_DMA 函数,代码添加至 main.c

//添加DMA串口printf函数
uint8_t _dbg_Buff[150];
void printf_DMA(const char *format,...)
{
    uint32_t length;
    va_list args;
    uint8_t  temp=0;

    va_start(args, format);
    length = vsnprintf((char*)_dbg_Buff, sizeof(_dbg_Buff)+1, (char*)format, args);
    va_end(args);

    HAL_UART_Transmit_DMA(&huart1,_dbg_Buff,length);
    //等待串口发送完成,注意是串口发送完成,不是DMA传输完成
    while(!__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC));
    //如果没有上面这条语句,连续调用printf_DMA时可能输出错误。
}

step3 printf 函数输出示例

main.c 文件 main() 函数添加代码如下:

printf_DMA("DMA UART Printf test!\r\n");

输出结果如下:
DMAprintf.jpg

后发布评论