我向串口发送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;
}
}