STM32系列之printf彩色打印


前言

stm32系列单片机中使用串口重定向打印,颜色都是黑底白字,颜色太单一,有时候我们想实现重大错误时使用红色打印,正常debug的输出使用绿色打印,类似于log等级那样,error使用红色,worn使用黄色,debug使用绿色,本文介绍一种基于串口重定向到printf的彩色输出打印方法。


一、STM32系列单片机的串口重定向

这一部分在我另一篇文章中有介绍,可参考STM32H753IIT6中使用printf打印数据
或者参考其他博主的优秀文章,本文中不再详细赘述,默认认为你已经实现了printf的黑底白字的打印。

二、实现printf的颜色输出

在工程中定义颜色相关的宏,如图所示:
定义颜色宏

#define NONE         "\033[m"
#define RED          "\033[0;32;31m"
#define LIGHT_RED    "\033[1;31m"
#define GREEN        "\033[0;32;32m"
#define LIGHT_GREEN  "\033[1;32m"
#define BLUE         "\033[0;32;34m"
#define LIGHT_BLUE   "\033[1;34m"
#define DARY_GRAY    "\033[1;30m"
#define CYAN         "\033[0;36m"
#define LIGHT_CYAN   "\033[1;36m"
#define PURPLE       "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN        "\033[0;33m"
#define YELLOW       "\033[1;33m"
#define LIGHT_GRAY   "\033[0;37m"
#define WHITE        "\033[1;37m"

此时在main函数中写下验证代码,如下图所示:

验证代码

printf(RED "hello,world, red\r\n" NONE);
printf(BLUE "hello,world, blue\r\n" NONE);
printf(GREEN "hello,world, green\r\n" NONE);
printf(YELLOW "hello,world, yellow\r\n" NONE);
HAL_Delay(1000);

然后编译代码,进行烧录下载,当程序运行后,打开串口助手如下
彩色输出成功

彩色打印成功!!!

三、代码优化

虽然上述操作确实可以输出彩色打印,但是每次彩色打印前总是要先printf(RED [输出内容] NONE);
这样才能输出想要的颜色。这样写太麻烦了,而且也不优雅,能不能把这个RED和NONE省略掉呢。
于是想到使用宏,我们可以像下面这样操作。如图所示:
定义一些打印宏函数

#define printf_red(...) ({printf(RED);printf(__VA_ARGS__);printf(NONE); })
#define printf_blue(...) ({printf(BLUE);printf(__VA_ARGS__);printf(NONE); })
#define printf_green(...) ({printf(GREEN);printf(__VA_ARGS__);printf(NONE); })
#define printf_yellow(...) ({printf(YELLOW);printf(__VA_ARGS__);printf(NONE); })

四、验证优化代码

根据步骤3,写好打印颜色宏函数后,我们在main中编写如下代码,如图所示:
验证优化代码

printf_red("hello,world\r\n");
printf_blue("hello,world\r\n");
printf_green("hello,world\r\n");
printf_yellow("hello,world\r\n");
HAL_Delay(1000);

写好后,我们编译代码,下载到开发板,然后打开串口助手,如图所示:

彩色打印
彩色输出成功!!!

五、总结

本文介绍了一种使用printf打印彩色输出的方法,只定义了部分颜色,还有其它很多种颜色,这一部分可参考其它博主的优秀文章,有了颜色输出,便可对工程中的日志管理有重大意义,用户可根据自己的喜好,结合宏定义写出自己工程中的log日志功能!!!

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值