STM32下多个串口的Printf用法

来源:互联网 发布:房屋免费设计软件 编辑:程序博客网 时间:2024/06/17 13:54
标题:STM32下多个串口的Printf用法
2012-08-29 10:03:58
网上讲的添加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()函数自以此类推!

本文引用通告地址:http://wojiushiwolxw.spaces.eepw.com.cn/articles/trackback/item/93158
0 0
原创粉丝点击