Sasakisouji 2022-01-18 20:41 采纳率: 71.4%
浏览 26
已结题

用c语言实现串口通讯,无法识别DCB和COMMTIMEOUTS结构体

代码如下(从社区找的模板),无法通过校验,望指正,谢谢!


#include <Windows.h>
#include <stdio.h>
 
HANDLE hCom;

int main(void)
{
    hCom = CreateFile(TEXT("com6"),//COM1口
        GENERIC_READ, //允许读
        0, //指定共享属性,由于串口不能共享,所以该参数必须为0
        NULL,
        OPEN_EXISTING, //打开而不是创建
 
        FILE_ATTRIBUTE_NORMAL, //属性描述,该值为FILE_FLAG_OVERLAPPED,表示使用异步I/O,该参数为0,表示同步I/O操作
        NULL);
 
    if (hCom == INVALID_HANDLE_VALUE)
    {
        printf("打开COM失败!\n");
        return FALSE;
    }
    else
    {
        printf("COM打开成功!\n");
    }
 
    SetupComm(hCom, 1024, 1024); //输入缓冲区和输出缓冲区的大小都是1024
 
    /*********************************超时设置**************************************/
    COMMTIMEOUTS TimeOuts;
    //设定读超时
    TimeOuts.ReadIntervalTimeout = MAXDWORD;//读间隔超时
    TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
    TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
    TimeOuts.WriteTotalTimeoutMultiplier = 1;//写时间系数
    TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量
    SetCommTimeouts(hCom, &TimeOuts); //设置超时
    
    /*****************************************配置串口***************************/
    DCB dcb;
    GetCommState(hCom, &dcb);
    dcb.BaudRate = 9600; //波特率为9600
    dcb.ByteSize = 8; //每个字节有8位
    dcb.Parity = NOPARITY; //无奇偶校验位
    dcb.StopBits = ONESTOPBIT; //一个停止位
    SetCommState(hCom, &dcb);
 
    DWORD wCount;//实际读取的字节数
    bool bReadStat;
 
    char str[2] = { 0 };
 
    while (1)
    {
        //PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); //清空缓冲区
        bReadStat = ReadFile(hCom, str, sizeof(str), &wCount, NULL);
 
        if (!bReadStat)
        {
            printf("读串口失败!");
            return FALSE;
        }
        else
        {
            //str[1] = '\0';
            printf("%c\n", str[0]);
        }
        Sleep(100);
    }
 
    CloseHandle(hCom);
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月26日
    • 创建了问题 1月18日

    悬赏问题

    • ¥30 STM32 INMP441无法读取数据
    • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
    • ¥15 用visualstudio2022创建vue项目后无法启动
    • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
    • ¥500 把面具戴到人脸上,请大家贡献智慧
    • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
    • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
    • ¥30 c#打开word开启修订并实时显示批注
    • ¥15 如何解决ldsc的这条报错/index error
    • ¥15 VS2022+WDK驱动开发环境