将 printf 重定向到 UART 时,输出行呈阶梯状

Posted

技术标签:

【中文标题】将 printf 重定向到 UART 时,输出行呈阶梯状【英文标题】:When redirecting printf to UART, output lines have a stair-stepped appearance 【发布时间】:2021-12-20 15:45:32 【问题描述】:

我刚开始使用 STM32 微控制器,我正在将 printf 的输出重定向到 UART。出于某种奇怪的原因,显示的终端不断添加代码中不存在的额外空格。我似乎找不到原因。

这是显示输出的截图;请注意阶梯状的外观,因为每个 printf 语句都被换成了一个比前一个缩进更深的新行:

这是我用来重定向printf的代码:

int _write(int file, char *ptr, int len)

    HAL_USART_Transmit(&husart3, (uint8_t*)ptr, len, HAL_MAX_DELAY);
    return len;

我调用这段代码如下:

printf("program starting...\n");
int counter = 0;
while(1)

    printf("counter = %d\n", counter);
    counter++;
    HAL_Delay(1000);

什么可能导致这种奇怪的包装行为,我该如何解决?

【问题讨论】:

Please do not upload images of code/errors when asking a question. 我将如何展示我面临的问题? 在终端程序中选择文本,复制并粘贴为文本。要保留格式,请使用 按钮、按 Ctrl+K 或将其括在三个反斜杠中 - 与代码相同。 【参考方案1】:

您的终端 - 像大多数终端一样 - 像旧打字机一样解释 \n\r

\n 将滚轮移动一行 \r 将托架移动到纸张的左侧

输出显示只有滚轮被移动了,但小车没有回到最左边的位置。

两种选择:

输出\r\n 而不仅仅是\n 配置您的终端,使\n 足以移动到下一行返回最左边的位置。

【讨论】:

以上是关于将 printf 重定向到 UART 时,输出行呈阶梯状的主要内容,如果未能解决你的问题,请参考以下文章

RA生态之串口与printf()函数重定向

RA生态之串口与printf()函数重定向

即使我将输出重定向到 /dev/null,printf 仍然会产生成本吗?

c语言如何将printf产生的数据写到txt文件中

使用System.out.printf()输出日志重定向到文件后显示混乱问题

Keil C51重定向printf到串口