历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2018年03月01日 | Linux PC和51系列单片机串行通信设计中的应用

2018-03-01 来源:eefocus

    单片机性能稳定、价格低廉、功能强大,在智能仪器、工业装备以及日用电子消费品中得到了越来越广泛的应用。在单片机的输入输出控制中,除直接接上小键盘和 LCD显示屏等方法外,一般都通过串口和上位机PC进行通信,而后一种方法由于能实现远程控制,并且能够利用PC机强大的数据处理功能以及友好的控制界面,显得尤为重要。在一般的利用PC机对单片机进行控制的场合,都是采用Windows作为上位机的平台,其优点是界面友好,编程和操作都比较容易,缺点是稳定性太差,这对于需要连续数天或数月运行的装置来说,尤其不合适。在要求比较苛刻的场合,一般都采用UNIX工作站作为主控平台,如合肥同步辐射加速器的主控平台采用的是SUN的Solaris工作站系统,然而UNIX工作站昂贵的价格又大大限制了其使用的范围。近年来,随着Linux的迅猛发展,使其逐渐从少数人的玩具变成了主流的操作系统。Linux是遵循GPL协议的免费源代码开放软件,任何人都可以自由的从Internet上取得其源程序,也可在GPL的协议下修改其源代码以适应特定的应用,其运行在普通的PC上,性能稳定,特别适于做工业控制,因此实现Linux和单片机的串行通信非常有意义,他可以是昂贵的UNIX工作站的一种可选的替代方法。

    1 硬件原理

    目前国内使用较多的为MCS-51系列的单片机,因此选用的单片机实验对象为一片AT89C51,图1是硬件原理图,由于要实现符合RS232C的串行通信,还应该用一片ICL232CPE(MAX232)作为串行通信的电平转换电路。在实验过程中,为了查看通信是否成功,除了让单片机对上位机回送数据外,还在单片机外围扩展了几片锁存器,几个LED发光二极管和几个小键盘。串行通信是采用最简单的TxD,RxD,GND三线制连接,注意TxD和RxD 两边应该交叉连线。

   硬件原理图

    上位机是一台普通的PC机,共有2个串行口COM1,COM2,其运行RedHat8.0,实际上,如果不要求运行Gnome或KDE等图形界面,Linux对系统硬件的要求相当低。

    实验证明,此电路简单可靠,非常适用于测试串行通信。

    2 串行通信程序设计

    串行通信程序包括下位机单片机和上位机PC机的程序。单片机接收上位机传来的数据,放到片内RAM里面,再将RAM内数据同时发送到外部扩展锁存器和上位机,由此可以判断通信是否成功。此程序由汇编语言写成,初始化时波特率设置为4 800 b/s,通信方式为8-N-1。

    上位机程序的编写是关键部分,因为要对串口硬件设备进行操作,有2种方法,一是利用Linux内核自带的串口驱动程序,另外一种方法就是直接读写串口硬件端口,下面分别介绍。

    2.1 利用串口驱动程序的编程方法

    利用Linux自身的串口驱动程序进行编程,实际上就是调用驱动程序的一系列函数,完成串口通信参数的设置,数据的发送和接收。在这种方法中,Linux给每个串口都分配一个文件索引号,有相应的文件名称,实际上是将硬件设备看成一种特殊的文件,如COM1,COM2对应的文件分别为/dev/ttyS0,/dev/ttyS1,操作这2个串口实际上就是操作这2个文件,而对硬件设备文件的操作与对普通文件的操作并没有什么不同,都可以使用相同的文件I/O调用函数(open,write,read,close),不同之处在于用系统调用 open()打开串口得到相应设备的文件描述符以后,先要对其进行初始化,设置一些特定的参数,如波特率、数据位、输入输出方式等,这些参数存放在 structtermios中,函数tcsetattr()可以设置串口的structtermios,tcgetattr()可以得到串口的 struct termios。设置完通信参数后就可用read和write对串口文件进行读写了。运行程序时要注意用户是否有对要操作的串口文件进行读写的权力,可以用chmod命令进行文件权限修改。   

    初始化函数如下:

    41.gif?imageView2/2/w/550
42.gif?imageView2/2/w/550

 

    初始化以后就开始发送和接收数据,先将一个字符串发送给单片机,单片机接收到数据后,将数据返回给上位机。但需要注意的是,由于上位机速度比单片机快得多,一次不能发送过多的数据,否则极有可能使发送缓冲区溢出而丢失数据,发送过后,还需等待一段时间,使单片机将数据完全发送到上位机后,再进行读取。

    2.2 直接读写串口硬件端口的方法

    在使用这个方法的时候,必须对串口通信的硬件原理有一些了解。PC机的串口是由通用异步收发器8250UART(或16550)为核心构成的,寄存器基地址分别是0x3f8(COM1)和0x2f8(COM2),还有其他的一些用于控制的寄存器。有很多寄存器是与Modem相关的,而在使用三线制进行通信时用不到,只用关心与通信相关的寄存器,比起使用为通用功能编写的串口设备驱动程序来,直接读写相关寄存器效率更高。

     43.gif?imageView2/2/w/550

    初始化后,就可以进行数据的收发了,接受数据之前必须保证接收数据就绪,这可以通过0x2fd的D0来判断,发送数据之前必须保证发送寄存器为空,这可以通过0x2fd的D5来判断,代码如下:

     44.gif?imageView2/2/w/550



    3 结语

    实验表明,此系统采用的2种方法都完全实现了LinuxPC机与单片机之间点对点的通信,方法简单可靠,基本上在需要用到PC机与单片机串行通信的场合均可采用此种方法。随着近年来Linux在国内应用范围的日益壮大,在工业控制、数据采集等领域也必将越来越多的采用Linux,本文可以算作是一个有益的尝试。当然在实际应用中还需要考虑一些问题,比如进行出错处理的问题,可以在一个要发送的字符串后再发送一个校验和,当收到返回的校验和与发送的校验和不一致时再进行重发,再比如所采用的RS232C传输距离很短,并且抗干扰能力很差,这时需要将总线转换成差分传输的RS485/RS422。另外,稍加改进,就可实现PC机与多片51单片机的串行通信,这时由于共用一条总线,必须给每个单片机分配一个地址,然后由PC机对总线进行仲裁,只有获得总线使用权的单片机才能与上位机进行通信,这里不再赘述。

    总之,本文只是为Linux PC和单片机串行通信提供了一个典型的范例,要应用到实际的项目中去,还需要根据实际的情况具体考虑,灵活应用,最终才能形成一个可靠的基于Linux平台的系统。

    参考文献
  [1] PhICornes.Linux从入门到精通[M].童寿彬译.北京:电子工业出版社,1998.
  [2]Peter Baumann H . Linux Serial - programming - HOWTO中文版[M].曾元佑译.
  [3]万福君,潘松峰.单片微机原理系统设计与应用[M].合肥:中国科学技术大学出版社,2001.
  [4][美]安格斯生.串行端口大全[M].精英科技译.北京:中国电力出版社,2001.


推荐阅读

史海拾趣

Bharat Electronics Ltd公司的发展小趣事

Bharat Electronics Ltd(以下简称BEL)的创立可追溯到印度硅谷班加罗尔,那里不仅是科技创新的摇篮,也是BEL扎根生长的沃土。自1954年起,BEL便在飞利浦和大盾的支持下成立,初期主要生产ECC81、ECC82、ECC83、EL34等电子管,为国防事业提供关键技术支持。其成立之初便与印度国防部紧密合作,成为印度军工电子领域的领军企业,为国家的国防安全奠定了坚实的基础。

Electronic Sensor + Resistor GmbH公司的发展小趣事

随着全球对环保和可持续发展的日益关注,ESR公司积极响应国家政策和市场趋势,致力于实现绿色生产和发展。公司引进先进的环保设备和技术,减少生产过程中的废弃物和污染排放;同时加强资源回收利用和节能减排工作,降低生产成本和能耗。

此外,ESR公司还积极参与环保公益活动和社会责任项目,为推动电子行业的绿色发展和可持续发展贡献自己的力量。这种对环保的关注和投入不仅提升了公司的社会形象也增强了公司的竞争力和可持续发展能力。

芯力微(CHI Power)公司的发展小趣事

芯力微一直将产品质量视为公司的生命线。在产品研发和生产过程中,公司严格遵守国际标准,确保每一颗芯片都达到最高的品质要求。这种对品质的执着追求不仅赢得了客户的信赖,也为公司树立了良好的品牌形象。随着时间的推移,芯力微逐渐成为电子行业中备受尊敬的品牌之一。

CIRCUITCO公司的发展小趣事

随着电子行业的快速发展和变革,CIRCUITCO公司面临着前所未有的挑战和机遇。为了应对这些变革,公司不断调整战略布局,积极拓展新的业务领域。例如,公司开始关注物联网、人工智能等新兴领域的发展,加大在这些领域的研发投入。同时,公司也积极探索国际化发展的道路,通过与国外企业的合作与交流,不断提升自身的国际竞争力。通过这些举措,CIRCUITCO公司成功应对了行业变革带来的挑战,实现了持续稳健的发展。

这五个故事展示了CIRCUITCO公司在电子行业中的发展历程,涵盖了技术研发、市场拓展、生产线升级、人才引进和战略布局等方面。这些故事虽然是虚构的,但基于电子行业的一般性发展和可能的情况,能够反映出一家公司在该行业中可能经历的一些典型事件。

Electromagnetic Industries Llp公司的发展小趣事

进入21世纪,随着科技的不断进步,电子行业对产品的性能和质量要求越来越高。EMI公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。因此,公司加大了对研发的投入,引进了一批高端技术人才,并建立了完善的研发体系。经过几年的努力,EMI公司成功研发出了一系列具有自主知识产权的电磁产品,这些产品在性能和质量上均达到了国际先进水平,赢得了客户的广泛赞誉。

Goldstar Electron Co Ltd公司的发展小趣事

作为一家有社会责任感的企业,EMI公司不仅关注经济效益的增长,还积极履行社会责任。公司积极参与各种公益活动和社会救助行动,为灾区捐款捐物、支持教育事业等。同时,公司还注重环保和可持续发展,通过引进环保技术和设备、加强废弃物处理等措施降低生产过程中的环境污染。这些行动展现了EMI公司的良好企业形象和社会责任感。

问答坊 | AI 解惑

招聘高级硬件开发工程师

本公司提供良好发展机会和平台 我公司是一家主营一卡通智能管理系统、智能卡机具、热工仪表三大类产品,集研发、生产、销售、工程安装维护等全套工程实施,具有雄厚技术、销售实力的民营企业。 公司于2003年11月取得ISO9001认证;2005年8月,被杭 ...…

查看全部问答>

电子竞赛—具有语音功能的RCL测试仪

本帖最后由 paulhyde 于 2014-9-15 04:23 编辑 电子竞赛—具有语音功能的RCL测试仪  …

查看全部问答>

请教关于HID设备的读写问题~

关于访问HID设备的问题,在网上看到一篇介绍“Windows主机端与自定义USB HID设备通信详解”(http://blog.eeworld.net/kevinyujm/archive/2009/06/12/4264506.aspx)的文章,现在有几个疑问,还请各位指点: 1.相同类型的Report,其Report ID是不 ...…

查看全部问答>

wince下如何实现cpu的休眠?就100分了,都给了

现在本人在做wince的电源管理,芯片是三星2450的,wince5.0,想问问要实现cpu的休眠,不是系统休眠,要怎么做?是不在在D:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\PM\\PDD下的里面的DEFAULT或是PDA模式下改里面的platform.cpp文件。 其实2450 ...…

查看全部问答>

a/d原理?

A/D转换器是本质是什么?是将十进制的数转换成二进制么?如8位的转换器,模拟量是3V,转换D0~D7孔输出什么?…

查看全部问答>

keil中的lib文件是怎么生成的?如何使用呢?

用过的给分享下经验刚才看到了STM32F10xR.LIB这个文件前面有文章提到不过似乎没有说怎么生成…

查看全部问答>

关于A题DC的疑惑

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 那个DC模块 用…

查看全部问答>

TM4C129的板子上个图

TM4C129的板子上个图,没有光盘,资料自己去下载: http://www.ti.com.cn/tool/cn/dk-tm4c129x 细节: …

查看全部问答>