我用vc编写一个和下位机通信的软件。其他都正常的。只是在下位机没有发送数据的时候我上位机居然通过串口读取到数据。后来用电源直接连到串口线没接下位机。仍然可以接收到数据。这个是什么原因?困扰好几天了。郁闷

解决方案 »

  1.   

    不知道是不是电源干扰。我用串口调试工具收不到数据。调用哪个readfile函数就能读到数据,一般第一次读到的数据时一个值(我试了几次都是0X64,以后都是0xff)。用电脑的蓝牙所在串口打开后结果也是一样的。我怀疑是不是readfile返回的问题。
      

  2.   

    不一样,我怀疑是不是vc里面的那个readfile的问题
      

  3.   

    打开串口的代码port = CreateFile(nm, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
          FILE_ATTRIBUTE_NORMAL, NULL);
    读取串口操作的代码ReadFile(port, dest, len, &rd, NULL);
    我想这都没问题的。现在就是不知道这个数据哪里来的,烦恼。
      

  4.   

    数据哪来的我不知道
    不过打开串口的程序是不是应该这么写
    port = CreateFile(nm, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
      

  5.   

    我试了,这样写之后后面的readfile和writefile都要加上OVERLAPPED这个结构体吧?加上之后读写的操作就不一样了
      

  6.   

    我记得操作串口是必须加FILE_FLAG_OVERLAPPED的
      

  7.   

    你好,异步打开的话我port = CreateFile(nm, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
                                     FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);后,后面的writefile和readfile该怎么写?我改了下好像读不了数据。
      

  8.   

    你可以改改你的通讯协议,比较加奇偶校验,2个停止位,
    还有你的的下位机的串口那里加上上拉电阻,保证默认的电平时高电平,如果默认的电平时高电平的话仍然有问题的话,你再检查下的下位机的程序,保证在不串口发送的时候让串口发送port默认为高电平
    ,这样应该就可以了