以此博客记录在CUBE MX环境下,单片机使用单串口重定向或多串口同时使用的学习。
如果有误或能改进的地方,多多相互交流。
一丶一般单串口重定向
两种方法都需添加头文件 : #include <stdio.h>
方法一:
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (uint8_t) ch;
return ch;
}
方法二:
int fputc(int ch, FILE *f)
{
//具体哪个串口可以更改huart1为其它串口
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1 , 0x0f);
return ch;
}
二丶多串口同时调用重定向
2.1 cube Mx的配置
多串口与单串口一样,只需打开所需串口即可,其余配置默认。
2.2 代码的添加
2.2.1 添加头文件stdarg.h、stdio.h和string.h
2.2.2 添加代码
在BEGIN 与 END 中间添加代码,后续CUBEMX更新代码时才不会被刷新。
代码如下:
void print(UART_HandleTypeDef* huart, const char* buf, ...)
{
const char *p = buf;
char str[255] = {0};
va_list v;
va_start(v, buf);
vsprintf(str, buf, v); //使用可变参数的字符串打印。类似sprintf
HAL_UART_Transmit(huart, str, strlen(str), 0xff);
va_end(v);
}
//注: 有报警,不影响