在代码调试过程中,经常使用 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!rn");
输出结果如下: