超高效率dma 串口调试程序,DMA构造PRINTF函数

首先,感谢群里面管理员 担/xin 的分享

以下复制于QQ群信息


void Debug_Printf(const char *format, ...)
{
uint32_t length;
va_list args;
if(firstflag==0)
{
va_start(args, format);

length = vsnprintf((char[i])print_buffer, sizeof(print_buffer), (char[/i])format, args);
va_end(args);

HAL_UART_Transmit_DMA(&huart1,print_buffer,length);
firstflag=1;

}
else
{
while(!okflag);
va_start(args, format);
length = vsnprintf((char[i])print_buffer, sizeof(print_buffer), (char[/i])format, args);
va_end(args);

__HAL_DMA_SET_COUNTER(&hdma_usart1_tx,length);
__HAL_DMA_ENABLE(&hdma_usart1_tx);

}

okflag=0;
}


DMA发送为循坏模式

发送完成中断为


void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) //·¢ËÍÍê³É
{

__HAL_DMA_DISABLE(&hdma_usart1_tx);
okflag++;firstflag=1;

}


头文件包含

#include <stdarg.h>

这几个复制上去就能用
定义的变量也贴出来


uint8_t firstflag=0;
volatile uint8_t okflag=0;
uint32_t Tim_num=0;

#define RX_BUF_SIZE 0x100
#define PRINTF_BUF_SIZE 0x200



static uint8_t print_buffer;


复制上去就可以用了,很爽,今天搞了一下午,话说工作效率有点低


完整的工程文件可以到论坛网盘下载:
名称:UART高效不定长DMA接收DMA发送.zip

已邀请:

admin

赞同来自: 【福清】Paderboy

这个很有用,在高速过程调试的时候可以不拖慢程序速度

【福清】Paderboy

赞同来自:

群主建个,完整的,方便新手学习。。。。

yanandren

赞同来自: gfdscoolboy

发送中断一般是用来干什么的..

yhkingboy

赞同来自:

gggggggggggggggood

Waiman /sun

赞同来自: abswzp

这个效率太低了,直接用SEGGER提供的调试接口还快

wangjun110 - 一句话介绍

赞同来自:

要回复问题请先登录注册