OpenEdv-开源电子网

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

关于串口数据接受及处理的问题

[复制链接]

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
发表于 2018-12-21 11:19:57 | 显示全部楼层 |阅读模式
我的串口需要接收一组定常数据

1545361688(1).jpg
1545361519(1).jpg
(校验字节是校验前几位的和)
每一字节对应的意义如上;
我需要对数据高字节与低字节进行处理,高字节基本都是0x00,所以不需要考虑;
对数据低字节的处理如下
         data[0]=USART_RX_BUF[7]/100;
         data[1]=USART_RX_BUF[7]%100/10;
         data[2]=USART_RX_BUF[7]%100%10;

若数据低字节是0x0a 处理后显示0.10

关于数据接收后处理,研究了一天左右,还是比较混乱,如何在确保接收这一帧完整的数据的情况下;对数据进行处理,然后再把处理后得到的0.01(如上得到的结果)显示在TFTlcd上(初步的想法是通过定时器来显示,不放在while循环中显示),请问我这种情况如何确保收到一帧完整的数据?在收到数据后进行数据处理时转回到主函数中处理吗?

(另:初学串口,关于数据接收与处理理解的比较差,各位大神有没有好的帖子推荐)

非常感谢!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2018-12-21 11:28:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2018-12-21 11:29:38 | 显示全部楼层
本帖最后由 simms01 于 2018-12-21 11:32 编辑

我常用的方案:

  不管你什么协议 什么长度 什么校验。

首先在中断哪里  设置接收。  收到一个存一个到内存 一直到接收超时,  对的  是一直接收 不做任何判断哦

大循环:   接收超时后 对收到的数据进行处理 。检查规则  例如文件头 校验 等等。。。。如果都符合了 数据爱拆就拆 爱分就分。  


这样不会漏一个字节 也不会卡主
回复 支持 反对

使用道具 举报

1

主题

231

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2872
金钱
2872
注册时间
2018-1-24
在线时间
258 小时
发表于 2018-12-21 11:36:39 | 显示全部楼层
一个个接收完后再解析:先接接特征字然后依次接收数据长度、数据、校验,每个进行判断,然后打包到一个数组进行解析
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 12:14:06 | 显示全部楼层
simms01 发表于 2018-12-21 11:29
我常用的方案:

  不管你什么协议 什么长度 什么校验。

1545365488(1).jpg 1545365568(1).jpg
是这样接收?收到9个之后,设一个标志位进行处理,这样可以吗?
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 12:17:30 | 显示全部楼层
我可不可以利用IDLE中断,虽然是定长,但接收完一帧数据后也有空闲时间,这个时候我判断一帧数据已经接受完,然后进行处理可以吗?
回复 支持 反对

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-12-21 13:09:01 | 显示全部楼层
本帖最后由 yklstudent 于 2018-12-21 13:12 编辑

随便自己,怎么会怎么来中断中FIFO接收存储数据,再开个任务周期判断解析FIFO内接收的数据
一分耕耘一分收获。
回复 支持 反对

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2018-12-21 14:41:25 | 显示全部楼层
中断接收存进一个缓冲数组,然后轮询看看数组的长度以及检查数据是否符合规范。
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 15:31:55 | 显示全部楼层
simms01 发表于 2018-12-21 11:29
我常用的方案:

  不管你什么协议 什么长度 什么校验。

有没有程序例子 哥们
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 20:38:56 | 显示全部楼层
1545395860(1).jpg
我这样接收后怎么处理和显示,小白 真是蒙蔽了一天了!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 17:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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