“亚冠直播在线”Linux下ARM和单片机的串口通信设计
点击量: 发布时间:2021-08-01
本文摘要:概要:讲解Linux环境下串口通信的设计方法和步骤,并讲解了ARM9微处理器s3c2440在Linux下和C8051Fxxx系列单片机展开串行通信的设计方法,得出了硬件相连和通信程序流程图。

概要:讲解Linux环境下串口通信的设计方法和步骤,并讲解了ARM9微处理器s3c2440在Linux下和C8051Fxxx系列单片机展开串行通信的设计方法,得出了硬件相连和通信程序流程图。该方法可信、简单,限于于大多数LinuxARM和单片机串口通信的场合。

  关键词:Linux;ARM;单片机;串口通信  0章节  数据采集系统中由于单片机侧重于掌控,数据处理能力较强,对收集的数据展开运算处置较为繁复,如果通过串口与上位机通信,利用上位机强劲的数据处理能力和友好关系的掌控界面临数据展开处置和表明则可以提升设计效率。串口通信以其非常简单的硬件相连,成熟期的通信协议,沦为上下位机之间通信的选用。

重制了Linux操作系统的s3c2440可以在Linux环境下操作者串口,减少了串口操作者的可玩性,可以使开发者集中精力研发大规模的应用程序,而不用在操作者底层设计上花费时间。  1硬件相连  s3c2440是三星公司生产的基于ARM9核的处理器,使用3.3V电压供电;C8051Fxxx系列单片机是美国CYGNAL公司发售的与8051相容的高性能高速单片机,使用3.3V电压供电。两者供电电压完全相同,所以展开串行口通信时不必须展开电平切换。硬件相连使用最常用的TXD,RXD,GND三线相连方式。

亚冠直播

留意使用交叉相连方式,即TXDRXD,RXDTXD.  2Linux下串口通信  2.1Linux下串口设备描述  s3c2440上重制了Linux2.6.32操作系统,读取了s3c2440的串口驱动程序,通过Linux获取的串口操作者函数和文件操作者函数把对串口的操作者等同于文件操作者,减少了串口的操作者可玩性,提升了效率。在程序中设备和文件都是通过文件描述符来操作者的,文件描述符在Linux内核中是一个非负整数。

Linux设备文件都存放在/dev目录下,串口也不值得注意,在/dev中可以寻找串口对应的设备文件,本文对应的串口1的设备文件路径是/dev/ttySAC1.  2.2Linux下串口通信程序设计  串口通信必须设置一些参数,如波特率、数据位、暂停位,输入输出方式等。这些参数都不存在于Linux获取的termios结构中,该结构是Linux系统用作查找和操作者各个终端的一个标准接口,定义在头文件ter-mios.h中,如下右图:  STructtermios{tcflag_tc_iflag;/*输出标志*/tcflag_tc_oflag;/*输入标志*/tcflag_tc_cflag/*掌控标志*/tcflag_tc_lflag/*本地标志*/cc_tc_cc[NCCS];/*掌控特性*/};Linux串口通信步骤可分成以下三步,操作者流程如图1右图。▲图1  第一步:关上串口调用open()函数关上串口设备文件,若错误则回到-1,顺利则回到文件句柄。

  #defineUART1/dev/ttySAC1intfd;fd=open(UART1,O_RDWR)/*以格式化可用方式关上串口设备*/  第二步:设置串口属性函数tcsetattr()可以设置串口的结构属性,tcgetatt()可以获得串口的结构属性。在termios结构中,?=s?最重要的是c_cflag,用户通过对其展开赋值可以构建串口波特率、数据位、暂停位、奇偶校验位等参数的设置。c_cc数组中的两个变量VMIN和VTIME辨别否回到输出,c_cc[VTIME]原作字节输出时间计时器,c_cc[VMIN]原作符合加载功能的低于接管字节数。

这两个变量的值要原作合理,才能确保串口的通信成功率。  intset_attr(intfd){structtermiosnewtio,oldtio;tcgetattr(fd,oldtio);cfsetispeed(newtio,B9600);/*设置读书波特率为9600*/cfsetospeed(newtio,B9600);/*设置写出波特率为9600*/memset(newtio,0,sizeof(newtio));newtio.c_cflag=CS8|CREAD;/*设置数据位为8位并且使能接管*/newtio.c_cflag=~PARENB;/*不展开奇偶校验*/newtio.c_cflag=~CSTOPB;/*1位暂停位*/newtio.c_cc[VMIN]=1;/*当接管到一个字节数据就加载*/newtio.c_cc[VTIME]=0;/*不用于计时器*/tcflush(fd,TCIOFLUSH);/*刷清输入输出缓冲区*/tcsetattr(fd,TCSANOW,newtio)/*使设置的终端属性立刻生效*/}  第三步:串口读取,串口重开设置完了通信参数后,就可以用标准的文件读取命令read()和write()操作者串口了。最后在解散之前,用close()函数重开串口。


本文关键词:亚冠直播,亚冠直播在线

本文来源:亚冠直播-www.aboutfacebootcamp.com