串口接收时丢数据问题解决方案

来源:互联网 发布:php 定位获取周边小区 编辑:程序博客网 时间:2024/06/05 05:21

原文地址::http://bluefish.blog.51cto.com/214870/65389


老规矩,先说下问题:串口在接收pc端发来的数据时(100个bytes,每200ms发送一次),偶尔会丢一些数据。某一次的测试记录如下:
第一次丢数据 发送总量60多万字节 丢了27个
第二次丢数据 发送总量80多万字节 (在上一次发送的基础上又)丢了40个
第三次丢数据 发送总量190多万字节 (在上一次发送的基础上又)丢了37个
 
      以上数据要说明的是所丢的数据是一个随机情况,因为如果我把环境清空(例如断电重启)而pc端的发送条件不变,那么丢数据的情况就不是上面显示的记录了。
 
      分析,所谓的丢数据无非就是fifo溢出软件来不及读取或者是软件缓冲区的可读区大小为0。不过从上述情况来看应该不是后者的原因。因为,如果是后者,当pc发送条件不变而开发板环境清空重来的话,丢数据的情况应该一样。
 
       针对以上情况,可通过以下几个方案来修改
       方案一:如果pc(发送端)有自动流控,那么ce端也应该打开自动流控--在串口驱动中通过rUMCON寄存器设置;如果pc端没有,ce端也应该将自动流控关闭
       方案二:提高接收线程的优先级,包括应用程序和驱动程序的
       方案三:设置串口控制器的接收中断模式和FIFO的trigger level值。中断模式有两种,pulse模式的意思是当FIFO中的数据量刚到达所要求(trigger level)的时候会产生中断,该中断只在那一刻产生,如果那时cpu还在处理上一次的中断而把该中断mask掉,那么该中断就回被丢掉,而FIFO中的数据就会一直增加到溢出;level模式的意思是只要FIFO中的数据达到所要求的时候就会产生中断,包括比所要求的多的时候,只要cpu在FIFO中的数据在溢出之前处理完上一次的中断而来处理这次中断,这样FIFO就不会溢出,数据也就不会丢失。

本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/65389


//==========================================================================================

备注::

1》STM32串口中断这样的问题是怎么回事呢?----http://www.amobbs.com/thread-5428187-1-1.html

2》stm32 串口第一字节丢失问题分析 ----http://blog.21ic.com/user1/4939/archives/2012/90426.html





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贴膜时候的气泡怎么办 贴手机膜起泡了怎么办 手机膜起泡泡了怎么办 手机膜鼓起来了怎么办 贴膜中间有气泡怎么办 新车贴膜有气泡怎么办 贴手机膜进灰尘怎么办 贴手机膜有灰尘怎么办 华为mate10后机壳碎了怎么办 手机屏和壳分开了怎么办 oppoa33手机开不了机怎么办 7p背面刮花了怎么办 oppo手机左右两键失灵怎么办 苹果5s屏幕翘起怎么办 0pp0手机有点卡怎么办 手机用久有点卡怎么办 手机有点卡怎么办魅蓝 苹果6排线接反了怎么办 oppo手机解锁密码忘了怎么办 魅蓝5音量小怎么办 魅蓝5密码忘记了怎么办 魅蓝note3锁定了怎么办 魅族mx5系统铃声没有了怎么办 魅族主板坏了怎么办 魅族mx5螺丝滑丝怎么办 魅族魅蓝e手机被锁了怎么办 魅蓝e被锁机了怎么办 魅蓝3s卡顿怎么办 魅族note5玩王者荣耀卡怎么办 魅族手机内存不够怎么办 魅族手机音量小怎么办 魅族mx5指纹解锁失灵怎么办 魅族手机费电快怎么办 魅族mx4pro玩王者荣耀卡怎么办 魅蓝5s玩游戏卡怎么办 魅蓝s6玩游戏卡怎么办 OPPO王者荣耀对局闪退怎么办 魅族手机太慢怎么办 魅蓝5信号不好怎么办 魅蓝数据网速慢怎么办 魅族联通网速慢怎么办