STM32串口接收及发送的数据程序分享

上一篇文章分享了CVI发送数据给STM32的程序(LabwindowsCVI上位机通过串口向STM32发送数据程序分享)STM32串口接受和发送数据的程序(USART/UART)确实已经过去很长时间了,现在才动手做接收部分属实是有些懒惰了。话不多说我们进入正题。
如果只是单纯的想接受CVI发送的数据,那其实并不困难,但是考虑到接受数据的准确性以及何时发送数据何时终止发送,我们就需要写一个简单的通讯协议(只判断帧头帧尾即可)。
除此之外,什么时候让程序运行,什么时候让程序终止也是应该考虑到的,所以我的程序如下。

  if(USART_RX_STA & 0xC000)
	   {
		len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
		if(len<3)
		{
		value1=*(USART_RX_BUF);
		}
		if(value1==0x31)
	  {	
			sscanf((char*)(USART_RX_BUF), "A%fA", &value);  /* value为截取到的浮点数值 */
		    b=value;
			memset(USART_RX_BUF, 0x00, USART_RX_STA & 0x3FFF);
		}
	else if(value1!=0x31)
	  {
             break;   	  
	  }		
		delay_ms(10);

在这里我用长度作为判断条件来判断CVI发送的数据是用来参与运算的还是用来开启或结束程序(因为我用来参与运算的数据长度大于三位,并且用1作为开启条件)。如果接受到1,1将会被赋给value1,则可以运行sscanf函数,当截取到帧头帧尾(我都设为A),就会把AA之间的数据读取并赋给变量b,接着用memset函数清零。如果接受到不为1的长度小于3的数据,程序则会中断。

	if(UART_FLAG_PROC==1)
	{
		if((USART_RX_BUF[1]==0x0d&&USART_RX_BUF[2]==0x0a)||(USART_RX_BUF[2]==0x0d&&USART_RX_BUF[3]==0x0a))
		{
			if(USART_RX_BUF[1]==0x0d&&USART_RX_BUF[2]==0x0a)
		value1=USART_RX_BUF[0]-48;
			else if(USART_RX_BUF[2]==0x0d&&USART_RX_BUF[3]==0x0a)
		value1=USART_RX_BUF[1]-48;
		USART_RX_BUF[0]=0;
		USART_RX_BUF[1]=0;
		USART_RX_BUF[2]=0;
		USART_RX_BUF[3]=0;
		USART_RX_BUF[4]=0;
		USART_RX_BUF[5]=0;
		USART_RX_BUF[6]=0;
		USART_RX_BUF[7]=0;
		
		}
		if(USART_RX_BUF[0]=='A'&&USART_RX_BUF[6]=='A')
		{
		value=(USART_RX_BUF[1]-48)*1000+(USART_RX_BUF[3]-48)*100+(USART_RX_BUF[4]-48)*10+(USART_RX_BUF[5]-48);//ASCII码转,所以减48
		value=value/1000.0f;
		USART_RX_BUF[0]=0;
		USART_RX_BUF[1]=0;
		USART_RX_BUF[2]=0;
		USART_RX_BUF[3]=0;
		USART_RX_BUF[4]=0;
		USART_RX_BUF[5]=0;
		USART_RX_BUF[6]=0;
		USART_RX_BUF[7]=0;
		}
		
		UART_FLAG_PROC=0;

再提供另一种数组的方法,思路和上一种是一样的

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值