STM32下多个串口的Printf用法

网上讲的添加printf()到程序中一般都是这样的(简要提一下):

1.配置GPIO ,USART,RCC 的Configuration

2.勾选usb micro lib

3.在程序中添加:(头文件需要添加#include <stdio.h>)

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

PUTCHAR_PROTOTYPE

{

USART_SendData(USART1, (u8) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

return ch;

}

很明显这个方法使用printf()只能输出到usart1,如果需要使用多个usart呢,肯定不能都是用printf()。

方法如下是继续是用usart2的printf()功能:

1.配置usart2的串口配置,gpio,rcc enable,跟上面类似

2.勾选usb micro lib,跟上面类似

3.添加头文件#include <stdarg.h>,编写USART2的printf函数:

void USART2_printf (char *fmt, ...)

{

char buffer[CMD_BUFFER_LEN+1]; // CMD_BUFFER_LEN长度自己定义吧

u8 i = 0;

va_list arg_ptr;

va_start(arg_ptr, fmt);

vsnprintf(buffer, CMD_BUFFER_LEN+1, fmt, arg_ptr);

while ((i < CMD_BUFFER_LEN) && buffer[i])

{

USART_SendData(USART2, (u8) buffer[i++]);

while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

}

va_end(arg_ptr);

}

用法与printf类似,如int i=123;USART2_printf("%d",i);

粽子糖果 发表于09-28 09:56 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

粽子糖果
粽子糖果(总统)
金币:41623个|学分:51975个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号