STM32下多个串口的Printf用法

来源:本站
导读:目前正在解读《STM32下多个串口的Printf用法》的相关信息,《STM32下多个串口的Printf用法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32下多个串口的Printf用法》的详细说明。
简介:首先提出网上讲的添加printf()到程序中一般的步骤,但很明显这个方法使用printf()只能输出到usart1,如果需要使用多个usart呢,肯定不能都是用printf()。方法见文中,是继续是用usart2的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);

提醒:《STM32下多个串口的Printf用法》最后刷新时间 2024-03-14 01:08:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32下多个串口的Printf用法》该内容的真实性请自行鉴别。