标题: 在C语言打开com口的操作中本机无响应,但在其他人的机器中代码完美运行,实测串口... [打印本页]

作者: 凛夏寒烟    时间: 2019-5-2 09:38
标题: 在C语言打开com口的操作中本机无响应,但在其他人的机器中代码完美运行,实测串口...
  1. int InitUART(void)
  2. {
  3.     hCom = CreateFile(TEXT("COM15"),
  4.         GENERIC_READ|GENERIC_WRITE, //允许读
  5.         0, //指定共享属性,由于串口不能共享,所以该参数必须为0
  6.         NULL,
  7.         OPEN_EXIStiNG, //打开而不是创建

  8.         0, //属性描述,该值为FILE_FLAG_OVERLAPPED,表示使用异步I/O,该参数为0,表示同步I/O操作
  9.         NULL);

  10.     if (hCom == INVALID_HANDLE_VALUE)
  11.     {
  12.         printf("打开COM失败!\n");
  13.         return FALSE;
  14.     }
  15.     else
  16.     {
  17.         printf("COM打开成功!\n");
  18.     }

  19.     SetupComm(hCom, 1024, 1024); //输入缓冲区和输出缓冲区的大小都是1024字节

  20.     /*********************************超时设置**************************************/
  21.     COMMTIMEOUTS TimeOuts;
  22.     //设定读超时
  23.     TimeOuts.ReadIntervalTimeout = MAXBYTE;//读间隔超时
  24.     TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
  25.     TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
  26.     //设定写超    int Dis, Vol, 时int Dis, Vol,
  27.     TimeOuts.WriteTotalTimeoutMultiplier = 1;//写时间系数
  28.     TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量
  29.     SetCommTimeouts(hCom, &TimeOuts); //设置超时数据写入

  30.     /*****************************************配置串口***************************/
  31.     DCB dcb;
  32.     GetCommState(hCom, &dcb);
  33.     dcb.BaudRate = 9600; //波特率为9600
  34.     dcb.ByteSize = 8; //每个字节有8位
  35.     dcb.Parity = NOPARITY; //无奇偶校验位
  36.     dcb.StopBits = ONESTOPBIT; //一个停止位
  37.     SetCommState(hCom, &dcb);//配置数据写入

  38.     return 1;
  39. }
复制代码


C.png (56.8 KB, 下载次数: 56)

C.png

MCU.png (206.5 KB, 下载次数: 58)

MCU.png

作者: ssk7793    时间: 2019-5-2 10:42
每台机接上串口后,串口号不一定是固定的。我自己电脑串口号就变动了几次
作者: 凛夏寒烟    时间: 2019-5-2 17:01
ssk7793 发表于 2019-5-2 10:42
每台机接上串口后,串口号不一定是固定的。我自己电脑串口号就变动了几次

Emmm可是我是用串口助手打开后确认端口号没问题,然后关闭串口再从C中打开串口的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1