7871|19

50

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

打开串口失败 为什么呢? [复制链接]

VS08下编的win32程序 打开串口 失败为什么呢?
建的是STANDARDSDK MIPSII平台设备的  程序放入设备中,设备串口和电脑PC机相连
运行后,发现程序 打开串口失败?
有哪几种原因呢?驱动方面有问题?是不是驱动方面对串口的配置不对呢?还是怎么呢? 我不懂驱动
void SendData(HDC hdc,LPCSTR buffer)
{
    HANDLE hcom;
        COMMCONFIG                cc;
        DCB             dcb;
        DWORD           pt;
        RECT rect={20,20,60,60};
        hcom=CreateFile(L"COM1:",GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,NULL,NULL);
        if(hcom==INVALID_HANDLE_VALUE)
        {
                DrawText(hdc,L"fail",5,&rect,DT_CENTER);
                return;
        }
        GetCommState(hcom,&dcb);
    dcb.BaudRate=CBR_9600;
        dcb.fBinary=TRUE;
        dcb.fParity=FALSE;
        dcb.ByteSize=8;
        dcb.Parity=NOPARITY;
        dcb.StopBits=ONESTOPBIT;
        dcb.fRtsControl=RTS_CONTROL_ENABLE;
        dcb.fDtrControl=DTR_CONTROL_ENABLE;
        SetCommState(hcom,&cc.dcb);
        WriteFile(hcom,buffer,2,&pt,&ov);
}

是不是也要在驱动中,把串口配置名为 COM1呢  (设备中共有两个串口)

最新回复

结贴了 忽略了 CE是不支持重叠方式的 WriteFile(hcom,buffer,2,&pt,NULL);最后一个参数应该为NULL 代码如下:供大家参考  谢谢各位 void SendData(LPCSTR buffer,int count) {         HANDLE hComm=INVALID_HANDLE_VALUE;     COMMTIMEOUTS CommTimeOuts;         RECT rect={20,20,60,60};         hComm=CreateFile(_T("COM1:"),GENERIC_WRITE|GENERIC_READ,0,0,OPEN_EXISTING,0,0);         if(hcom==INVALID_HANDLE_VALUE)         {                 DrawText(hdc,L"open com fail",14,&rect,DT_CENTER);                 return;         }         GetCommState(hComm,&dcb);         dcb.BaudRate=CBR_9600;         dcb.fBinary=TRUE;         dcb.fParity=FALSE;         dcb.ByteSize=8;         dcb.Parity=NOPARITY;         dcb.StopBits=ONESTOPBIT;         dcb.fRtsControl=0;         dcb.fDtrControl=0;         SetCommMask(hComm,EV_RXCHAR);         SetupComm(hComm,16384,16384);         SetCommState(hcom,&cc.dcb);         PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);             WriteFile(hComm,buffer,count,&pt,NULL); }  详情 回复 发表于 2010-4-20 09:40
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
“是不是也要在驱动中,把串口配置名为 COM1呢”
那你串口驱动中,注册表Prefix设置不是这个COM?
不会吧。
打开串口用:
HANDLE hCom = CreateFile(L"COM1:",GENERIC_READ | GENERIC_WRITE,
    0,NULL,OPEN_EXISTING,0,NULL);
就可以了。
你的设备是不是没有这个串口,或者被占用了呢。
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
模拟器上没有串口吧?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 sunrain_hjb 的回复:
模拟器上没有串口吧?


CE5是没有

CE6的模拟器,可以使用PC上的串口
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
需要在注册表中将串口配置名为 COM1
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主,COM1不行,要不要试试COM2,COM3 ?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
com被占用了吧,或者com口没有选定index
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
········
俺喜欢真机测试
不行就看驱动呗。呵呵
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
先找个串口调试程序(设备端的,网上很多),测一下是不是串口或串口号有问题。先重启设备再进行测试,避免串口已被打开没有关闭。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 torinoyuan 的回复:
先找个串口调试程序(设备端的,网上很多),测一下是不是串口或串口号有问题。先重启设备再进行测试,避免串口已被打开没有关闭。


不错
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 4 楼 domworldjohn 的回复:
需要在注册表中将串口配置名为 COM1

想问下 在注册表中怎么配置? 是指的 驱动程序中的注册表配置吗 驱动不是我做的,不太清楚
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 7 楼 gooogleman 的回复:
········
俺喜欢真机测试
不行就看驱动呗。呵呵

问题是驱动我看不懂哦  驱动中相应的注册表配置 应该是什么样的?
我也找下驱动中的 看是不是配置的不对
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 6 楼 paul85 的回复:
com被占用了吧,或者com口没有选定index


怎么选定呢?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 laughinheart 的回复:
引用 6 楼 paul85 的回复:
com被占用了吧,或者com口没有选定index


怎么选定呢?


能不能这样做,先找个别人的程序,看能否打开串口,如果板卡串口的硬件或驱动本身就有问题.

那就太不值了.
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 
。。。。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

16
 
要看看你当前到底是对应哪个串口了,不是说com1就行的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 13 楼 zhoukq 的回复:
引用 12 楼 laughinheart 的回复:
引用 6 楼 paul85 的回复:
com被占用了吧,或者com口没有选定index


怎么选定呢?


能不能这样做,先找个别人的程序,看能否打开串口,如果板卡串口的硬件或驱动本身就有问题.

那就太不值了.


是啊 我试了 别人的程序能够打开串口 并且发送数据
为什么我上面的语句就打不开呢 语句是一样的 驱动也是一样的啊
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

18
 
需要配置模拟器上的串口
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(高级)

19
 
学习学习
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

20
 
结贴了
忽略了 CE是不支持重叠方式的 WriteFile(hcom,buffer,2,&pt,NULL);最后一个参数应该为NULL

代码如下:供大家参考  谢谢各位
void SendData(LPCSTR buffer,int count)
{
        HANDLE hComm=INVALID_HANDLE_VALUE;
    COMMTIMEOUTS CommTimeOuts;
        RECT rect={20,20,60,60};
        hComm=CreateFile(_T("COM1:"),GENERIC_WRITE|GENERIC_READ,0,0,OPEN_EXISTING,0,0);
        if(hcom==INVALID_HANDLE_VALUE)
        {
                DrawText(hdc,L"open com fail",14,&rect,DT_CENTER);
                return;
        }
        GetCommState(hComm,&dcb);
        dcb.BaudRate=CBR_9600;
        dcb.fBinary=TRUE;
        dcb.fParity=FALSE;
        dcb.ByteSize=8;
        dcb.Parity=NOPARITY;
        dcb.StopBits=ONESTOPBIT;
        dcb.fRtsControl=0;
        dcb.fDtrControl=0;
        SetCommMask(hComm,EV_RXCHAR);
        SetupComm(hComm,16384,16384);

        SetCommState(hcom,&cc.dcb);
        PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
   
        WriteFile(hComm,buffer,count,&pt,NULL);
}
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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