专栏中心

EEPW首页 > 专栏 > STM32下多个串口的Printf用法

STM32下多个串口的Printf用法

发布人:我就是我lxw 时间:2012-08-29 来源:工程师 发布文章
网上讲的添加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);
如果需要使用USART3,USART4......的printf()函数自以此类推!

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

机械硬盘的未来在哪里?

网络与存储 2025-01-06

极越原地解散,产品上有哪些值得吸取的教训和经验?

英伟达AR眼镜专利曝光:无背光全息技术 更清晰自然

Tornado ProtoTyper下载文件I2.0

hello

wflanny 2004-11-15

半导体ODM巨头们,有了新方向

Tornado ProtoTyper运行使用文档2.0

高速数据采集平台解说3

Tornado ProtoTyper下载文件H2.0

阿里入局AI眼镜,与雷鸟创新达成深度战略合作

苹果公司CEO乔布斯在斯坦福大学的演讲中文字幕

视频 2011-10-12

Intersil介绍:同轴电缆的安全链接

视频 2011-10-17

Tornado ProtoTyper下载文件J2.0

Tornado Release(PDF)

从苹果 A7 到 A18 Pro 芯片:晶体管数量激增 19 倍,晶圆成本飙升 2.6 倍

EDA/PCB 2025-01-06

洗牌在即,哪些车企才能活下去?

原来为硅MOSFET设计的DC-DC控制器能否用来驱动GaNFET?

DC-DC电源设计要点

消息称三星电子已启动4nm制程HBM4逻辑芯片试产

EDA/PCB 2025-01-06

高速数据采集平台解说4

视频 2011-10-17

帮一下吧!

傲枭 2004-11-14

Intersil ISL55210全差分放大器

更多 培训课堂
更多 焦点
更多 视频

技术专区