51和32位51 使用 多串口 printf 函数 的例子
求:51和32位51 使用 多串口 printf 函数 的例子==============================================
串口3能用printf函数吗?
问个串口3通信,使用printf函数的问题
主要是对printf函数不熟悉
用串口1没问题能通信
我现在想用STC8H8K单片机的串口3通信,
包含了头文件“stdio.h”
设置了串口3,用T2做波特率发生器
是不是串口3初始化后,如下重写就可以使用printf函数了?
void UartPutc(unsigned char dat) //使用printf时需重写{ S3BUF =dat; while(TI==0); TI = 0;}char putchar(char c){ UartPutc(c); return c;}
本帖最后由 乘风飞扬 于 2024-9-10 09:05 编辑
51和32位51 使用 多串口 printf 函数 的例子
串口1使用 printf 函数
串口2使用 printf 函数
串口3使用 printf 函数
串口4使用 printf 函数
附件例程多串口使用printf函数进行打印,
但是要使用不同的函数名
UART1_printf("STC32G UART1 printf Test.\r\n");
UART2_printf("STC32G UART2 printf Test.\r\n");
UART3_printf("STC32G UART3 printf Test.\r\n");
UART4_printf("STC32G UART4 printf Test.\r\n");
你查询和清除的发送标志位仍旧是串口1的TI,要改成串口3的。 如楼上所言,修改要改全套{:4_165:} 明白了,感谢楼上两位 本帖最后由 ningsane 于 2024-9-9 14:56 编辑
请问楼上各位,如果串口1,串口2,串口3都需要同时使用,如何修改printf函数让3个串口同时正确使用? ningsane 发表于 2024-9-9 14:51
请问楼上各位,如果串口1,串口2,串口3都需要同时使用,如何修改printf函数让3个串口同时正确使用? ...
编译器提供的printf函数只能用一个串口。 使用putchar函数重映射到需要的串口。
串口1不开中断:
char putchar(char c)
{
SBUF = c;
while(!TI);
TI = 0;
return c;
}
串口1开中断:
char putchar(char c)
{
B_TX1_Busy = 1;
SBUF = c;
while(B_TX1_Busy);
return c;
}
void UART1_ISR (void) interrupt UART1_VECTOR
{
if(RI)
{
RI = 0;
}
if(TI)
{
TI = 0;
B_TX1_Busy = 0;
}
}
串口2不开中断:
char putchar(char c)
{
S2BUF = c;
while((S2CON & 2)==0);
S2CON &= ~2;
return c;
}
串口2开中断:
char putchar(char c)
{
B_TX2_Busy = 1;
S2BUF = c;
while(B_TX2_Busy);
return c;
}
void UART2_ISR (void) interrupt UART2_VECTOR
{
if((S2CON & 1) != 0)
{
S2CON &= ~1;
}
if((S2CON & 2) != 0)
{
S2CON &= ~2;
B_TX2_Busy = 0;
}
}
串口3不开中断:
char putchar(char c)
{
S3BUF = c;
while((S3CON & 2)==0);
S3CON &= ~2;
return c;
}
串口3开中断:
char putchar(char c)
{
B_TX3_Busy = 1;
S3BUF = c;
while(B_TX3_Busy);
return c;
}
void UART3_ISR (void) interrupt UART3_VECTOR
{
if((S3CON & 1) != 0)
{
S3CON &= ~1;
}
if((S3CON & 2) != 0)
{
S3CON &= ~2;
B_TX3_Busy = 0;
}
}
串口4不开中断:
char putchar(char c)
{
S4BUF = c;
while((S4CON & 2)==0);
S4CON &= ~2;
return c;
}
串口4开中断:
char putchar(char c)
{
B_TX4_Busy = 1;
S4BUF = c;
while(B_TX4_Busy);
return c;
}
void UART4_ISR (void) interrupt UART4_VECTOR
{
if((S4CON & 1) != 0)
{
S4CON &= ~1;
}
if((S4CON & 2) != 0)
{
S4CON &= ~2;
B_TX4_Busy = 0;
}
}
乘风飞扬 发表于 2024-9-9 15:29
附件例程多串口使用printf函数进行打印,但是要使用不同的函数名
这个例子使用的是C251的编译器,重写的printf函数里边有多个未知变量和函数在C51编译器里边无法识别。是不是使用这个例子的函数,必须得更换到C251编译器里边?在keil C51编译器里边能不能修改这个printf函数,达到同时使用多个串口的目的? ningsane 发表于 2024-9-9 16:06
这个例子使用的是C251的编译器,重写的printf函数里边有多个未知变量和函数在C51编译器里边无法识别。是 ...
7楼增加了51芯片使用多串口printf函数的例子,供参考。
页:
[1]
2