2-关于单片机通信数据传输(中断接收,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8628219.html
先说明一点这种方式,不光对于单片机类的,,对于上位机接收数据同样适用----不骗人的,自己几乎所有的单片机程序,上位机程序,包括现在用的8266,GPRS等等都用这种方式接收数据,如果您还不会用或者不懂......可以这样说这个模板接收对于开发而言简直太实用了....但是请不要直接拿过来就用,请认真的想明白其中的道理,如果您不明白其中的道理,到了别的平台上还是白搭..........
亲们都用怎样的方式,接收串口的数据,,,,,有没有一直在为数据接收解析而苦恼??记得自己刚毕业的时候也是,,总感觉自己的程序不是好程序
当时自己一直在想到底有没有一个最最最最终的模板可用,后来还是前年才自己摸索到的一个程序,废话少说,
接收数据呢其实最根本的是判断接收到一串完整的数据了,然后去处理,以前哈,现在也是,很多人都是加入一些数据头啦,尾啦,数据个数啦...然后接收的时候一直判断头啦,尾啦....数据个数啦,......要是数据再变变....麻烦死人了...
其实最好判断接收到一条数据的方式就是隔一段时间去判断一下接收的数据个数有没有改变,隔一段时间去判断一下接收的数据个数有没有改变,
隔一段时间去判断一下接收的数据个数有没有改变,如果隔了一段时间数据的个数不改变了,那么就确定接收到一条完整的数据了.
先看我51串口的

隔一段时间然后去判断,最好最好的方式就是放到中断里面

写完了,,,就这样....
是不是很简单,但是妙不可言
现在处理数据

剩下的自己去处理,这个就是判断出来接收到一条完整的数据了
数据存在UsartReceive 里面
数据个数 UsartReadCntCopy
现在看一下32的



现在看一下8266的(lua开发的)

function InitTimer1function()
if ReceiveDataCnt ~= then
if ReceiveDataCnt == ReceiveDataCntCopy then
TCPReadDataOverTime = ; ReceiveDataCopy = ReceiveData;
ReceiveData = "";
ReceiveDataCnt = ;
ReceiveDataCntCopy = ; if updataFlage == then
disposedata(ReceiveDataCopy);
else
if ReceiveDataCopy ~= "UpdataDataSuccess" then
file.write(ReceiveDataCopy)
updataCnt = updataCnt +
if TcpConnect ~= nil then
TcpConnect:send("WaitUpdataData"..updataCnt..";");
end
print("start down...")
else
if TcpConnect ~= nil then
TcpConnect:send("UpdataDataSuccess");
TcpConnect:close()
end
file.close()
updataFlage =
print("UpdataDataSuccess") tmr.stop()
tmr.stop()
--dofile("main.lua");
node.compile("updata.lua")
dofile("updata.lua");
--dofile("main.lc");
end
ReceiveDataCopy = "";
end
else
ReceiveDataCntCopy = ReceiveDataCnt
end
end
end
tmr.alarm(, , , InitTimer1function)


上位机的就不看了,还要打开软件...电脑快卡死了....
现在说一下注意点:

假设我接收一个间隔100ms就来一条数据,,,那么我的上面的那个时间就要小于100ms,
其实我一直用5-10ms的间隔时间,
假设波特率很低1200吧,也就是说每间隔 1/1200 S发送过来一位数据 == 0.83ms
如果再苛刻,我就会用芯片自带的空闲中断...51没有哈(不确定有没有,没仔细看过手册...),,32是有的
32虽然有,但是我极少用....


是因为一次载波问题,,,,有没有做过载波的??在电线上传输串口的数据??
载波的数据延迟很高......直接用32的空闲中断检测的太苛刻,,,,根本不能够判断准确...
今天说一下这个是因为自己的源码都是这种模式,因为有一些人不知道为什么这样写,也不知道为什么这样用,所以今天就介绍一个,以后再有人问就直接给他看这篇文章...
2-关于单片机通信数据传输(中断接收,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)的更多相关文章
- 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
补充: 程序优化 为避免普通发送和中断发送造成冲突(造成死机,复位重启),printf修改为中断发送 写这篇文章的目的呢,如题目所言,我承认自己是一个程序猿.....应该说很多很多学单片机的对于... ...
- MM32F0140 UART1空闲中断接收
目录: 1.MM32F0140简介 2.初始化MM32F0140 UART1空闲中断和NVIC中断 3.编写MM32F0140 UART1中断接收和空闲中断函数 4.编写MM32F0140 UART1 ...
- MM32F0020 UART1空闲中断接收
目录: 1.MM32F0020简介 2.初始化MM32F0020 UART1空闲中断和NVIC中断 3.编写MM32F0020 UART1中断接收和空闲中断函数 4.编写MM32F0020 UART1 ...
- 基于STM8的UART发送和中断接收---STM8-第二章
1. 综述 UART的基础知识,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器. 做软件开发的人都 ...
- C++/java之间的Socket通信大小端注意事项
在一个物联往项目中,需要java云平台与一个客户端做socket定制协议的通信:然而在第一次测试时,并没有按照预想的那样完成解析.查找资料以后是因为客户端的数据读取方式为小端模式,而java默认采用大 ...
- 关于STM32空闲中断
有一次做一个东西,为了尽量不占用CPU的处理数据时间,所以就使用DMA接收串口的数据,但是呢问题来了.,,,,,怎么样才能确定接收到了一条完整的数据了,,我们都知道只要打开DMA 那家伙就不停的把接收 ...
- STM32空闲中断
收发共存的思路没有经过验证!!! 空闲中断:既可以用来作为不定长接收数据帧的断帧判断/特别是DMA数据的接收,也可以用来指示中断发送的结束. 在需要发送的地方USART_ITConfig(UART5, ...
- STM32F10x_硬件I2C主从通信(轮询发送,中断接收)
Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信. ...
- 51单片机-PC数据传输 温度 距离 监控系统设计
>_<:功能概述: 通过串口PC和单片机通信,可以询问单片机测得的温度,可以询问声呐测距的测量距离,同时把测量温度显示在数码管上. >_<:PC部分 这里com.cpp和com ...
随机推荐
- Python 练习:三级菜单选择城市(二)
优化了上一个三级菜单选择城:http://www.cnblogs.com/klvchen/p/8646466.html info = { 'GuangDong':{ 'GuangZhou': ['Ti ...
- 【工具相关】Web-ionic-ionicLab的使用
一,下载地址为:http://lab.ionic.io/,下载后直接安装即可.图标如下图所示: 二,打开ionicLab,如下图所示: 三,打开一个已有的文件,File-->Open Exist ...
- 【读书笔记】iOS-优化iOS Web应用
一,代码优化: 代码优化是任何优化技术的第一步,因为归根结底网页上的一切都是构建在代码之上的.优秀的代码可以节省宽带,减少渲染延迟,以及提高页面的可读性和长远的可维护性.下面列出了一些在Web应用中编 ...
- 【读书笔记】iOS-设计模式
一个可复用的解决方案,用于处理特定场景下的常见问题.一种设计模式并不是一个可以直接转化为代码的已完工设计.它是对于如何解决问题的一种描述或者模板,可以用在许多不同的场合. 参考资料:<iOS W ...
- 用animate改变了某个样式之后再用css控制会无效
我前几天写了个移动端运动,(这个运动的代码我贴在这了:http://www.cnblogs.com/weiman/p/6600380.html)然后发现了这个问题,具体如下: 未运动前是这样的,菜单栏 ...
- java 约束配置文件和本地约束
一.寻找spring配置文件约束头(也可直接复制已有的) 1.在本地文件夹解压spring核心包(dist) 例:核心包的约束位置(D:\JavaSources\spring-framework-4. ...
- 张钹院士:场景是当前AI产业化最大问题
张钹院士:场景是当前AI产业化最大问题 https://mp.weixin.qq.com/s/TLdoi9cnY-Crr0FVp2ah6g 在世界机器人大会“青年创新创业专题论坛”上,清华大学人工智能 ...
- 安卓开发ScrollView嵌套ListView只显示一行
在用列表控件做一个“更多功能”的界面的时候 <?xml version="1.0" encoding="utf-8"?> <ScrollVie ...
- 动态导入模块:__import__、importlib、动态导入的使用场景
相关内容: __import__ importlib 动态导入的使用场景 首发时间:2018-02-23 16:06 __import__: 功能: 是一个函数,可以在需要的时候动态导入模块 使用: ...
- scrapy系列(一)——Python 爬虫框架 Scrapy1.2 Windows 安装教程
scrapy作为一个成熟的爬虫框架,网上有大量的相关教程供大家选择,尤其是关于其的安装步骤更是丰富的很.在这里我想记录下自己的相关经验,希望能给大家带来点帮助. 在scrapy0.24版之前,安装sc ...