arduino串口接收数据包_arduino串口发数据c语言接收

本文探讨了Arduino通过串口发送数据到C语言端接收时遇到的数据错位问题。在Arduino端,代码简单地发送字符串'500',而在C语言端,通过CreateFile打开串口并配置超时设置,使用ReadFile进行数据读取。然而,接收到的数据呈现出错位现象,如500、550、050等。作者寻求解决方案以正确接收数据。
摘要由CSDN通过智能技术生成

这是arduino端

[mw_shl_code=arduino,true]void setup() {

Serial.begin(9600);

}

void loop() {

Serial.println("500");

}[/mw_shl_code]

这是c语言端

[mw_shl_code=c,true]#include

#include

HANDLE hCom;

int main(void)

{

char prt[3] = {0};

int i = 0;

hCom = CreateFile(TEXT("com3"),//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';

if(str[0]>='0'&&str[0]<='9')

{

prt= str[0];

i++;

}

if(i == 3)

{

printf("%s\n",prt);

i=0;

}

//printf("%c\n", str[0]);

}

Sleep(1);

}

CloseHandle(hCom);

}[/mw_shl_code]

回读数据会错位,能烦请各位解决一下吗

回读数据如下:

500

550

050

055

005

005

005

055

005

005

500

500

550

050

055

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值