打印
[STM32F1]

[转] STM32 网口与串口(232或485)通讯源码与学习笔记

[复制链接]
2376|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ren0zhe|  楼主 | 2014-5-21 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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开发板网络应用篇之网口与串口(232485)通讯
                            (TCP服务器模式)


硬件:
1、          电脑一台、
2、          USB转串口线一根
3、          USBRS485转换器一个
4、          科星F107开发板一块
软件:
1、          串口调试助手
2、          TCP调试助手
3、          IAR5.4或者MDK4.2
4、          开发板程序:科星F107开发板网络应用篇之网口与串口(232485)通讯(TCP服务器模式).rar
****************************************************************************************************************************************************************
本程序实现了网口与串口之间的通信,其实就是网口转串口,串口转网口的例程。是由科星原有例程tcp通信修改而来,在其基础上加入了中断方式的串口输入输出程序(也是科星的原有例程),在学习本例程之前,基础不是很好的朋友,希望先看下两个基本的例程,熟悉了那两个例程之后,这个例程就很容易理解了。
在串口中断判断一帧数据接收完成这里,还是和原来例程保持一致,使用定时器中断TIM2来做计时,当收到一个字节数据之后开始计时,在设定的时间内收到新数据则计时器清零,重新计时,直到当收到一个字节数据之后,在设定的时间内没有收到新数据则认为一帧数据的接收完成。
PS:程序中没有加入接收到的数据长度超过接收缓冲区时的操作,希望大家注意!超过时,怎么办?我相信大家都可以搞定,接收收据时有一个记录接收收据长度的变量,咱们去判断这个变量是否超过了,咱们设定的缓冲区的长度就好了,一个if就搞定,缓冲区接收满,发送一次,记录接收长度的量清零,就好了,相信大家都很容易实现,这里为了程序简单就没做太多完善性的工作,怕程序写的太大,不容易看懂,入门以后,那些对你们都不算事了。

前面两段话说的有点多,可能一些朋友没理解,下面我用小学数学给大家解释一下:
假设:
1、  接收数据data1的时间为t1
2、  接收数据data1的下一个字节数据data2的时间为t2
3、  咱们设定的一个固定的时间段为 t
t2-t1>t时,认为data2data1没啥关系,data2是下一帧数据了
t2-t1<t时,认为data2data1有关系,data1data2是在同一帧数据里面

这个只是解释,实际不是这么操作的,实际的操作如下:
1、  接收到数据data1,定时器开始计时
2、  当定时器未触发中断,也就是计时的时间还没到咱们设定的一个固定的时间,这时data2来了,就认为data2data1是一帧数据,然后计时清零,重新计时,重复这个操作
3、  比如接收完data12之后,计时达到咱们设定的时间,可恶的data13还没来,就认为data13不是一帧数据,然后data1data2data12这一帧数据就认为接收完成了
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接口通讯了,如下图



         好吧,就这样了,通讯基本都讲完了,其实也没讲什么,主要就是告诉大家如何在现有的基础例程上面添加新的功能,多谢大家!


沙发
mmuuss586| | 2014-5-21 17:04 | 只看该作者
谢谢分享

使用特权

评论回复
板凳
1992dongzi| | 2014-6-20 11:08 | 只看该作者
网口转串口

使用特权

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

本版积分规则

个人签名:科星F107&F407开发板官网  http://corxstm32.taobao.com/      QQ交流群: 144728423

12

主题

255

帖子

5

粉丝