串口通信中ReadFile和WriteFile读出和写入的数据都是什么数据?是通信协议指令吗?

问题背景:
最近在做一个关于RFID射频识别的小设计,买了一个开发套件是R200超高频开发板,直接将数据传给PC没有通过单片机。
串口通信协议是ISO 18000-6c。我本人没有太多的基础,学过一些c和c++,想用c写一个简单的模块儿可以和该开发板通信,但我不太清楚是要怎么做,我查了查资料,网上大部分说是用win32的API和它进行串口通信,通过ReadFile和WriteFile进行数据的读取和写入,然后我去尝试了一下,我写入的直接是串口通信协议指令,但是ReadFile却什么数据都读不到,我不太理解是怎么回事,希望能有大家帮我指点一下是我的过程错了,还是我传的数据错了,还是我整个思路都错了?

代码如下:

#include<windows.h>
#include<stdio.h>
#include<winbase.h>

int Init(HANDLE hcom)                  //对串口进行初始化的函数 
{
    DCB dcb;//DCB是一个结构体类型

    if (GetCommState(hcom, &dcb) == 0)   
    {
        printf("获取串口状态失败!");
        return 0;
    }
    printf("获取串口状态成功\n");
    printf("串口的波特率是:%u\n", dcb.BaudRate);
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.StopBits = ONESTOPBIT;
    printf("改变后的串口的波特率是:%u\n", dcb.BaudRate);
    if (SetCommState(hcom, &dcb) == 1)
    {
        printf("改变串口状态成功!\n");
    }
    else
    {
        printf("改变串口状态失败!\n");
        return 0;
    }
    PurgeComm(hcom, PURGE_TXCLEAR | PURGE_RXCLEAR);
    return 1;
}

int main()
{
    HANDLE hcom;
    unsigned char buf[10] = { 0xBB,0x00,0x27,0x00,0x03,0x22,0x00,0xFF,0x4A,0x7E};//写入缓冲区 
    unsigned char buf1[1024] = { 0 };//读取缓冲区 
    DWORD num = 0;
    DWORD num1 = 0;
    OVERLAPPED overlap;
    OVERLAPPED overlap1;
    bool rc, rc1;
    
    hcom = CreateFile("COM6", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
    if (hcom == INVALID_HANDLE_VALUE)//invalid 无效的,指无效的句柄值 
    {
        printf("error!\n");
        return -1;
    }
    else
        printf("success!\n");
    if (Init(hcom) == 1)                  //对串口进行初始化 
        printf("初始化成功!\n");
    memset(&overlap, 0, sizeof(overlap));   //初始化结构体overlap
    overlap.Offset = 0;

    rc = WriteFile(hcom, buf, sizeof(buf), &num, &overlap);
    if (rc)
    {
        printf("书写成功!\n");
    }
    else
    {
        if (GetLastError() == ERROR_IO_PENDING)
        {
            printf("还在书写中,waiting...\n");
            WaitForSingleObject(hcom, INFINITE);
            rc = GetOverlappedResult(hcom, &overlap, &num, FALSE);
            printf("书写成功!\n\n");
        }
        else
        {
            printf("写入失败!\n");
            return -1;
        }
    }
    Sleep(1000);

    memset(&overlap1, 0, sizeof(overlap1));
    memset(&buf1, 0, sizeof(buf1));
    overlap1.Offset = 0;
    rc1 = ReadFile(hcom, buf1, 24, &num1, &overlap1);   //遇到了个问题,缓冲区是什么?  LPOVERLAPPED的参数是什么我也不理解
    if (rc1)
    {

    }
    else
    {
        if (GetLastError() == ERROR_IO_PENDING)   //意味着当线程还在进行中
        {
            printf("数据读取中,waiting....\n");
            WaitForSingleObject(hcom, 5000);//等待文件读完 
            rc1 = GetOverlappedResult(hcom, &overlap1, &num1, FALSE);//函数返回指定文件(名称为管道或通信设备)上的重叠操作的结果。
            if (num1!= 0)
                printf("读取成功!\n");
            else
                printf("读取失败555\n");
        }
        else
        {
            printf("读取线程失败!\n");
            return -1;
        }
    }
    printf("读取出来的数据长度是:%d\n", num1);
    printf("读取出来的数据是:%x\n", buf1[0]);


    if (CloseHandle(hcom) == 0)
        printf("关闭串口失败\n");
    else
        printf("关闭串口成功\n");
    return 0;
}

运行结果:

img

谢谢各位!