打印
[STM32F1]

如何获取串口接收到数据的长度

[复制链接]
5198|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xialu0908|  楼主 | 2014-3-20 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手求教
沙发
soso| | 2014-3-20 19:24 | 只看该作者
可以修改数据接收规则和触发效果来确认,如果你是利用ARM的话可以设置相应的中断

使用特权

评论回复
板凳
cool_coder| | 2014-3-20 20:11 | 只看该作者
如果用DMA的话从DMA计数就可以知道; 如果用中断或查询方式接收, 就只能靠软件自己计数了.

使用特权

评论回复
地板
huzi2099| | 2014-3-21 00:09 | 只看该作者
这个问题的提法本身就有问题,串口受到的是数据流本身就没有长度的问题.
关键是接收端如何处理数据,或者说如何按照规则处理数据流的分组.
总结一下就三个方法
1.按时间分,视两段数据中间的停顿为分割依据,这方法不会有问题开销也小,缺点就是停顿时间降低了传输速率
2.按特定标识分割,每个段前面或后面加上特定的识别符号,识别符号过短可能会误判(比如插拔接口时会乱数据)
3.按特定长度区分段,比如人为规定好每8个字节一包,这个方法开销小速率高,但是只要有一个字节错后面全错.

当然也可组合使用1,2,3再加校验,要结合你的硬件出错概率带宽占用...综合考虑.

使用特权

评论回复
5
hwl1023| | 2014-3-21 11:52 | 只看该作者
DMA+串口空闲中断

使用特权

评论回复
6
huzi2099| | 2014-3-21 11:59 | 只看该作者
hwl1023 发表于 2014-3-21 11:52
DMA+串口空闲中断

这个不行

使用特权

评论回复
7
hwl1023| | 2014-3-25 15:06 | 只看该作者
huzi2099 发表于 2014-3-21 11:59
这个不行

怎么不行,那里有问题?

使用特权

评论回复
8
huzi2099| | 2014-3-25 21:17 | 只看该作者
hwl1023 发表于 2014-3-25 15:06
怎么不行,那里有问题?

空闲中断是在受到完整数据包括校验位后产生的.每收到一个字节都会来这个中断.

使用特权

评论回复
9
hwl1023| | 2014-3-25 22:41 | 只看该作者
huzi2099 发表于 2014-3-25 21:17
空闲中断是在受到完整数据包括校验位后产生的.每收到一个字节都会来这个中断. ...

https://bbs.21ic.com/icview-224315-1-1.html

使用特权

评论回复
10
huzi2099| | 2014-3-26 10:22 | 只看该作者
hwl1023 发表于 2014-3-25 22:41
https://bbs.21ic.com/icview-224315-1-1.html

是和发送端有关系

使用特权

评论回复
11
hwl1023| | 2014-3-27 16:00 | 只看该作者
huzi2099 发表于 2014-3-26 10:22
是和发送端有关系

使用特权

评论回复
12
szyijitong| | 2014-4-7 18:20 | 只看该作者
自己加个变量啊

使用特权

评论回复
13
szyijitong| | 2014-4-7 18:20 | 只看该作者
收一次加1

使用特权

评论回复
14
huzi2099| | 2014-4-7 23:42 | 只看该作者
szyijitong 发表于 2014-4-7 18:20
收一次加1

单单计数有时候也不行,比如一旦乱数据出错无法恢复到正常包计数.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

21

帖子

0

粉丝