STM32
直播中

听风说梦

9年用户 902经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

请问一下STM32-printf函数是怎样通过DMA打印的

请问一下STM32-printf函数是怎样通过DMA打印的?

回帖(1)

王盼盼

2021-11-30 09:11:31
1.简单的printf打印,把底层的fputc重写就行

int fputc(int ch, FILE *f)
{
        while (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) == RESET)
        {}
        HAL_UART_Transmit(&huart1, (uint8_t*) &ch,1,0xFF);

        return ch;
}
2.通过DMA打印

void Usart1DmaPrintf(const char *format,...)
{
        uint16_t len;
        va_list args;       
        va_start(args,format);
        len = vsnprintf((char*)UartTxBuf,sizeof(UartTxBuf)+1,(char*)format,args);
        va_end(args);
        HAL_UART_Transmit_DMA(&huart1, UartTxBuf, len);
}
里面的UartTxBuf可以申请为全局变量,长度合适就行。或者用动态分配内存,然后再DMA发送完成中断里回收内存。如果在函数内申请的局部变量的话可能会被回收后被其他地方用,造成其他影响。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分