主题 : WINCE 串口与GSM通信 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 40826
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2011-03-22
最后登录: 2017-09-13
楼主  发表于: 2011-04-10 13:00

 WINCE 串口与GSM通信

我向串口发送AT指令,用电脑上的串口调试助手能发送正常,但向GSM发送,GSM没点反应,大家帮我看看哪里出错了
发送打电话指令
    char buf[]={"ATD13794443839;\r"};
    SendDataToGPRS(buf,16);

WINCE读数据
DWORD WINAPI CCServiceSrpDlg::ReadPortThread(LPVOID lpParameter)
{
    CCServiceSrpDlg *pDlg = (CCServiceSrpDlg*)lpParameter;
    DWORD evtMask;
    DWORD dwReadErrors;
    COMSTAT cmState;
    DWORD dwLength;
    DWORD actualReadLen;//实际读取的字节数

    char buf[1024];

    //清除收/发缓冲区
    PurgeComm(pDlg->m_hComm, PURGE_TXCLEAR | PURGE_RXCLEAR);
    //串口事件:接收到一个字符
    SetCommMask(pDlg->m_hComm, EV_RXCHAR|EV_CTS|EV_DSR);

    while (pDlg->m_hComm != INVALID_HANDLE_VALUE && pDlg->m_hComm)
    {
        if(WaitCommEvent(pDlg->m_hComm, &evtMask,0))
        {
            SetCommMask(pDlg->m_hComm, EV_RXCHAR|EV_CTS|EV_DSR);
            if(evtMask&EV_RXCHAR)
            {
                ClearCommError(pDlg->m_hComm,&dwReadErrors,&cmState);
                dwLength=cmState.cbInQue;
                if(dwLength<=0)
                {
                    continue;
                }
                memset(buf, 0, sizeof(buf));
                ReadFile(pDlg->m_hComm, buf, dwLength, &actualReadLen, NULL);
                if(actualReadLen>0)
                {
                    pDlg->DealData(buf, actualReadLen);

                }
            }
        }
    }
    return 0;
}

WINCE接收并显示数据:(这里显示乱码了)
void CCServiceSrpDlg::DealData(char *RecvBuf, DWORD bufLen)
{
    CString str;
    for (DWORD index=0; index<bufLen; index++)
    {
        str.Format(_T("%c "),RecvBuf[index]);
        m_str += str;
    }
    ((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(m_str);
}

WINCE串口参数设置

BOOL flag = OpenPort(_T("COM1:"),9600,8,ONESTOPBIT,NOPARITY);//打开串的参数
BOOL CCServiceSrpDlg::OpenPort(CString port,INT baudRate,INT dataBits,
                               INT stopBits,INT parity)
{
    if (m_hComm == NULL)
    {
        m_hComm = CreateFile(port,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,NULL);
        if (m_hComm == INVALID_HANDLE_VALUE)
        {
            MessageBox(_T("打开串口失败,检查是否已被占用"));
            return FALSE;
        }

        //指定端口监测的事件集
        SetCommMask(m_hComm, EV_RXCHAR);// 串口事件:接收到一个字符    
        //分配设备缓冲区
        SetupComm(m_hComm, 51200, 512);    // 设置接收与发送的缓冲区大小

        DCB dcb;
        GetCommState(m_hComm,&dcb);    //获取当前设置的信息
        dcb.BaudRate = baudRate;    //波特率
        dcb.ByteSize = dataBits;    //数据大小
        dcb.Parity   = parity;        //校检位
        dcb.StopBits = stopBits;    //停止位
        dcb.fParity  = FALSE;
        dcb.fBinary  = TRUE;
        dcb.fDtrControl = 0;
        dcb.fRtsControl = 0;
        dcb.fOutX = dcb.fInX = dcb.fTXContinueOnXoff = 0;

        if (!SetCommState(m_hComm,&dcb))
        {
            MessageBox(_T("无法按当前的参数配置端口,请检查参数!"));
            PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
            ClosePort();
            return FALSE;
        }


        //设置起时参数
        COMMTIMEOUTS CommTimeOuts;
        GetCommTimeouts(m_hComm,&CommTimeOuts);
        CommTimeOuts.ReadIntervalTimeout         = 100;
        CommTimeOuts.ReadTotalTimeoutMultiplier  = 1;
        CommTimeOuts.ReadTotalTimeoutConstant     = 100;
        CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
        CommTimeOuts.WriteTotalTimeoutConstant   = 0;
        if (!SetCommTimeouts(m_hComm,&CommTimeOuts))
        {
            MessageBox(_T("无法设置超时参数!"));
            PurgeComm(m_hComm, PURGE_TXCLEAR|PURGE_RXCLEAR);
            ClosePort();
            return FALSE;
        }

        //清除收/发缓冲区
        PurgeComm(m_hComm, PURGE_TXCLEAR|PURGE_RXCLEAR);
        //SetDlgItemText(IDC_BTN_OPEN,_T("关闭串口"));
        return TRUE;
    }
    else
    {
        CloseHandle(m_hComm);
        m_hComm = NULL;
        //SetDlgItemText(IDC_BTN_OPEN,_T("打开串口"));
        return FALSE;
    }
}
级别: 新手上路
UID: 52884
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2011-07-27
最后登录: 2011-07-27
1楼  发表于: 2011-07-27 15:12
楼主你的串口调试程序源码能给一份么?
不胜感激
QQ:155220997