串口练习(上位机1通过串口与上位机2通信)

        上位机1通过串口1收到数据存入一片单片机板子STM32芯片的内存中,再将存好的数据通过串口2发送到另一片单片机板子STM32芯片的内存中,最后该存在第二片板子芯片的数据通过串口1发送到上位机2

                                                                图1.上位机

串口1函数

/*
Function name:Usart1_Oneget
Description:单字符接受
param:None
retval:接收到的数据
Remarks:
*/
u8 Usart1_Oneget(void)
{
	u8 data;
	while(!(USART1->SR & (1<<5)));
	data=USART1->DR;
	return data;
}
/*
Function name: Usart1_Onesend
Description:单字符发送
param:data->待发送数据
retval:None
Remarks:
*/
void Usart1_Onesend(u8 data)
{
	while(!(USART1->SR & (1<<7)));
	USART1->DR=data;
}
/*
Function name:Usart1_Recv_Str
Description:字符串接收函数
param:data-->接收到的字符串待存放的数组首地址
retval:None
Remarks:
*/
void Usart1_Recv_Str(u8 *data)
{
	while(1)
	{
		*data=Usart1_Oneget();
		if(*data=='\n')//结束符不唯一 自定义
		{
			break;
		}
		data++;
	}
	*data='\0';//给发送定义一个结束符
}

/*
Function name:Usart1_Send_Str
Description:字符串发送函数
param:data-->待发送字符串的首地址
retval:None
Remarks:
*/
void Usart1_Send_Str(u8 *data)
{
	while(1)
	{
		Usart1_Onesend(*data);
		data++;
		if(*data=='\0')//结束符不唯一 自定义
		{
			break;
		}
	}
}

串口2函数

u32 usart2_led(void)
{
	u8 data2;
	while(!(USART2->SR & (1<<5)));//接一个字符
	data2=USART2->DR;
	while(!(USART2->SR & (1<<7)));
	return data2;
}
/*
Function name:Usart1_Oneget
Description:单字符接受
param:None
retval:接收到的数据
Remarks:
*/
u8 Usart2_Oneget(void)
{
	u8 data;
	while(!(USART2->SR & (1<<5)));
	data=USART2->DR;
	return data;
}
/*
Function name: Usart1_Onesend
Description:单字符发送
param:data->待发送数据
retval:None
Remarks:
*/
void Usart2_Onesend(u8 data)
{
	while(!(USART2->SR & (1<<7)));
	USART2->DR=data;
}
/*
Function name:Usart1_Recv_Str
Description:字符串接收函数
param:data-->接收到的字符串待存放的数组首地址
retval:None
Remarks:
*/
void Usart2_Recv_Str(u8 *data)
{
	while(1)
	{
		*data=Usart2_Oneget();
		if(*data=='\n')//结束符不唯一 自定义
		{
			break;
		}
		data++;
	}
	*(data+1)='\0';//给发送定义一个结束符
}

/*
Function name:Usart1_Send_Str
Description:字符串发送函数
param:data-->待发送字符串的首地址
retval:None
Remarks:
*/
void Usart2_Send_Str(u8 *data)
{
	while(1)
	{
		Usart2_Onesend(*data);
		data++;
		if(*data=='\0')//结束符不唯一 自定义
		{
			break;
		}
	}
}

主函数

//#define S//屏蔽哪个就是屏蔽对应主函数的部分
//#define R
int main()
{
    Usart1_Config(115200);//串口1初始化
    Usart2_Config(115200);//串口2初始化
    while(1)
	{
		#ifdef S//发送的板子
		u8 data_send=0;
		data_send=Usart1_Oneget();
		Usart2_Onesend(data_send);
		
		#endif

		#ifdef R//接收的板子
		u8 data_reve=0;
		data_reve=Usart2_Oneget();
		Usart1_Onesend(data_reve);
		
		
		#endif
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值