本帖最后由 ren0zhe 于 2014-5-21 16:43 编辑
转自 黑鸟论坛
地址:http://www.heybird.net/read.php?tid=24&fid=4&page=1
*****************************************************************************************************
由于帖子长度限制,**内容节选一部分,全文以及 笔记和源码 请看原文链接
科星F107开发板网络应用篇之网口与串口(232和485)通讯(TCP服务器模式)学习笔记.pd.pdf
(990.7 KB)
科星F107开发板网络应用篇之网口与串口(232和485)通讯 (TCP服务器模式)
硬件:
1、 电脑一台、
2、 USB转串口线一根
3、 USB转RS485转换器一个
4、 科星F107开发板一块
软件:
1、 串口调试助手
2、 TCP调试助手
3、 IAR5.4或者MDK4.24、 开发板程序:科星F107开发板网络应用篇之网口与串口(232和485)通讯(TCP服务器模式).rar
****************************************************************************************************************************************************************
本程序实现了网口与串口之间的通信,其实就是网口转串口,串口转网口的例程。是由科星原有例程tcp通信修改而来,在其基础上加入了中断方式的串口输入输出程序(也是科星的原有例程),在学习本例程之前,基础不是很好的朋友,希望先看下两个基本的例程,熟悉了那两个例程之后,这个例程就很容易理解了。
在串口中断判断一帧数据接收完成这里,还是和原来例程保持一致,使用定时器中断TIM2来做计时,当收到一个字节数据之后开始计时,在设定的时间内收到新数据则计时器清零,重新计时,直到当收到一个字节数据之后,在设定的时间内没有收到新数据则认为一帧数据的接收完成。
PS:程序中没有加入接收到的数据长度超过接收缓冲区时的操作,希望大家注意!超过时,怎么办?我相信大家都可以搞定,接收收据时有一个记录接收收据长度的变量,咱们去判断这个变量是否超过了,咱们设定的缓冲区的长度就好了,一个if就搞定,缓冲区接收满,发送一次,记录接收长度的量清零,就好了,相信大家都很容易实现,这里为了程序简单就没做太多完善性的工作,怕程序写的太大,不容易看懂,入门以后,那些对你们都不算事了。
前面两段话说的有点多,可能一些朋友没理解,下面我用小学数学给大家解释一下:
假设:
1、 接收数据data1的时间为t1
2、 接收数据data1的下一个字节数据data2的时间为t2
3、 咱们设定的一个固定的时间段为 t
当t2-t1>t时,认为data2和data1没啥关系,data2是下一帧数据了
当t2-t1<t时,认为data2和data1有关系,data1和data2是在同一帧数据里面
这个只是解释,实际不是这么操作的,实际的操作如下:
1、 接收到数据data1,定时器开始计时
2、 当定时器未触发中断,也就是计时的时间还没到咱们设定的一个固定的时间,这时data2来了,就认为data2和data1是一帧数据,然后计时清零,重新计时,重复这个操作
3、 比如接收完data12之后,计时达到咱们设定的时间,可恶的data13还没来,就认为data13不是一帧数据,然后data1和data2到data12这一帧数据就认为接收完成了
4、 这里咱们最好看一下,接收的长度,这里是12,但是如果咱们接收缓冲区设定的是10不就坏了么,数组溢出了,数组溢出后果很严重啊。所以,这里判断一下吧,我懒得加了,O(∩_∩)O哈哈~
说了这么多,还是不理解的话,那就问度娘吧,我无能为力了。
变量flag_rev_finish 就是之前说的,串口接收一帧数据完成的标识,是在定时器中断中置1的,咱们看下定制器中断串口中断的操作:
这里注意485的控制引脚,发送前置高,发送完成置地,处于接收状态。
然后就是看一下485转网口了,这里和232转网口程序一模一样,不再赘述。
很快就讲完了,有前面栽树,后面果然好乘凉!(*^__^*) 嘻嘻……
下面演示一下:
1、 打开串口调试助手,连接好232串口
2、 打开串口调试助手,连接好485串口
3、 打开tcp调试助手,连接好与232串口通讯的端口号23,如下图
4、断开tcp调试助手的连接,连接好与232串口通讯的端口号24,就可以与RS485接口通讯了,如下图
好吧,就这样了,通讯基本都讲完了,其实也没讲什么,主要就是告诉大家如何在现有的基础例程上面添加新的功能,多谢大家!
|