garcon0727 发表于 2019-6-23 14:34:18

为什么我使用windows api编程发送了数据单片机接收不到

本帖最后由 garcon0727 于 2019-6-23 14:38 编辑

void uart::SendData(TCHAR* buffer, int len)
{
    char lpOutBuffer;
    DWORD dwBytesWrite = 1;          //一次最多传输一个字节
    COMSTAT ComStat;
    DWORD dwErrorFlags;
    BOOL bWriteStat;
    if (len == 0)
    {
      return;
    }
    ClearCommError(hCom, &dwErrorFlags, &ComStat);
    WideCharToMultiByte(CP_ACP, 0, buffer, -1, lpOutBuffer, 100, NULL, NULL);
    lpOutBuffer = '\0';
    for (int i = 0; i < len; i++)
    {
      char send = lpOutBuffer;
      bWriteStat = WriteFile(hCom, &send, dwBytesWrite, &dwBytesWrite, NULL);
      PurgeComm(hCom, PURGE_TXCLEAR);
      if (!bWriteStat)
      {
            //写串口失败
            return;
      }

    }
}
调试的时候writefile的返回值也是1,我还把单片机收到的数返回到PC显示,但是用别人的串口助手就可以,自己做的就不行。


我用自己的串口助手发了几次数没反应,用别人的不仅会把11发出去,还会把我在自己的串口助手里面发送的值发送出去,这是什么原因啊?


garcon0727 发表于 2019-6-23 14:37:16

我在网上找了其他的代码发现也存在这个问题,如果数据只进入了缓存区还没有发送到STM32的话,writefile应该不会返回啊

衔胆栖冰 发表于 2019-6-23 14:54:32

用USB转串口线接的单片机,pc端抓下USB数据看PC有没有把数据发送出去,或者API发送的数据有没有到达PC底层

garcon0727 发表于 2019-6-23 18:03:54

衔胆栖冰 发表于 2019-6-23 14:54
用USB转串口线接的单片机,pc端抓下USB数据看PC有没有把数据发送出去,或者API发送的数据有没有到达PC底层 ...

我把数据抓出来了,上面有发送和接收的是用得别人的串口调试助手,我自己的只有发送但是没有接收,我还让开发板接收到数据就点亮LED,也没有反应。

garcon0727 发表于 2019-6-23 19:17:13

我发使用别人的串口助手时每次写入串口会多两位,比如发送字符1,我自己的程序发出去监视到的是1个字节,但是用别人的发出去是3个字节,还有两个字节是什么啊?

Dylan疾风闪电 发表于 2019-6-24 09:28:58

上位机自发自收检查:先用USB转串口模块/收发器,将Tx和Rx短接,检查一下你的上位机程序是否有问题。
下位机程序检查:1、用断点检查串口中断接收到的单个数据是否正确;2、添加计数变量,检测收到的数据量是否正确;3、前面两点都解决了,在就再分析处理函数是否正确。:)
页: [1]
查看完整版本: 为什么我使用windows api编程发送了数据单片机接收不到