5743|14

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

那个用vs2005写过wince下的串口通信程序!!!! [复制链接]

我要用VS2005写一个wince下的串口通信程序,
用的是CreateFile   WriteFile   ReadFile  
谁有示例代码,能贴出来吗?
恼火的很搞了很久了就是有问题!!!
此帖出自WindowsCE论坛

最新回复

同求一个 vs2005 下 C# 写的串口通讯程序 我刚接触这一块 C#的语法还没学全 以前也从没在win下编过程 但是头儿要求的特别急 想找个例程边看边学 希望又大侠能指点一下 同时希望有这种例程的给我一个 在此谢过先 liuzhidongcn@163.com   详情 回复 发表于 2008-11-24 17:01
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
void ReportCommError(LPTSTR lpszMessage);
DWORD WINAPI CommReadThreadFunc(LPVOID lpParam);
BOOL SendText(HWND hWnd);
HANDLE hCommPort = INVALID_HANDLE_VALUE;
void Listing9_1()
{
  hCommPort = CreateFile (_T("COM1:"),
    GENERIC_READ | GENERIC_WRITE,
    0,        // COM port cannot be shared
    NULL,    // Always NULL for Windows CE
    OPEN_EXISTING,
    0,          // Non-overlapped operation only
    NULL);      // Always NULL for Windows CE
  if(hCommPort == INVALID_HANDLE_VALUE)
  {
  ReportCommError(_T("Opening Comms Port."));
    return;
  }
  // set the timeouts to specify the behavior of
  // reads and writes.
  COMMTIMEOUTS ct;
  ct.ReadIntervalTimeout = MAXDWORD;
  ct.ReadTotalTimeoutMultiplier = 0;
  ct.ReadTotalTimeoutConstant = 0;
  ct.WriteTotalTimeoutMultiplier = 10;
  ct.WriteTotalTimeoutConstant = 1000;
  if(!SetCommTimeouts(hCommPort, &ct))
  {
    ReportCommError(_T("Setting comm. timeouts."));
    Listing9_2();  // close comm port
    return;
  }
  // Get the current communications parameters,
  // and configure baud rate
  DCB dcb;
  dcb.DCBlength = sizeof(DCB);
  if(!GetCommState(hCommPort, &dcb))
  {
    ReportCommError(_T("Getting Comms. State."));
    Listing9_2(); // close comm port
    return;
  }
  dcb.BaudRate = CBR_19200; // set baud rate to 19,200
  dcb.fOutxCtsFlow = TRUE;
  dcb.fRtsControl        = RTS_CONTROL_HANDSHAKE;
  dcb.fDtrControl        = DTR_CONTROL_ENABLE;
  dcb.fOutxDsrFlow       = FALSE;
  dcb.fOutX              = FALSE; // no XON/XOFF control
  dcb.fInX               = FALSE;
  dcb.ByteSize           = 8;
  dcb.Parity            = NOPARITY;
  dcb.StopBits          = ONESTOPBIT;
  if(!SetCommState(hCommPort, &dcb))
  {
    ReportCommError(_T("Setting Comms. State."));
    Listing9_2(); // close comm port
    return;
  }
  // now need to create the thread that will
  // be reading the comms port
  HANDLE hCommReadThread = CreateThread(NULL, 0,
      CommReadThreadFunc, NULL, 0, NULL);
  if(hCommReadThread == NULL)
  {
    ReportCommError(_T("Creating Thread."));
    Listing9_2(); // close comm port
    return;
  }
  else
    CloseHandle(hCommReadThread);
}
void ReportCommError(LPTSTR lpszMessage)
{
  TCHAR szBuffer[200];
  wsprintf(szBuffer,
    _T("Communications Error %d \r\n%s"),
    GetLastError(),
    lpszMessage);
  cout ? szBuffer ? endl;
}

此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
有没有 用smartdevice 下的MFC 开发的???
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
上面的代码提供一个思路, 你稍微研究一下, 不管win32还是MFC, 都能写出来了.
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
我思路到是有  就是不知道具体怎么实现,
createfile 打开串口,就可以用readfile和writefile 来进行读写了 吗   要注意写什么,怎么衔接???
顺便问下 我用GetLastError  得到createfile的错误是12  “访问码无效”  这是什么意思!!!
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
hPort=CreateFileW(lpszPortName,GENERIC_READ|GENERIC_WRITE,
                       0,NULL,OPEN_EXISTING,0,NULL);
        if(hPort==INVALID_HANDLE_VALUE)
        {
                CString strError;
                strError.Format(_T("Unable to open %s,Error No.=%d"),
                                 lpszPortName,GetLastError());
                MessageBoxW(strErrorA,TEXT("Error"),MB_OK);
                return FALSE;
        }
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
基本的串行通信步骤:
1:Open the communications port using CreateFile

2:Create a thread to read from the communications port using ReadFile

3:Write to the communications port using WriteFile

4:Close the communications port using CloseHandle
我这里有个文档, 发给你?
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
可以  啊谢谢你了我的Email chxqd2086@qq.com
要不我把我写的程序发给你帮我看看
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
串口打开错误要么是串口不存在, 要么就是已经被打开, 自己找找在原因吧.

你需要开个线程对串口进行读, 线程中大约是这样:
while(TRUE)
{
    if(WaitCommEvent(m_hComm,&evtMask,0))
    {
       ReadFile(...)
    }
}

其余的自已看下帮助文档. 反正就是WriteFile   ReadFile   CreateFile 等. 当然, 还有一些串口方面的API有必要用.
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

10
 
应该就是这样把,我用的是单线程读串口,  
关键是我现在串口都大不开,!!看了要慢慢调了

有没有特别要注意的地方!!!
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
用的是COM几? 先去注册表的HKLM\Drivers\Active下是加载的哪个串口, 再检查下是不是被打开. 如果都正确的话应该是不存在打开问题的.
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
随便下载个串口的代码就行了,wince的也有。要不自己写一个也简单,记住不要用到IO重叠的东西就可以了
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 
我用线程来实现 消息的发送  再在消息 实现的 函数里面实现数据读取,
问题是数据可以读取,但 是我的对话空中的 其它按钮都不可以用了...
串口不能动了,,
是不是这种组织方式有问题...

此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

14
 
能否将代码贴出来研究,或者共享先,否则怎么看,?
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

15
 
同求一个 vs2005 下 C# 写的串口通讯程序
我刚接触这一块
C#的语法还没学全
以前也从没在win下编过程
但是头儿要求的特别急
想找个例程边看边学
希望又大侠能指点一下
同时希望有这种例程的给我一个
在此谢过先
liuzhidongcn@163.com
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表