windows C语言读串口数据_win10 c语言读取串口数据,2024年最新2024年物联网嵌入式开发常见面试题

118 阅读2分钟
char str;

while (1)
{
	fscanf(fp, "%c", &str);
	printf("%c ", str);

	Sleep(100);
}

return 0;

}


(2)这是可以打开串口并且应该是通用的方法




#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);

}


  
 在用readFile和WriteFile读写串口的时候需要考虑超时问题,超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile和WriteFile的操作仍然会结束。要查询当前的超时设置应该调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS


结构,调用SetCommTimeouts可以用某一个COMMTIMEOUTS来设置超时。


读写串口的超时总共有两种,间隔超时和总超时。间隔超时是指读取两个字符之间的延时,总超时是指读写操作总共花费的时间。写操作只支持总超时,读操作两种超时都支持。


typedef struct \_COMMTIMEOUTS {   
 



          DWORD ReadIntervalTimeout; //读间隔超时  
 


          DWORD ReadTotalTimeoutMultiplier; //读时间系数  
 


          DWORD ReadTotalTimeoutConstant; //读时间常量  
 


**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0fa7642d0d464b70ad331c29ef64d151~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066021&x-signature=WrRMfd2IrPM0i0eqZIp3ZmU8UtM%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8a861d99641e460992c617c544fda518~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066021&x-signature=aaVgFfIbZQ%2B5rruUp%2FY7HKEGi9E%3D)

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**