STM32CubeMX 多UART串口printf

一般情况下,用一个串口打印的话,重写一下fputc()函数,就可以了,keil选项里面一定要勾上uUse MicorLIB

#include 

int fputc(int ch, FILE *file)
{
    return HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
}

这样就可以在包含头文件stdio.h直接使用printf。

 

 

如果使用多个串口情况下,需支持多个printf,上面方法就不行了,使用下面这种方式:

#include 

#define    TXBUF_SIZE_MAX    100

void uartx_printf(const char *format, ...)
{
    va_list args;
    uint32_t length;
    uint8_t txbuf[TXBUF_SIZE_MAX] = {0};

    va_start(args, format);
    length = vsnprintf((char *)txbuf, sizeof(txbuf), (char *)format, args);
    va_end(args);
    HAL_UART_Transmit(&huartx, (uint8_t *)txbuf, length, HAL_MAX_DELAY);
    memset(txbuf, 0, TXBUF_SIZE_MAX);
}

HAL_UART_Transmit()参数huartx是某个串口初始化结构体变量。

 

全篇完。

本人博客仅仅代表我个人见解方便记录成长笔记。

若有与 看官老爷见解有冲突,我坚信看官老爷见解是对的,我的是错的。

感谢~!

 

你可能感兴趣的:(STM32)