我正在使用ATmega128,我需要两个串行端口进行通信。我一直在使用来自“stdio.h”头文件的printf来通过USART 0发送数据。我还需要通过USART 1发送数据到lcd,我很好奇使用格式化的输入函数。我一直在考虑将相同的printf函数连接到USART 1和USART 0会让编译器感到困惑,所以我没有尝试过。
任何人都可以建议如何让另一个printf说“Lprintf”通过USART发送数据1 ??
答案 0 :(得分:2)
您要在此处执行的操作是使用fprintf()
。有关该功能,请参阅avr-libc上的文档。基本上,您希望UART1具有fputc()
功能,UART0具有一个功能。然后,基于此,您可以创建两个FILE
缓冲区。完成后,您可以自由使用fprintf()
。或者,您可以将stdout
指向其中一个缓冲区,以便能够使用printf()
。
FILE uart1_out = FDEV_SETUP_STREAM(uart1_putc, 0, _FDEV_SETUP_WRITE);
FILE uart0_out = FDEV_SETUP_STREAM(uart0_putc, 0, _FDEV_SETUP_WRITE);
fprintf(&uart1_out, "printing to UART1");
fprintf(&uart0_out, "printing %d to UART0", 0);
stdout = &uart1_out;
stderr = &uart0_out;
printf("This string will be printed thru UART1");
fprintf(stderr, "This string will be printed thru UART0");
您只需提供int uart1_putc(int, FILE*)
和int uart0_putc(int, FILE*)
的实施,即可根据需要操作数据。
希望这有帮助。
干杯。
答案 1 :(得分:0)