mxx_123 2021-09-22 12:02 采纳率: 50%
浏览 27

c程序读取串口数据,读取到的数组排序

编写c语言串口读取数据的时候发送的数据为:5A A5 01 00 00 00等,收到的数据不是5A A5 开头的,想了一下加当型循环,加了之后发现没办法重新进行读取,该怎么让程序收到的数据是5A A5 开头的? 麻烦再帮我看看程序有什么错误。


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include "tchar.h"
int main()
{
 HANDLE hCom1;
 hCom1 = CreateFile(_T("COM3"),//COM1口
  GENERIC_READ | GENERIC_WRITE,//允许读和写
  0,//独占方式
  NULL,
  OPEN_EXISTING,//打开而不是创建
  0,//同步方式
  NULL);
 if (hCom1 == (HANDLE)-1)
 {
  printf("打开COM失败!\n");
  return FALSE;
 }
 else
 {
  printf("COM打开成功!\n");
 }
 SetupComm(hCom1, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是1024
 COMMTIMEOUTS TimeOuts;
 //设定读超时
 TimeOuts.ReadIntervalTimeout = 1000;
 TimeOuts.ReadTotalTimeoutMultiplier = 500;
 TimeOuts.ReadTotalTimeoutConstant = 5000;
 //设定写超时
 TimeOuts.WriteTotalTimeoutMultiplier = 500;
 TimeOuts.WriteTotalTimeoutConstant = 2000;
 SetCommTimeouts(hCom1, &TimeOuts);//设置超时
 DCB dcb1;
 GetCommState(hCom1, &dcb1);
 dcb1.BaudRate = 19200;//波特率为19200
 dcb1.ByteSize = 8;//每个字节有8位
 dcb1.Parity = NOPARITY;//无奇偶校验位
 dcb1.StopBits = TWOSTOPBITS;//两个停止位
 dcb1.fParity = FALSE;
 dcb1.fNull = FALSE;
 SetCommState(hCom1, &dcb1);
 DWORD wCount=28;//读取的字节数
 PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区
     /*TAOFENG_01:*/
  while (1)
  {
 unsigned char str[256]={0}/*=0x100F*/;
  unsigned int i = 0;
  if (!ReadFile(hCom1, str, wCount, &wCount, NULL))
    {
    printf("读串口失败!");
    return FALSE;
    }
   else
     {
        printf("读串口成功!\n读取数据为:\n");
        printf("第一第二个字节为:%02X% 02X\n ",str[1],str[2]);
        for(i=0;i<wCount;i++)
        {
            printf("%02X ",str[i]);
        }
        printf("\n");
        
      }
  }
//PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区
    /*    Sleep(300);
    goto TAOFENG_01;*/
}
  • 写回答

1条回答 默认 最新

  • 於黾 2021-09-22 13:36
    关注

    你一次只读一个字节,读到5A之后开始赋值给数组,否则数据直接丢弃。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月22日

悬赏问题

  • ¥15 web前端开发怎么实现像图片这样的页面啊?
  • ¥15 ubuntu 20.04 网卡启用后,只有ipv6 没有 ipv4 无法上网
  • ¥15 QT任务管理器无法正确获取展开,有悬赏15元速求,如何解决?(相关搜索:标识符|结构体)
  • ¥15 使用delphi 10.3+intraweb 生成的页面怎么实现自动滚屏
  • ¥20 思科:Router c3600 MN-4E插槽
  • ¥15 16进制修改视频的元数据
  • ¥15 HTML中css的位置信息居然会导致元素大小发生变化
  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 有偿指导软件编程与八股
  • ¥15 石墨烯磁表面等离子体