printf重定向到串口
上代码,这里用到的是hal库,标准库改以下函数就行。
#include <stdio.h>
int fputc(int ch, FILE *f)
{
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart1, temp, 1, 5);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch;
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 5);
return ch;
}
因为上面这段代码我有经常使用到,所以可以把这段代码保存到keil里的模板里,需要用的时候双击即可,具体设置如下:
当需要这块代码就可以直接双击非常方便。
怎么优雅的打印串口信息
先上代码
#define USART_DEBUG
#ifdef USART_DEBUG
#define user_printf(format, ...) printf(format"\r\n", ##__VA_ARGS__)
#define user_info(format, ...) printf(__FILE__"\t[info]:"format"\r\n", ##__VA_ARGS__)
#define user_debug(format, ...) printf(__FILE__"\t[debug]:"format"\r\n", ##__VA_ARGS__)
#define user_error(format, ...) printf(__FILE__"\t[error]:"format"\r\n", ##__VA_ARGS__)
#else
#define user_printf(format, ...)
#define user_info(format, ...)
#define user_debug(format, ...)
#define user_error(format, ...)
#endif
这块代码的作用:
1、可以结尾自动补充换行符,打印出文件目录。
2、用到了条件编译,当作品完成上交时不希望串口打印调试信息,可以取消这个宏定义,这样这几条串口打印函数就无效了。
补充:可变参数宏
具体可以百度
#define user_printf(format, ...) printf(format"\r\n", ##__VA_ARGS__)
简单理解:__VA_ARGS__
就是传递参数用的,当没有传递参数 ##
就会带走前面的逗号,是语法完整。
个性化打印串口信息
获取符号链接。
http://www.patorjk.com/software/taag/
将每行符号复制下来
这里有报错的地方我们在前面添加一个反斜杠\
。
最后效果如下:
具体内容可以看这个哔哩哔哩:WUT电子科技协会。
2020.3.3
修改
#define USART_DEBUG
#ifdef USART_DEBUG
#define info_printf(format, ...) printf(__FILE__"\t[info]:"format"\r\n", ##__VA_ARGS__)
#define debug_printf(format, ...) { printf("%s",__FUNCTION__);\
printf(" [debug]:"format"\r\n", ##__VA_ARGS__);}
#else
#define info_printf(format, ...)
#define debug_printf(format, ...)
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)