有两台外设(类似于PDA)通过RS232通讯,现在我不知道他们的串口设置(Baudrate, databit, stopbit都不知道)。
在RS232上我将RX输出连接到电脑,当PC上串口程序的Baurdate>9600时接收到数据全部是0x00,当Baudrate低于9600时有些数据
9600 时 接收到 00 00 80 80 00 00 00 00 00 80 00 00 80 00 00 80 80 00 由于通讯时的数据每次都不一样,因此这条数据仅供参考
....
300 时 A4 F4 或 24 EB 或74 C1(数据仅供参考)两台设备中有一台他的串口参数可能值如下:
Baudrate: 38400/19200/9600/4800/2400/1200/600/300
Databit:  7/8
Parity :  Even/Old/None
StopBit: 1两台设备直接仅仅使用了4个脚位
RX, TX, GND和5V电源,因此通讯时不可能使用流量控制我能提供的信息就只有那么多,高人帮帮忙吧。如果需要更多的测试数据,可以发消息给我。

解决方案 »

  1.   

    之所以出现数据错误,只能说明两边的串口设置不一样,你给出的数据也没什么参考意义。建议使用PortMon,这样串口是什么设置就一目了然了,并且可以监视其所有通信和控制命令。
      

  2.   

    我在公司里用PB写通信程序(和仪器的)
    一般协议不对是接收不到任何信息的,
    如果收到0x00,在PB中不能处理0x00,就相当与收不到任何信息。
    我建议你设置一下通信协议:4种
      

  3.   

    我用示波器看了一下波形,但是只能够看到波形的一部分。请问如何根据波形来判断baudrate?现在的前提是我不知道发送和接收的数据,我现在的工作是猜出baudrate然后找出发送和接收的数据,最后根据发送和接收的数据找出两笔数据之间的演算算法。
      

  4.   

    用DentistryDoctor所說的工具, 簡單點, 也可自己編程 Hook 
    CreatFile
    打 开 串 行 口
    SetupComm
    设 置 通 信 缓 冲 区 的 大 小
    ReadFile
    读 串 口 操 作
    WriteFile
    写 串 口 操 作
    SetCommState主要是 SetCommState, 提取出設置參數!!!
      

  5.   

    请问如何根据波形来判断baudrate?=====================不知你用的什么示波器啊?带存储功能吗?找到到波形中最窄的一个,根据他的周期即可换算成波特率不带存储的话波形太乱了,不好找,只能凭感觉了
      

  6.   

    用DentistryDoctor所說的工具, 簡單點, 也可自己編程 Hook 
    CreatFile
    打 开 串 行 口
    SetupComm
    设 置 通 信 缓 冲 区 的 大 小
    ReadFile
    读 串 口 操 作
    WriteFile
    写 串 口 操 作
    SetCommState主要是 SetCommState, 提取出設置參數!!!
      

  7.   

    CreateFile()// 打开参数设置:一般工程中:
    int  nPortNum,
    DWORD dwBaudRate = CBR_38400,
    BYTE bByteSize = 8,
    BYTE bParity = 1,
    BYTE bStopBits = 0,
    DWORD dwReadIntervalTimeout = 15,
    DWORD dwReadTotalTimeoutMultiplier = 10,
    DWORD dwReadTotalTimeoutConstant = 100,
    DWORD dwWriteTotalTimeoutMultiplier = 0,
    DWORD dwWriteTotalTimeoutConstant = 100
    SetCommTimeouts()//设置超时
    SetupComm()     // 设置缓冲区大小
    SetCommMask()  // 设置串口想处理的事件
    GetCommState() // 得到串口状态
    SetCommState() // 设置串口状态
    // 设置 DCB 信息
    m_dcb.BaudRate = dwBaudRate;
    m_dcb.ByteSize = bByteSize;
    m_dcb.Parity = bParity;
    m_dcb.StopBits = bStopBits;
    m_dcb.fBinary = TRUE;
    ClearPort()    // 清理串口
    StartMonitor()  // 开线程处理I/O