2851|2

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口通信编程问题 [复制链接]

请教下,在uclinux下面已经写好了我的串口1的驱动,移植到44b0下面了,串口0自带了驱动。现在的问题是,想不明白,怎么进行两台pc各接一个串口,一台发,一台收,中间的过程是怎么样的?帮忙看下啊。想昏了。

最新回复

跟单片机差不多,无非就是打开一个串口,设置串口的属性,设置收发触发事件.  详情 回复 发表于 2007-8-27 21:32
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
Win32环境下COM口通信
      DCB dcb;  //
      COMMTIMEOUTS CommTimeouts1;
      DWORD dwEvtMask;
      OVERLAPPED hOverlapped;
      HANDLE hCOM;

      hCOM = CreateFile("COM1"
                       GENERIC_READ | GENERIC_WRITE,
                     0,     //comm devices must be opened w/exclusive-access
                     NULL,  //no security attrs
                     OPEN_EXISTING, // comm devices must use OPEN_EXISTING
                     FILE_FLAG_OVERLAPPED,     //not overlapped I/O
                     NULL   //hTemplate must be NULL for comm devices
                  );
      if (GlobalDataForm->hGPSCom == INVALID_HANDLE_VALUE)
      {
        sprintf(Str,"打开GPS_COM错误代号%d",GetLastError());
        MessageBox(NULL,Str,"错误",MB_OK);
      }
      else
      {
        if (!GetCommState(GlobalDataForm->hGPSCom, &dcb))
        {
          sprintf(Str,"获取GPS_COM状态错误代号%d",GetLastError());
          MessageBox(NULL,Str,"错误",MB_OK);
        }
        else
        {
          dcb.BaudRate = 9600;        //波特率9600
          dcb.ByteSize = 8;           //8个数据位
          dcb.Parity = NOPARITY;      //没有校验
          dcb.StopBits = ONESTOPBIT;  //1个停止位

          if (!SetCommState(GlobalDataForm->hGPSCom, &dcb))
          {
            sprintf(Str,"设置GPS_COM状态错误代号%d",GetLastError());
            MessageBox(NULL,Str,"错误",MB_OK);
          }
          else
          {
            if (!GetCommTimeouts(GlobalDataForm->hGPSCom,&CommTimeouts1))
            {
              sprintf(Str,"获取GPS_COM超时状态错误,错误代号%d",GetLastError());
              MessageBox(NULL,Str,"错误",MB_OK);
            }
            else
            {
              //CommTimeouts1.ReadIntervalTimeout=0xffffffff;
              CommTimeouts1.ReadTotalTimeoutConstant=100;
              if (!SetCommTimeouts(GlobalDataForm->hGPSCom,&CommTimeouts1))
              {
                sprintf(Str,"设置GPS_COM超时状态错误,错误代号%d",GetLastError());
                MessageBox(NULL,Str,"错误",MB_OK);
              }
              else
              {
                /*if (!SetCommMask(GlobalDataForm->hGPSCom,EV_DSR))
                {
                  sprintf(Str,"设置GPS_COM屏蔽状态错误,错误代号%d",GetLastError());
                  MessageBox(NULL,Str,"错误",MB_OK);
                }
                else
                {
                  hOverlapped.hEvent=CreateEvent(NULL,
                                                 FALSE,
                                                 FALSE,
                                                 NULL
                                                );
                  assert(hOverlapped.hEvent);
                  if (WaitCommEvent(GlobalDataForm->hGPSCom,&dwEvtMask,&hOverlapped))
                  //{
                  //  sprintf(Str,"等待GPS_COM通信事件错误,错误代号%d",GetLastError());
                  //  MessageBox(NULL,Str,"错误",MB_OK);
                  //}
                  //else
                  {
                    if (dwEvtMask & EV_DSR)
                    {
                      MessageBox(NULL,"GPS数据准备好","提示",MB_OK);
                    }
                  }
                }*/
                mrAnswer=IDOK;
                GlobalDataForm->mGPSCom=true;
              }
            }
          }
        }
      }
      break;
/*      DCB dcb;
      COMMTIMEOUTS CommTimeouts1;
      DWORD dwEvtMask;
      OVERLAPPED hOverlapped;

      GlobalDataForm->hGPSCom = CreateFile(GlobalDataForm->GPSComName,
                            GENERIC_READ | GENERIC_WRITE,
                            0,    // comm devices must be opened w/exclusive-access
                            NULL, // no security attrs
                            OPEN_EXISTING, /* comm devices must use OPEN_EXISTING
                            0,    // not overlapped I/O
                            NULL  // hTemplate must be NULL for comm devices
                           );
      if (GlobalDataForm->hGPSCom == INVALID_HANDLE_VALUE)
      {
        sprintf(Str,"打开GPS_COM错误代号%d",GetLastError());
        MessageBox(NULL,Str,"错误",MB_OK);
      }
      else
      {
        if (!GetCommState(GlobalDataForm->hGPSCom, &dcb))
        {
          sprintf(Str,"获取GPS_COM状态错误代号%d",GetLastError());
          MessageBox(NULL,Str,"错误",MB_OK);
        }
        else
        {
          dcb.BaudRate = 9600;        //波特率9600
          dcb.ByteSize = 8;           //8个数据位
          dcb.Parity = NOPARITY;      //没有校验
          dcb.StopBits = ONESTOPBIT;  //1个停止位

          if (!SetCommState(GlobalDataForm->hGPSCom, &dcb))
          {
            sprintf(Str,"设置GPS_COM状态错误代号%d",GetLastError());
            MessageBox(NULL,Str,"错误",MB_OK);
          }
          else
          {
            if (!GetCommTimeouts(GlobalDataForm->hGPSCom,&CommTimeouts1))
            {
              sprintf(Str,"获取超时状态错误,错误代号%d",GetLastError());
              MessageBox(NULL,Str,"错误",MB_OK);
            }
            else
            {
              //CommTimeouts1.ReadIntervalTimeout=0xffffffff;
              CommTimeouts1.ReadTotalTimeoutConstant=100;
              if (!SetCommTimeouts(GlobalDataForm->hGPSCom,&CommTimeouts1))
              {
                sprintf(Str,"设置超时状态错误,错误代号%d",GetLastError());
                MessageBox(NULL,Str,"错误",MB_OK);
              }
              else
              {
                mrAnswer=IDOK;
                GlobalDataForm->mGPSCom=true;
              }
            }
          }
        }
      }
      break;*/
    }
    case mOFF:{
      GlobalDataForm->mGPSCom=false;
      CloseHandle(GlobalDataForm->hGPSCom);
      mrAnswer=IDOK;
      break;
    }

 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
跟单片机差不多,无非就是打开一个串口,设置串口的属性,设置收发触发事件.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表