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

发布者:CMOS最新更新时间:2013-12-30 来源: 21ic 关键字: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 串口通信步骤可分为以下三步

第一步: 打开串口调用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 下串口操作方法。

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 和单片机的串口通信设计

上一篇:基于RT-Thread和STM32的数码相框的设计方案
下一篇:基于CAN总线多轴运动控制器技术的研究

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

51单片机串口通信软件程序集
串口通信的单片机程序 beep bit p3.7 ;蜂鸣器定义 org 00h jmp main org 23h ;串行中断入口地址 jmp com_int ;串行中断服务程序 ;*********** 主程序开始 ******************* org 30h main: mov sp,#30h ;设置堆栈 lcall rest ;初始化 lcall comm ;串口初始化 jmp $ ;原地等待 ; ******
[单片机]
ARM 之FIQ(快速中断) IRQ(中断)
IRQ,FIQ定义: 这就是个普通中断,当我们程序定义了该中断,并且在程序运行的时候产生了IRQ中断,则此时的芯片是这样运行的------中断处理器吧利用IRQ请求线来高速ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。 那么问题来啦,为何要有这两个中断,或者说为何分成这两种中断,?、原因很简单,速度不同,FIQ 也就是快速中断的速度快,那么问题又来了,为何就FIQ速度快??? 原因:1:ARM的FIQ模式提供了更多的banked寄存器,r8到r14还
[单片机]
五大车载操作(VOS)系统知多少
车载操作系统(Automo TI ve Opera TI ng System,简称AOS)是管理和控制车载硬件与车载软件资源的程序系统,是直接运行在AB上的最基本的系统软件,任何上层软件,HMI,数据连接都必须在操作系统的支持下才能运行。   车载操作系统是用户和车载硬件的接口,同时也是车载硬件和上层软件的接口。车机操作系统的功能包括管理车载系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为上层软件提供支持,让车机系统的资源,以及接收到数据、信号、音频、视频最大限度地发挥作用,提供各种形式的用户界面(UI),使驾驶员有一个好的驾驶环境,并有效的提供辅助驾驶、半自动驾驶、甚至自动驾驶。   实际上,驾驶员是不需要了解操作系统
[汽车电子]
五大车载操作(VOS)系统知多少
ARM - STM32 使用11.0592MHz晶振
这里探究了以下stm32 外部时钟的用法。 这里用的是stm32f103rbt6,usart2,外部晶振11.0592Mhz。 先看时钟树吧 这是上图的配置: void RCC_Init(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振(HSE) HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE起振 if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 { R
[单片机]
<font color='red'>ARM</font> - STM32 使用11.0592MHz晶振
基于RT-Linux的嵌入式PLC设计及实现
  引言   在数控机床中, 通常用可编程控制器( PLC) 对机床开关量信号进行控制。PLC可靠性高, 使用方便。但在大多数数控机床, 特别是经济型数控机床中, 要求的输入输出点数并不多, 通常在60点以下,因此, 为了降低数控机床成本, 在基于工业PC机的数控系统中, 可以采用开关量I/O板加外接继电器,配合主机的软件对机床开关进行控制。但如果PC机采用单任务操作系统(如DOS) , 数控系统的所有任务运行都置于一个总体的消息循环中, 软件的模块化和可维护性较差, 系统故障的风险相对集中, 而且不能充分利用PC机系统资源。而采用非实时多任务操作系统(如Windows) 时, Win32 API的设计没有考虑到实时环境的开发用途
[嵌入式]
高通推出面向基于Arm的Windows 10 PC的全新骁龙开发套件
高通推出面向基于Arm的Windows 10 PC的全新骁龙开发套件, 加大对开发者的支持力度 高通技术公司和微软联合推出具有成本效益的开发套件,进一步加大对软件和应用开发者的支持 2021年5月24日,圣迭戈——高通技术公司今日宣布推出高通骁龙™开发套件,旨在面向骁龙计算平台日益增长的设备生态,加大针对独立软件开发商和应用开发者在应用测试和应用优化方面的支持力度。该开发套件是高通技术公司联合微软利用基于Arm的Windows 10系统打造的套件资源,让开发者可以低成本地对他们的解决方案进行认证和验证,从而确保其在搭载骁龙平台的Windows 10 PC上能够提供出色的用户体验,满足人们工作、学习和协作的需求。 高通
[家用电子]
高通推出面向基于<font color='red'>Arm</font>的Windows 10 PC的全新骁龙开发套件
ARM Mali-G71 详细解读
Mali-G71图形处理器(GPU)是Mali 高性能GPU家族最新推出的顶级产品。Mali-G71基于全新Bifrost架构,代表了高端移动图像处理性能的最高水平,进一步奠定了Mali在竞争激烈GPU市场的主导地位。 Mali-G71研发期间充分参考了包括虚拟现实(VR)、增强现实(AR)、以及3D游戏在内等高端移动应用核心需求,这些应用场景将继续快速发展;同时,包括Vulkan及OpenCL 2.0在内的现代API也是研发要点。 贪吃蛇 的时代早已成为历史,移动游戏行业的飞速发展令人目不暇接,即便是高端设备也越来越无法满足下一代移动游戏的要求。针对这一问题,Mali-G71着眼于下一代移动图像处理技术,让搭载Ma
[嵌入式]
<font color='red'>ARM</font> Mali-G71 详细解读
基于ARM和GPRS的无线传输与接收
引言 近年来,无线通信技术得到广泛的应用,GPRS (General Packet Radio System)通用无线分组网络就是一种比较流行的无线通信网络。 GPRS网络具有覆盖范围广、数据传输速度快、通信质量高、永远在线和可按流量计费等优点。 本传输方案采用的是西门子GPRS无线通信模块MC35i,该模块支持标准的AT指令集,但并没有嵌入TCP/IP协议,不过系统采用的linux操作系统里面带有完整的TCP/IP协议栈以及PPP协议,它不但减少了软件系统的复杂度,也增加了系统的稳定性。这样,本方案就可用于不同的场合,只要设计相应的上层软件处理系统即可。 1 系统总体设计 该系统主要由GPRS通讯模块和控制模块两部
[单片机]
基于<font color='red'>ARM</font>和GPRS的无线传输与接收
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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