原创 开始学串口

2006-9-25 22:44 6727 8 12 分类: MCU/ 嵌入式
串口通信基本原理

   串口在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。


   串口通信的优点是开发简单,在传输数据量不大、要求速度不高而传输距离较大的通信场合得到广泛应用,,在调试程序中被广泛应用。


    在VxWorks中,将I/O系统设计成为任何类型的设备提供一个简单、统一、独立于设备的接口,任何对于串口的操作都可以视为对一个文件的操作,而不必了解串口设备或程序驱动实现的细节。在串口通信软件的设计中,当串口初始化完成后,在使用之前利用open()打开相应串口,然后进行配置。


    VxWorks提供终端和伪终端设备驱动。Tty驱动针对实终端;pty针对仿真终端的程序。Tty设备有两种操作模式:raw模式和line模式。在raw模式下,每个刚从设备输入的字符对读者都是有效的;在line模式下所有输入字符被存储,直到NEWLINE字符输入。设备选项字使用带FIOSETOPTIONS 功能的ioctl()程序来设置。配置完成后,依据串口打开时的读写标志,调用函数write()、read()对串口进行只读操作、只写操作或同时进行读写操作。为提高数据接收的实时性,可采用中断方式,利用VxWorks提供的select函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性。

PARTNER CONTENT

文章评论7条评论)

登录后参与讨论

用户1124127 2007-5-9 17:46

学习学习

用户1053025 2006-9-26 14:00

呵呵,好认真的博主

shenyandetongxing_551209819 2006-9-25 23:53

vxowrks应用串口在程序中加入下列头文件

#include <vxWorks.h>

#include "strLib.h"

#include <string.h>

#include <sioLib.h>

#include <ioLib.h>

#include <stdio.h>

#include <ioctl.h>

#include <selectLib.h>

#include "types/vxTypesOld.h"

打开串口

int open_com1(void) //打开串口1函数

{    int sfd;//串口设备文件描述符

sfd =open(”/tyCo/0”,0_RDWR,0);//打开串口并返回串口设备文件描述符

if(sfd ==ERROR)  //如果不能打开串口1则打印出错信息

printf("You can’t open port com1 !");

 } 

 配置串口

int config_com1(void)                               //串口1配置函数

{ ioctl(sfd,FIOSETOPTIONS,OPT_LINE);  //设置串口工作模式为行模式:LINE_MODE

ioctl(sfd,FIOBAUDRATE,9600);        //设置串口波特率为9600bps

ioctl(sfd,FIOFLUSH,0);                                 //清空输入输出缓冲

ioctl(sfd,SIO_HW_OPTS_SET,CS8|STOPB|PARENB|PARODD);

//设置 8 位数据位,2位停止位,带校验位,奇校验

}

 串口接收数据

int accept _com1(void) //从串口1接收数据函数

{  while(1)

   {  char * accept _buf;

FD_ZERO(&fds_data);//位码置零 

FD_SET(sfd,&fds_data);//初始化位码

width=sfd +1; 

//任务阻塞等待读串口准备完毕;

if(select(width,&fds_data,NULL,NULL,NULL)==ERROR)

  return(ERROR);

read(sfd, accept _buf,sizeof(accept _buf));  //从串口读字符

printf("accept message is : %s \n\n", accept _buf);   //输出接收到的信息

 }

}

串口发送数据

int send_com1(void) //向串口1发送数据函数

   {              char *send_buf =" Data had accept!";  //待发送数据

              //任务阻塞等待写串口准备完毕

if(select(width,NULL,&data_fds,NULL,NULL==ERROR)

   return(ERROR) ;

if(FD_ISSET(sfd,&fds_data))  //检查串口准备好就向串口写数据

write(sfd,send_buf,sizeof(send_buf)) ;

}

关闭串口

close(sfd);

shenyandetongxing_551209819 2006-9-25 23:35

如果在config.h和组件里配置好串口后,客直接用sysOutByte(0x3F8
,数据)写。但是这种方法是不可靠的。我个人就是我们为什么驱邪驱动的原因之一。

shenyandetongxing_551209819 2006-9-25 23:20

再深入的了解一下串口的初始化,这里是串口最简单的初始化,如果以后写串口驱动可以从这里入手
#include "vxWorks.h"
#include "tffs/flsocket.h"
#include "tffs/pcic.h"

#define COM1_PORT   0x3F8

void com1_init(void)
 {
  int data;
    sysOutByte(COM1_PORT+3,0x80);   /* DLAB=1, set baud*/

sysOutByte(COM1_PORT,0x0c);     /* 波特率 0x30:2400 0x18:4800 0x0c:9600*/
   
sysOutByte(COM1_PORT+2,0x87);
sysOutByte(COM1_PORT+2,0x81);

sysOutByte(COM1_PORT+1,0x00);

sysOutByte(COM1_PORT+3,0x03);   /*data length: 8 , stop bits: 1*/

sysOutByte(COM1_PORT+4,0x0b);

/*outportb(COM1_PORT+1,0x01);   // receive interrupt enable*/
sysInByte(COM1_PORT);
 }
再加上些中断处理函数就是完整的驱动了。

shenyandetongxing_551209819 2006-9-25 23:13

在串口满足实时行要求时,就要用非阻塞模式(在读写串口时如果不能读写任务也不会被阻塞)。可以设置超时,将串口的文件描述符加入到select中取查询
ioctl(fd,FIONREAD,(int)&iNum);
if(iNum>0){read();...}

shenyandetongxing_551209819 2006-9-25 23:04

刚才说的那些也许还有很多不清楚的,详细可以看安装目录下的doc文件夹里面有所有vxworks的函数,还有一些解释。(用windows自带的搜索查找你可能用到的函数就会有好多新的发现)但是这些解释也不能满足我们。那就让我们慢慢的来积累吧。
相关推荐阅读
shenyandetongxing_551209819 2010-02-25 21:34
MyEclipse 建立第一个工程
1.打开MyEclipse--新建个工程File--New--Project--WebProject 2.在ProjectName中输入hello--Finish 3.然后为工程添加struts框架,...
shenyandetongxing_551209819 2010-02-06 22:42
人力资源管理软件(技术储备)
JAVA的SSH开发框架Struts、Spring、Hibernate在各层的作用1、Struts 负责 web层ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理...
shenyandetongxing_551209819 2010-02-06 02:51
个人资源管理软件(需求)
先提提需求吧,这是重中之重,这不是简单就能完成的,需要不断的修改和完善。既然是个人资源管理就要首先搞清楚个人资源包括哪些部分:1  人脉资源,也就是我们常说的关系,人是社会型动物就不可能生活在真空里,...
shenyandetongxing_551209819 2010-02-06 02:33
HR软件设计开始(关注个人资源管理与分析)
最近对HR很感兴趣,上网搜了一下,HR的软件也不少,其中风头正劲的用友公司做的挺多,但是看了看都是针对企业级的。但自己平常的工作和进步帮助不大。想整一个关于人力资源、人际关系进行总结、分析的软件,让自...
shenyandetongxing_551209819 2010-02-06 02:30
对HR和B/S模式的东西感兴趣
最近对HR很感兴趣,上网搜了一下,HR的软件也不少,其中风头正劲的用友公司做的挺多,但是看了看都是针对企业级的。但自己平常的工作和进步帮助不大。想整一个关于人力资源、人际关系进行总结、分析的软件,让自...
shenyandetongxing_551209819 2008-10-01 16:18
由于工作原因,改行!!
已经好久没有上我的博客了,还有很多朋友支持我,很欣慰:)现在由于工作原因很长一段时间内将挥泪告别嵌入式。现在如果有做PKI或PMI的跟我一起交流啊:)...
我要评论
7
8
关闭 站长推荐上一条 /3 下一条