MTK串口发送问题

fool14 2012-07-30 04:42:18
我想做个与 MTK 手机进行串口通讯的小工具,现在接收正常,发送没反应。

初始化:

DWORD style=WS_VISIBLE;
if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(13); //选择COM13
m_MSComm.SetInBufferSize(1024); //接收缓冲区
m_MSComm.SetOutBufferSize(1024);//发送缓冲区
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_MSComm.SetInputMode(1);//以二进制方式读写数据
m_MSComm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_MSComm.SetSettings("115200,n,8,1");//波特率115200无检验位,8个数据位,1个停止位
if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
m_MSComm.SetPortOpen(TRUE);//打开串口
写函数:

void CCommDlg::Send()
{
// TODO: Add extra validation here 发送消息
int i,Count;
CString m_SendData;
m_SendData="AT\r";
// GetDlgItemText(IDC_EDIT2,m_SendData);
Count=m_SendData.GetLength();
CByteArray m_Array;

m_Array.RemoveAll();
m_Array.SetSize(Count);

for(i=0;i<Count;i++)
m_Array.SetAt(i,m_SendData[i]);
m_MSComm.SetOutBufferCount(0);
m_MSComm.SetOutput(COleVariant(m_Array));
}
...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BombZhang 2012-07-31
  • 打赏
  • 举报
回复
你发的什么命令?mtk不识别的命令可能没有响应消息,用超级终端啥的发个确定正确的命令试试看有没有响应
fool14 2012-07-31
  • 打赏
  • 举报
回复
用串口工具发,也没有响应,不知道是不是加了其他命令识别还是怎么回事。。。

用串口工具发的是HEX 41 54 0D 0A
fool14 2012-07-31
  • 打赏
  • 举报
回复
我朋友弄错了。。。。
应该是发ATD 不是AT\r 谢谢大家
fronz 2012-07-31
  • 打赏
  • 举报
回复
so,串口工具调不出来,说明两方协议还没弄清楚。
仔细研究下通讯协议吧,看波特率、数据位、停止位、校验位等,认真研究一下。

ps,可想办法用自动工具发,pc机接收,看看发出来的到底是什么格式。
fool14 2012-07-31
  • 打赏
  • 举报
回复
AT\r MTK自动工具发这条命令有响应消息
fool14 2012-07-31
  • 打赏
  • 举报
回复
AT\r MTK自带工具发这条命令有响应消息
fronz 2012-07-30
  • 打赏
  • 举报
回复
"AT\r";
看通讯协议是否正确,不确定可用串口工具先调试一下看看。注意字符和ASCII码转换

fool14 2012-07-30
  • 打赏
  • 举报
回复
接收函数:

unsigned char Comm_DataBuffer[10000]={0};
unsigned int Comm_Packet_Index=0;
void CCommDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len=0, k=0; //转换为数组时使用的变量
BYTE rxdata[204]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp; //字符型变量
int temp = 0; //临时变量
unsigned char ecuchecksum = 0; //ecu回传校验码
CString m_RcvData;

if(m_MSComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
{ //以下你可以根据自己的通信协议加入处理代码
variant_inp = m_MSComm.GetInput();//读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len = safearray_inp.GetOneDimSize(); //得到有效数据长度

for(k = 0; k < len; k++) //将ColeSafeArray型变量转换为BYTE型数组
{
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}

for(temp = 0; temp < len; temp++)
{
Comm_DataBuffer[Comm_Packet_Index + temp] = rxdata[temp];
}

Comm_Packet_Index += temp;
m_RcvData=Comm_DataBuffer;//接收内容
SetDlgItemText(IDC_EDIT1,m_RcvData);
}

}

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧