一,简介
本文主要介绍,如何在使用外设HAL库中将串口输出重定向到printf。
二,操作步骤
2.1 将如下代码复制到usart.c文件的末尾:
/* USER CODE BEGIN 1 */
#if 1
//解决HAL库使用时,某些情况可能报错的bug
int _ttywrch(int ch)
{
ch=ch;
return ch;
}
//标准库需要的支持函数
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef d in stdio.h. */
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&hlpuart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
void array_printf(unsigned char*data, unsigned int len)
{
printf("{");
for(int i = 0; i < len; ++i){
printf("%02X,", data[i]);
}
printf("}\r\n");
}
#endif
/* USER CODE END 1 */
2.2 修改编译报错
在usart.c增加头文件:
/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */
将HAL_UART_Transmit函数中的串口结构体修改为当前文件的串口结构体:
三,总结
按照以上步骤可以将printf重定向到串口。