历史上的今天
返回首页

历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2020年10月30日 | 基于Linux的ARM/单片机串口通信设计

2020-10-30 来源:elecfans

  本文介绍Linux 环境下串口通信的设计方法和步骤,并介绍了ARM9 微处理器s3c2440 在Linux 下和C8051Fxxx 系列单片机进行串行通信的设计方法,给出了硬件连接和通信程序流程图。该方法可靠、实用,适用于大多数Linux ARM 和单片机串口通信的场合。

  

  数据采集系统中由于单片机侧重于控制,数据处理能力较弱,对采集的数据进行运算处理比较繁琐,如果通过串口与上位机通信,利用上位机强大的数据处理能力和友好的控制界面对数据进行处理和显示则可以提高设计效率。串口通信以其简单的硬件连接,成熟的通信协议,成为上下位机之间通信的首选。移植了Linux 操作系统的s3c2440 可以在Linux 环境下操作串口,降低了串口操作的难度,可以使开发者集中精力开发大规模的应用程序,而不必在操作底层设计上耗费时间。

 

  1 硬件连接 ”

  s3c2440 是三星公司生产的基于ARM9 核的处理器,采用3.3 V 电压供电; C8051Fxxx 系列单片机是美国CYGNAL 公司推出的与8051 兼容的高性能高速单片机,采用3.3 V 电压供电。两者供电电压相同,所以进行串行口通信时不需要进行电平转换。硬件连接采用最常用的TXD,RXD,GND 三线连接方式。注意采用交叉连接方式,即TXDRXD,RXDTXD.

 

  2 Linux 下串口通信”

  2.1 Linux 下串口设备描述

  s3c2440 上移植了Linux 2.6.32 操作系统,加载了s3c2440 的串口驱动程序,通过Linux 提供的串口操作函数和文件操作函数把对串口的操作等同于文件操作,降低了串口的操作难度,提高了效率。在程序中设备和文件都是通过文件描述符来操作的,文件描述符在Linux 内核中是一个非负整数。Linux 设备文件都存放在"/dev"目录下,串口也不例外,在/dev 中可以找到串口对应的设备文件,本文对应的串口1 的设备文件路径是"/dev /ttySAC1"。

 

  2.2 Linux 下串口通信程序设计

  串口通信需要设置一些参数,如波特率、数据位、停止位,输入输出方式等。这些参数都存在于Linux提供的termios 结构中,该结构是Linux 系统用于查询和操作各个终端的一个标准接口,定义在头文件< ter-mios. h > 中,如下所示:

  STruct termios{

  tcflag_t c_iflag; /* 输入标志* /

  tcflag_t c_oflag; /* 输出标志* /

  tcflag_t c_cflag /* 控制标志* /

  tcflag_t c_lflag /* 本地标志* /

  cc_t c_cc[NCCS]; /* 控制特性* /

  } ;

  Linux 串口通信步骤可分为以下三步,操作流程如图1 所示。

 

1

  打开串口

 

  调用open( ) 函数打开串口设备文件,若出错则返回- 1,成功则返回文件句柄。

  #define UART1 /dev /ttySAC1

  int fd;

  fd = open( "UART1",O_RDWR) /* 以可读可写方式打开串口设备* /

 

2

  设置串口属性

  

  函数tcsetattr ( ) 可以设置串口的结构属性,tcgetatt( ) 可以得到串口的结构属性。在termios 结构中,最重要的是c_cflag,用户通过对其进行赋值可以实现串口波特率、数据位、停止位、奇偶校验位等参数的设置。c_cc 数组中的两个变量VMIN 和VTIME 判断是否返回输入,c _cc[VTIME]设定字节输入时间计时器,c _cc[VMIN]设定满足读取功能的最低接收字节数。这两个变量的值要设定合理,才能保证串口的通信成功率。

  int set_attr( int fd)

  {

  struct termios newtio,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) /* 使设置的终端属性立即生效* /

  }

  

3

 串口读写,串口关闭

    

  设置完通信参数后,就可以用标准的文件读写命令read( ) 和write( ) 操作串口了。最后在退出之前,用close( ) 函数关闭串口。

  void rd_wr( )

  {

  write( fd,wbuf,10) ;

  usleep( 500000) ; /* 延时50 ms 等待下位机发送数据* /

  read( fd, rbuf,10) ;

  printf( "read string is %s n", rbuf) ;

  }

 

 

  “3 通信程序设计”

  ARM 与单片机的串口通信程序包括两方面: 一方面是作为上位机的ARM 的串口通信程序,另一方面是作为下位机的单片机的串口通信程序。在通信之前必须制定合理的通信协议以保证通信的可靠性和成功率。现约定双方通信协议如下:

  (1) 波特率为9600 bit /s,帧格式为1 - 8 - N - 1( 1 位起始位,8位数据位,无奇偶校验,1位停止位);(2) 由于上位机ARM 的速度远远高于下位机单片机的速度,所以采用上位机主动联络,下位机等待的方式。在数据传送前ARM 先发送联络信号/0xaa,单片机收到后回答一个/0xbb,表示可以发送,否则继续联络;(3) 单片机端可以有中断和查询方式收发串口数据。本文采用中断方式;(4) ARM 处理器s3c2440 采用UART1 和单片机通信,UART0 则作为s3c2440 终端控制台。

 

  3.1 上位机ARM 的通信程序设计

由于s3c2440 移植了定制和裁剪后的Linux2.6.32内核的操作系统,对串口的操作采用上述的Linux 下串口操作方法,程序流程图如图2 所示。

 

 

 

      3.2 下位机单片机的通信程序设计

  选用C8051F021 的定时器T1 作为波特率发生器,晶振采用11.0592 MHz,定时器工作在方式2,计数初值为0xfd,串口工作在串行方式1( 1 - 8 - N - 1) ,采用中断方式收发数据。程序流程图如图3 所示。

 

  Linux 下的串口通信程序在PC 机Linux RHEL5下用arm - linux - gcc 4.4.3 交叉编译工具编译通过NFS 挂载在s3c2440 上运行,单片机端的通信程序用Cygnal 的集成开发环境( IDE ) 编译并下载到C8051F021 中运行。

推荐阅读

史海拾趣

迈翔科技(COILMX)公司的发展小趣事

进入21世纪后,迈翔科技面临了来自国内外同行的激烈竞争。为了保持竞争力,公司投入大量资源进行技术研发和创新。通过不懈努力,公司成功开发出了一系列高性能的贴片功率电感和大电流电感,这些产品凭借卓越的性能和稳定的品质,迅速获得了市场的认可。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

随着技术的不断进步和产品线的不断丰富,迈翔科技开始积极拓展国内外市场。公司不仅在国内市场取得了良好的销售业绩,还成功打入了欧美、东南亚等国际市场。同时,公司也与众多知名企业建立了长期稳定的合作关系,进一步提升了品牌影响力和市场竞争力。

AEM [ American Electronic Materials]公司的发展小趣事

AEM深知人才是企业发展的核心竞争力。因此,公司一直注重人才培养和团队建设。AEM建立了完善的人才培养和激励机制,吸引和培养了一批高素质、专业化的员工队伍。同时,公司还为员工提供了良好的工作环境和发展空间,鼓励员工不断创新和进取。

在团队建设方面,AEM注重团队合作和沟通协作能力的培养。通过定期的团队建设活动和内部培训,AEM打造了一支团结、高效、富有战斗力的团队,为公司的持续发展提供了有力保障。

这五个故事从不同角度展示了AEM公司在电子行业中的发展历程和取得的成就。通过不断创新、合作与拓展,AEM已经成为电子行业中具有重要影响力的企业之一。未来,随着技术的不断进步和市场的不断变化,AEM将继续保持其领先地位,为电子行业的发展贡献更多力量。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

进入九十年代,ABC Taiwan Electronics Corp迎来了一次重要的发展机遇。公司成功研发出了一款具有创新性的电子连接器,凭借其高性能和稳定性,迅速在市场上获得了广泛认可。这一技术突破不仅为ABC带来了大量订单,也使其在电子连接器领域树立了领先地位。公司借此机会不断扩大生产规模,提升技术水平,逐渐成为了行业的佼佼者。

Furukawa Electric Co Ltd公司的发展小趣事

近年来,随着环保意识的日益增强,ABC Taiwan Electronics Corp积极响应绿色生产的号召。公司引入了环保材料和节能技术,降低了生产过程中的能耗和排放。同时,公司还加强了废弃物的处理和回收利用,实现了资源的循环利用。此外,ABC还积极参与社会公益活动,支持教育事业和环保事业,履行了企业的社会责任。

这五个故事展示了ABC Taiwan Electronics Corp从创业初期的艰难起步到逐步成长为国际知名电子零件供应商的发展历程。通过技术突破、国际化战略、产业升级和绿色生产等方面的努力,ABC不断应对市场的变化和挑战,实现了稳健的发展。

Fullywell Semiconductor Co Ltd公司的发展小趣事

随着全球对环境保护和可持续发展的重视,Fullywell也积极响应这一趋势,开始实施绿色转型战略。公司投入大量资源研发环保型半导体材料和生产工艺,致力于降低生产过程中的能耗和排放。同时,Fullywell还加强了与产业链上下游企业的合作,共同推动绿色供应链的建设。这些举措不仅提升了公司的社会责任感,也为公司的可持续发展奠定了坚实的基础。通过绿色转型,Fullywell在行业内树立了良好的企业形象,吸引了更多关注环保和可持续发展的客户和合作伙伴。

问答坊 | AI 解惑

USB芯片HOST电路及PCB设计的注意事项

USB芯片HOST电路及PCB设计的注意事项…

查看全部问答>

51单片机的引脚

引脚功能: MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图: l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 l P2.0~P2.7 P2口8位双向口线( ...…

查看全部问答>

数字存储示波器的研究与设计

简单的介绍了下数字存储示波器的原理方便的基础知识…

查看全部问答>

PSpice_-_Model_Editor_系列介紹_(II).

PSpice_-_Model_Editor_系列介紹_(II).…

查看全部问答>

不知道自己是不是要变成老油条

最近不知道怎么了,刚入社时,平均50多见/班次,个每天一个班下来,心情还是比较愉快!上班两年多来,故障率飞流直下三千尺,降到最多20件/班次,可是总是觉得很累!…

查看全部问答>

Sql Mobil打开错误

我在pc上创建了一个sql mobile的数据库,data.sdf,我用activesync把它拷进pda里面,但是打开的时候却出现错误; Error: 0x80004005 E_FAIL Native Error:  (25033) Description: Unspecified error Interface defining error: IID_I ...…

查看全部问答>

9263WINCE5.0下SD卡驱动的问题

9263板跑WINCE5,使用SD卡时,时常从串口输出: WaitForSingleObject == WAIT_TIMEOUT (1000) StatusMask = 0x20 status 0xc0c5 这串数据重复输出,并且SD卡读写速度变得非常之慢。 查程序发现是PLATFOM\\COMMON\\SRC\\ARM\\ATMEL\\AT91SAM926 ...…

查看全部问答>

09嵌入式系统设计师考试上午试题第7题求解答

对计算机磁盘工作影响最大的因素是      (7)A.温度            B.湿度            C.噪声& ...…

查看全部问答>