OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5928|回复: 4

STM32接收字符串的困扰

[复制链接]

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-3-24
在线时间
3 小时
发表于 2013-5-29 15:06:14 | 显示全部楼层 |阅读模式

最近学校 做个通信项目 现在要求接收PC发过来的数据进行处理 分别是接收3串不同的字符 (1)AA 00 C0  (2)AA 00 C2  和(3)AA 00 C1 XX XX XX XX XX 检验。(1)(2)指令是固定的,已经做好了。现在是第三条指令 因为C1后的字节需要读取判断, 好像接收到AA 00 C1 (01) xx xx xx xx xx 校验是灯的 (02)是水壶的 。问题是现在我不知道用哪种接收形式比较好 我把数据存进数组中又读不出来 。一个个读判断哪工作量又实在是吓人。有没有大神做过类似的,给点意见最后有点源码的,谢谢
以下是在下参照原子哥写的部分源码 :
 if(USART1->SR&(1<<5))//接收到数据
 { 
  res=USART1->DR;
   if((USART_RX_STA&0x0100)==0)   //判断是否接收到AA 00 C1(否执行)
   {
  if((USART_RX_STA&0x8000)==0)  //接收未完成
  {
   if(USART_RX_STA&0x2000)   //接收到了0xAA,0x00
   {
    if((res!=0xa0)&&(res!=0xa1)&&(res!=0xa2))USART_RX_STA=0;

    else if(res==0xC0)USART_RX_STA|=0x8000;   //AA 00 C0
    else if(res==0xC2)USART_RX_STA|=0x1000;   //AA 00 C2
    else if(res==0xC1)USART_RX_STA|=0x0100;   //AA 00 C1 (功能)          

                     

                
   }else        //还没收到0xAA,0X00
   { 
    if(USART_RX_STA&0x4000)
      {
       if(res==0x00)USART_RX_STA|=0x2000;   //接收到00     
      }else
      {
       if(res==0xAA)USART_RX_STA|=0x4000;   //接收到AA
      }               
   }
  }
   }else              //接收AA 00 C1剩下的功能码进行判断
   {
      ////////接收剩下的数据
   }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-29 21:19:27 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-3-24
在线时间
3 小时
 楼主| 发表于 2013-5-30 08:48:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥 我的现在的思路是 首先判断收到那种数据 FF 00 (A0,A1,A2)接收到A0 ,A2就标志并处理掉 。接收到A1就继续接收剩下的数据存入数组 ,如果校验和对就处理,错就重新接收。 这样可以吗?还是一开始就把接收到任何数据存入数组处理比较好
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-30 10:26:12 | 显示全部楼层
直接存数组.
你的数据一次发送总有协议规定的最大长度吧?你数组设置为最大长度,一次接收所有数据然后再去分析数据,这样处理最方便了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-3-24
在线时间
3 小时
 楼主| 发表于 2013-5-30 15:52:17 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子哥 有思路了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 04:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表