当前位置:  技术问答>linux和unix

串口通讯问题,急。。。。。

    来源: 互联网  发布时间:2015-04-06

    本文导语:  现在急需用串口跟设备进行通讯。在网上找到一段初始化串口的程序,并自己加入了读取的部分。如下 nclude  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  main() { int fd; s...

现在急需用串口跟设备进行通讯。在网上找到一段初始化串口的程序,并自己加入了读取的部分。如下
nclude 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
main()
{
int fd;
struct termios options;

fd=open("/dev/ttyS0",O_RDWR|O_NDELAY|O_NOCTTY);
if (fd!=-1)
fcntl(fd,F_SETFL,FASYNC);
bzero(&options,sizeof(options));

options.c_cflag=CS8|CLOCAL|CREAD;
options.c_iflag=IGNPAR;
options.c_oflag=0;
options.c_lflag=0;
options.c_cc[VTIME]=0;
options.c_cc[VMIN]=10;
cfsetispeed( &options ,B9600); /* set in speed */
cfsetospeed( &options ,B9600); /* set out speed */
tcsetattr(fd,TCSANOW,&options);
while (1)
{
printf("begin insert...n");


res = read(fd,buf,10);

if (res=10)
{
buf[res]=0; /* set end of string, so we can printf */

printf(":%s:%dn", buf, res);
}
else
{
printf("read erro...n");
}


}
tcsetattr(fd,TCSANOW,&oldtio);

};
编译运行后接收其他机器的串口发字符,接受不到。我不明白为什么,是否是初始化有问题。/dev/ttyS0是表示COM1吗,直接使用就行了吗,用不用在LINUX下还装什么驱动之类的东西。另外机器上有两个COM口。是否另外一个就用/dev/ttyS1呢?
我将VMIN值定为10,希望收到10个字符就返回。还想 还想问一下这条语句fcntl(fd,F_SETFL,FASYNC);是什么意思?必须要用的吗?
另外,我还了解到可以直接用OUTB或者INB对串口的地址操作。好象COM1的地址是2F8。有哪为大侠有这方面的资料,请给小弟看看,不胜感激啊。
今天问题比较多。请大侠门辛苦辛苦。谢谢

|
/dev/ttyS0就是com1,comN是/dev/ttS(N-1);
VMIN=1比较好,希望收到10个字符就返回就在read的时候注明就行了;
fcntl(fd,F_SETFL,FASYNC);的意思大概就是设为异步模式,这时候read读不到东西就直接返回了,不等待,可能问题就在这里了。
没必要用OUTB或者INB;
你把fcntl(fd,F_SETFL,FASYNC);去掉试一试,另外,对串口操作需要有权限,你可以用root来试。

|
#include           /*标准输入输出定义*/
#include          /*标准函数库定义*/
#include          /*Unix 标准函数定义*/
#include       
#include        
#include           /*文件控制定义*/
#include         /*PPSIX 终端控制定义*/
#include           /*错误号定义*/
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR );         //| O_NOCTTY | O_NDELAY
if (-1 == fd)

perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}


/**
*@brief  设置串口通信速率
*@param  fd     类型 int  打开串口的文件句柄
*@param  speed  类型 int  串口速度
*@return  void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
};//B38400, B19200, B9600, B4800, B2400, B1200, B300, 
int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,  
 };//19200,  9600, 4800, 2400, 1200,  300,
void set_speed(int fd, int speed){
int   i; 
int   status; 
struct termios   Opt;
tcgetattr(fd, &Opt); 
for ( i= 0;  i 0)
    set_speed(fd,4800);
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
  if (set_Parity(fd,8,1,'N')== FALSE)
  {
    printf("Set Parity Errorn");
    exit(1);
  }
  sprintf(buff, "1234567890");
  while(1)
   {
    while((nread = write(fd,buff,10))>0)
    {
       printf("nLen %dn",nread);
       buff[nread+1]='';
       printf("n%s",buff);
sleep(2);
      }
   }
    //close(fd);
    //exit(0);

}

    
 
 

您可能感兴趣的文章:

  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • 串口通讯问题,急郁闷!(不是编程,而是设置)
  • 请教一个linux串口通讯问题?
  • LINUX下的JAVA串口通讯问题,如能解决,不胜感激
  • 串口通讯 丢失数据
  • 最近需要学一些串口通讯的东西。。。
  • u-boot中处理串口通讯的源码在哪?
  • Qt下串口通讯程序请教
  • ARM串口通讯丢包问题,急!!!
  • 请问:linux 下 C语言编程 , 如何将 串口 由 全双工 变化为 半双工 通讯 方式?
  • 串口通讯
  • linux串口通讯问题
  • 串口通讯,为什么一定加r才可以正确发送?
  • 急求linux串口通讯的例子.
  • 各位老大帮帮我,关于和串口设备通讯的问题
  • 求助AIX系统中的串口通讯问题!!
  • 如何在linux下用C/C++实现RS232 串口通讯的程序?
  • 有关linux下串口通讯断帧的问题,望高手解答
  • 串口通讯的问题。头疼+郁闷
  • 串口通讯---高手请进 大散分
  • 关于linux串口通信中写串口的问题
  • vmware 上 linux 串口问题
  • linux下串口通信的问题
  • 板间串口通信问题
  • 扩展的串口卡上的串口操作的问题
  • 急!急!急!急!急! liux 串口问题
  • 最棘手一种串口问题。请教高手。在线等
  • 在线等待,求助LINUX下串口问题
  • 急了急了:串口read函数问题!
  • 串口配置问题
  • unix 下c写的串口程序调试问题!高手请进 !!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • 散分100,求解串口键盘和串口鼠标驱动
  • Linux 中用java语言写串口程序,提示找不到串口
  • 高分求助:我笔记本没有串口,在linux下要和一个串口设备连,怎么办?
  • 开发板串口与实际内核中的串口文件的对应关系怎么回事?谢谢帮忙
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • 工控机有6个串口,但用光盘安装debian6.05,在dev中只找到4个串口,如何解决。
  • linux下串口发送数据用串口精灵接受不到或为全零
  • 要加多个串口,怎么分别指定他们的driver_name和dev_name以示区别各个串口?
  • 工控机上用光盘安装debian6.05,硬件上有6个串口,但是软件上即dev中只有4个串口,如何解决。
  • 嵌入式linux,串口初始化时,无法设置串口属性
  • 请教串口通信的编程
  • 请问如何以独占的方式打开串口
  • linux串口驱动该怎么写
  • 虚拟串口怎么读数据? 请有 串口 或者 usb 驱动经验的高手指点
  • linux下如何清空串口的输入输出缓存
  • linux下怎么监控串口?
  • 求助达人,USB转串口是否遇到过多台设备接入机器,串口冲突?
  • 将串口数据转为鼠标事件


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3