你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

UART如何接收不定长度的数据

[复制链接]
netlhx 提问时间:2015-1-8 08:58 /
如果要接收不定长度的数据,诸位有什么好的建议,有参考代码最好,谢谢!
<
收藏 2 评论3 发布时间:2015-1-8 08:58

举报

3个回答
AndyYau-268557 回答时间:2015-1-8 11:34:19
那你的定义最大数组处理吧。和普通的一样,只是没法检验数据正确与否。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Angel_YY 回答时间:2018-3-10 11:00:13
不定长数据接收需要靠判定串口接收超时。比如连续20ms没有接收到数据判定数据接收完成。数据可以根据需要添加数据头和数据尾以及校验。建议代码如下
  1. void TI_1MS_OnInterrupt(void)
  2. {
  3.         //RS485接收命令超时判断,由于串口数据没有固定格式,这里采用时间分割,
  4.         //假设9600波特率,接收一字节用时约为1ms,如果连续10毫秒都没有新数据,说明本次交易命令接收完成
  5.         if(usTimeCntOf485<10){    //如果接收到了485串口数据
  6.                 usTimeCntOf485++;      //计时开始
  7.         }else if(usTimeCntOf485==10){//如果等待达到10毫秒
  8.                 RS485Recv.ucStatFlg=1;   //数据传送完成,交给主程序去轮训处理。
  9.                 //AS_485_ClearRxBuf();   //清空缓冲
  10.                 usTimeCntOf485=1001;   //重置计时变量
  11.         }
  12. }
复制代码

  1. void AS_485_OnRxChar(void)
  2. {
  3.     /* Write your code here ... */
  4.     AS_485_TComData ch;
  5.     usTimeCntOf485=0;  //给接收计时变量清零
  6.     if(AS_485_RecvChar(&ch) == ERR_OK)  //如果接收到串口字符
  7.     //AS_485_SendChar(ch);//发送回去,只在调试时使用
  8.         if(RS485Recv.ucStatFlg==0){  //如果当前数据缓冲允许接收
  9.             if(RS485Recv.ucDataLen<MSGBUFFERMAXLEN){ //如果接收到的数据不足32字节,继续接收,直到超时
  10.                 RS485Recv.ucMsgBuffer[RS485Recv.ucDataLen]=ch;  //把接收到的字符保存到结构体的缓冲区中。
  11.                 RS485Recv.ucDataLen++;  //更改接收到字符的长度变量,这里保存的是接收到了多少字节数据。
  12.             }else//如果一次性连续接收超过32字节,数据丢弃,防止缓冲区溢出。
  13.             {
  14.                 RS485Recv.ucDataLen=MSGBUFFERMAXLEN+1;   //标记字符长度为最大长度+1,通过这个值可以判断是否接收溢出了。
  15.             }
  16.         }else{  //如果当前数据缓冲不允许接收,例如主线程还没有处理完,此时只能丢弃
  17.             RS485Recv.ucStatFlg=2; //发生了丢弃
  18.         }
  19. }
复制代码



评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

XinLiYF 回答时间:2018-3-10 11:53:23
空闲总线中断,我封装的串口驱动

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版