免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2715 | 回复: 2
打印 上一主题 下一主题

linux与windows串口通信失败,有哪位有做过么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-08 23:04 |只看该作者 |倒序浏览
我在linux下和vc下都写写了串口程序,若是两边都是linux则两者通信正常,若是一边是linux一边是windows则windows下无法接受到我linux下程序发的数据!然而,若在linux下用minicom发送,则可以正常接收!不知道哪里的参数设置错误了!请指教,还有我的 windows下采用的是winapi的串口函数! 就是CreateFile这类的!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-05-09 09:26 |只看该作者

回复 #1 linlinver 的帖子

按道理应该是没有问题,估计是参数设置的问题

论坛徽章:
0
3 [报告]
发表于 2009-05-09 13:18 |只看该作者
就是不知道哪里设置错了!
我设置参数的函数如下!VC下的!
BOOL serial_ctrl:pen_set_serial_port(LPCTSTR serial_port, DCB dcb)
{
        serial_handle = CreateFile(        serial_port,
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);

        if( serial_handle == (HANDLE)0xFFFFFFFF)
        {
                AfxMessageBox("Open the serial port wrong";
                return FALSE;
        }

        if( GetCommState(serial_handle, &config) == 0)
        {
                AfxMessageBox(_T("Wrong in get configuration port.");
                return FALSE;
        }

        //set new configuration
        //以后添加修改波特率的bottom
        /*
        config.BaudRate = dcb.BaudRate;
        config.StopBits = dcb.StopBits;
        config.Parity = dcb.Parity;
        config.ByteSize = dcb.ByteSize;
        */

        if(        SetCommState(serial_handle, &config) == 0)
        {
                AfxMessageBox(_T("Wrong in set config of serial port");
                return FALSE;
        }

        //set the buffer of sending and reciving
        SetupComm(serial_handle, 1024, 1024);
        PurgeComm(serial_handle, PURGE_TXCLEAR);
       
        //set the time out parity
        COMMTIMEOUTS com_time_out;
        memset(&com_time_out, 0, sizeof(com_time_out));
        GetCommTimeouts(serial_handle, &com_time_out);//get the time out set now

        //set the read time out
        //return at once while get one charater
        com_time_out.ReadIntervalTimeout = MAXDWORD;
        com_time_out.ReadTotalTimeoutConstant = 0;
        com_time_out.ReadTotalTimeoutMultiplier = 0;

        //set the write time out
        com_time_out.WriteTotalTimeoutConstant = 2;
        com_time_out.WriteTotalTimeoutMultiplier = 3;

        //set the time out parity

        SetCommTimeouts(serial_handle, &com_time_out);

        return TRUE;
}
错应该出在vc下~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP