Linux下ARM和单片机的串口通信设计

发布者:快乐舞蹈最新更新时间:2013-01-04 来源: 维库开发网关键字:Linux  ARM  单片机  串口通信 手机看文章 扫描二维码
随时随地手机看文章
  0 引言

  数据采集系统中由于单片机侧重于控制,数据处理能力较弱,对采集的数据进行运算处理比较繁琐,如果通过串口与上位机通信,利用上位机强大的数据处理能力和友好的控制界面对数据进行处理和显示则可以提高设计效率。串口通信以其简单的硬件连接,成熟的通信协议,成为上下位机之间通信的首选。移植了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 所示。

操作流程

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

  #define UART1 /dev /ttySAC1int fd;fd = open( “UART1”,O_RDWR) /* 以可读可写方式打开串口设备* /

  第二步: 设置串口属性函数tcsetattr ( ) 可以设置串口的结构属性,tcgetatt( ) 可以得到串口的结构属性。在termios 结构中,? &=s ?最重要的是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) /* 使设置的终端属性立即生效* /}

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

  void rd_wr( ){write( fd,wbuf,10) ;usleep( 500000) ; /* 延时50 ms 等待下位机发送数据* /read( fd, rbuf,10) ;printf( “read string is %s ”, 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 所示。[page]

程序流程图

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

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

通信程序设计

  4 结束语

  随着近年来嵌入式Linux 在国内的应用范围日益壮大,基于ARM 平台的嵌入式Linux 设备也将会越来越多地用在数据采集中作为上位机对数据进行处理、显示、存储、发送。本文所介绍方案适用于大多数场合Linux 下ARM 和单片机的串口通信设计,设计人员只需根据自己的实际需要修改或重新制定通信协议即可。另外需要注意的是由于上位机ARM 的速度比单片机快很多,所以一次不能发送过多的数据,否则极有可能使发送缓冲区溢出而出现数据丢失的现象,开发人员要根据通信双方设备的状况选择合适的帧长度,以达到最佳的传输状态。

关键字:Linux  ARM  单片机  串口通信 引用地址:Linux下ARM和单片机的串口通信设计

上一篇:基于ARM的低功耗语音去噪系统设计
下一篇:基于ARM7的图像数据采集系统的研究与应用

推荐阅读最新更新时间:2024-03-16 13:15

构建嵌入式linux平台下的用户应用
1.引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次,如图1-1所示: (1)引导程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 (2)Linux 内核。针对于嵌入式板子的定制内核以及内核的启动参数。 (3)文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为根文件系统 (4)用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows
[单片机]
构建嵌入式<font color='red'>linux</font>平台下的用户应用
意法半导体发布全新STM32超值系列微控制器
意法半导体(STMicroelectronics,简称ST)发布最新的STM32F030超值系列微控制器。批量订货最低价仅为0.32美元,STM32F030是低预算项目的理想选择,同时还让设计人员有机会使用型号齐全且软硬件兼容的32位微控制器产品组合,从而提升应用性能,扩大产品系列。 全新STM32F030超值系列基于48MHz的ARM® Cortex™-M0处理器内核。与同类竞争产品不同,STM32F030虽然只有8位微控制器的价格,但性能和特性并没有受到任何影响,如没有降低内核速度,同样保持丰富的外设数量和种类。 意法半导体微控制器产品部总经理Michel Buffa表示:“STM32F0超值型让32位微控制器更加平易
[单片机]
单片机产生随机数的方法
随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个随机数表,然后进行取数据。也是可以的。 KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为 rand函数, random函数, randomize 函数;但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,
[单片机]
<font color='red'>单片机</font>产生随机数的方法
痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)
  第四节课里,痞子衡给大家介绍了第一种output文件-relocatable文件,本文继续给大家讲project生成的第二种output文件-map文件,map文件记录了很多重要的信息,这对于后续调试有很大帮助。   文件关系:链接文件(.icf) + 工程文件(.ewp) + 可重定向文件(.o/.a) - 映射文件(.map)   痞子衡在第四节课可重定向文件(.o/.a)里分析object文件里的symbol list时讲到由于object文件并没有经过链接,所以所有symbol地址信息是无效的(待分配的),而map文件就是所有relocatable文件经过链接器统一链接后生成的记录链接信息的文件,map文件里可
[单片机]
单片机在现代电子系统的地位综述
摘要 :现代电子技术发展的速度越来越快,其基本核心技术为嵌入式计算机系统,而作为嵌入式系统之一的单片机,以其明显的典型性、广泛性、普及性的特点,在现代电子系统发展历程中占据着重要的地位。本文就针对电子技术中单片机的应用进行综述性讨论,介绍其基本组成与特点,对其应用进行分析,最后提出其未来的发展方向。    一、单片机的特点与基本组成   与其它的嵌入式系统相比,单片机的体积小,但是集成度高,具备较高的可靠性与控制功能;功耗低且采用低电压,因此对便携式产品的制造与生产十分有利;具备较好的扩展性与优异的性能比,其应用范围十分广泛,包括办公室自动化设备、实时过程的控制、各类仪器仪表、医疗领域相关设备、汽车电子产品以及计算机网络通信技
[模拟电子]
单片机技术中的软硬件防干扰方法
  单片机技术中防止干扰,保安全可靠运行也是一个很重要的问题。本文从电磁辐射、电源干扰和信号通道干扰三个主要干扰源入手,介绍了采用硬件和软件的防干扰措施,对于从事单片机应用设计者有重要参考价值。   1 引言   随着单片机技术应用发展,在应用过程中,如何防止外界的干扰,确保单片机安全可靠运行,是一个很重要的问题。我们在多项测控项目的实践中体会到,干扰源主要来自三个方面。一是空间场干扰,通过电磁辐射富入系统:二是电源干扰,它直接侵害系统:三是信号通道干扰,通过与单片机相连的前、后向通道进入系统。一般来说,空间场干扰在强度上远小于其他两个干扰源产生的干扰,且容易对付。只要采取良好的屏蔽、正确的接地及恰当的高频滤波就可以得到满意解决
[单片机]
<font color='red'>单片机</font>技术中的软硬件防干扰方法
微控制器管理电源排序和控制
随着双电压体系结构和多处理器板的迅速普及,连简单的应用都可能需要几条处理器电压干线。由于每个处理器都有自己的加电和断电要求,电源干线排序和控制就变成一项复杂的任务。电源设计人员所面临的挑战就是要考虑每个处理器的定时和电压要求,并将这些要求吸纳到总系统中,以确保最终设计满足所有处理器的要求。   给处理器供电不当,会导致种种问题,有的不大严重,如MTBF(平均无故障间隔时间)缩短,有的则是灾难性的,如闭锁。鉴于可用微处理器的多样性和你在提出电源排序和控制方案时预计到的应用挑战,使用微控制器是可取的,因为它具有可编程能力。MSP430非常适合这种应用 (图 1)。这种高性能、低成本的16位RISC处理器具有几个高质量的模拟外设和一
[单片机]
<font color='red'>微控制器</font>管理电源排序和控制
采用单片机C8051F310实现光伏电池MPPT控制器的设计
1 引 言 能源是人类社会存在和发展的重要物质基础,随着社会的发展,能源日渐减少,并伴随着环境问题日益突出,使得越来越多的国家把目光投向可再生能源。太阳能作为重要能源之一,以其永不枯竭,无污染等优点,正得到迅速的发展。但是太阳能电池在其工作过程中,由于受环境(主要包括日照强度,温度)的影响,其输出具有明显的非线性特性,造成电池与负载之间的不匹配,从而不能使太阳能最大效率地转化为电能输出。为了实现光伏发电系统的功率输出最大化,就需要对光伏电池的最大功率点进行跟踪控制,即MPPT(MaximumPower Point Tracking)控制。 在光伏控制技术上,MPPT控制方法有很多种,目前市场上常用的是使用CVT(恒定电压跟踪)
[单片机]
采用<font color='red'>单片机</font>C8051F310实现光伏电池MPPT控制器的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved