mxx_123 2021-09-04 11:08 采纳率: 50%
浏览 66

串口发送16进制数据怎么进行读取?

#做了一个串口接收的 程序用串口发送数据的时候收到的数据错误,能不能帮我看看哪里错了。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include "tchar.h"

#include <iostream>

int main()
{
    /*****************************打开串口*************************************/
    HANDLE hCom;//全局变量,串口句柄
    hCom = CreateFile(_T("COM3"),//COM3口
        GENERIC_READ | GENERIC_WRITE,//允许读和写
        0,//独占方式
        NULL,
        OPEN_EXISTING,//打开而不是创建
        0,//同步方式
        //FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERAPPLE,//重叠方式
        NULL);
    if(hCom == (HANDLE)-1)
    {
        printf("打开COM失败!");
    }
    else {
        printf("打开COM成功!");
    }
 /****************配置串口***************/
    SetupComm(hCom, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是20480
    
    COMMTIMEOUTS TimeOuts;    
    TimeOuts.ReadIntervalTimeout = 1000;//设定读超时
    TimeOuts.ReadTotalTimeoutMultiplier = 500;
    TimeOuts.ReadTotalTimeoutConstant = 5000;    
    TimeOuts.WriteTotalTimeoutMultiplier = 500;//设定写超时
    TimeOuts.WriteTotalTimeoutConstant = 2000;
    SetCommTimeouts(hCom, &TimeOuts);//设置超时
    
    DCB dcb;
    GetCommState(hCom, &dcb);
    dcb.BaudRate = 19200;//波特率为115200
    dcb.ByteSize = 8;//每个字节有8位
    dcb.Parity = NOPARITY;//无奇偶校验位
    dcb.StopBits = ONESTOPBIT;//一个停止位
    dcb.fParity = FALSE;
    dcb.fNull = FALSE;
    SetCommState(hCom, &dcb);
    PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);//在读写串口之前清空缓冲区

     /********同步写串口********/
    TAOFENG_01:
    /*    int a;*/
        /*char * p = "你好\r\n";
        char *sendData;
        sendData = p;*/
    //    char sendData[256] = {0};//写入串口缓存区的数组
    //    /*DWORD dwWriteLen = 0;*/
    //    for(a=0; a<16; a++)
    //    {
    //        sendD[a] = a;
    //    }
    //    DWORD dwWriteLen = 0;
    //    if(!WriteFile(hCom, sendData, 16, &dwWriteLen, NULL))/*Read*/
    //    {
    //        printf("串口发送数据失败!\n");
    //    }
    //    else 
    //    {
    //        printf("串口发送数据成功!\n");
    //        printf("发送的数据为:\n");
    //        printf("%s",sendData);
    //    }
    //    printf("\n");
    //    Sleep(300);
    //goto TAOFENG_01;
    /********同步读串口********/

        //unsigned char sendData[256] = {0};//写入串口缓存区的数组
        char sendData[256]=0x100F;
        DWORD dwWriteLen = 0;
        if(!ReadFile(hCom, sendData, 2, &dwWriteLen, NULL))/*Read*/
        {
            printf("串口接收数据失败!\n");
        }
        else 
        {
            printf("串口接收数据成功!\n");
            printf("接收的数据为:\n");
            printf("%02x", sendData);
        }
            printf("\n");
        Sleep(300);
    goto TAOFENG_01;

    /***********关闭串口***********/
    CloseHandle(hCom);

    std::cout << "Hello World!\n"; 

    return 0;
}

  • 写回答

1条回答 默认 最新

  • qq_41851997 2021-09-04 11:47
    关注

    不能自发自收,你得外部有发送你才能接收到,自己发是收不到的

    评论

报告相同问题?

问题事件

  • 创建了问题 9月4日

悬赏问题

  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强