log打印,对printf()串口输出进行再次封装

#define log(format, ...) printf(format, ##__VA_ARGS__)
				/*
						把log变成了pintf打印出内容那个和直接放printf中一样
 				*/

 #define logfile(format, ...) \
					printf("[%s:%d->%s] "format, __FILE__, __LINE__, __func__, ##__VA_ARGS__)  ;
				/*
							[../Src/main.c:459->main] 111111
							会打印出来打印的文件路径,在文件中的第几行,以及路径中的第几行 
							这是多添加的三个数据   __FILE__, __LINE__, __func__,
 					*/

FILE :正在编译文件的文件名
LINE :正在编译文件的行号
DATE:编译时刻的日期字符串 如“Sep 22 2020”
TIME:编译时刻的时间字符串 如”10:00:00“
STDC:判断该文件是不是标准C程序

### STM32 串口 Log 实现方法 对于STM32而言,实现串口Log功能可以通过配置USART外设来完成。具体来说,在初始化阶段设置好相应的波特率、数据位数等参数之后,就可以通过编写简单的发送函数来进行日志信息的输出[^1]。 为了更方便地管理这些日志消息,通常会创建一个专门用于打印日志的接口函数,比如`log_print()`。该函数内部调用了底层硬件操作API如`HAL_UART_Transmit()`或类似的库函数,负责将字符串形式的日志内容经由指定的串口号传输给上位机或其他接收端设备显示出来[^4]。 下面给出一段基于标准外设库的简单示例代码: ```c #include "stm32f1xx_hal.h" UART_HandleTypeDef huart1; void log_init(void){ /* 初始化 UART */ huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&huart1); } void log_print(const char *str){ /* 发送字符串到串口 */ HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), HAL_MAX_DELAY); } ``` 上述例子展示了如何定义两个辅助性的全局变量和函数:一个是用来保存已配置好的串口句柄结构体实例;另一个则是封装了实际执行字符序列传送过程的方法。当应用程序需要记录某些状态变化或者错误提示的时候只需调用后者并传入待输出的信息即可。 此外,如果希望获得更加丰富的格式化能力,则可以考虑引入类似于C语言中的`printf()`风格的支持。这往往涉及到额外安装第三方组件或是自行扩展现有框架的功能集。例如SEGGER RTT提供了一套轻量级解决方案,仅需几个特定API就能满足大多数场景下的需求[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值