|
发表于 2024-1-28 14:37:31
|
显示全部楼层
首先,你需要选择一个可用的串口库来完成串口收发功能。在C语言中,常用的串口库有Windows API、libserialport等。在这里,我使用Windows API来演示。
下面是一个简单的例子,展示如何通过串口与设备进行收发数据。
- #include <stdio.h>
- #include <windows.h>
- int main()
- {
- HANDLE hSerial;
- DCB dcbSerialParams = { 0 };
- COMMTIMEOUTS timeouts = { 0 };
- char port[] = "\\\\.\\COM1"; // 根据实际的串口号修改
- // 打开串口
- hSerial = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (hSerial == INVALID_HANDLE_VALUE) {
- printf("无法打开串口\n");
- return 1;
- }
- // 配置串口参数
- dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
- if (!GetCommState(hSerial, &dcbSerialParams)) {
- printf("无法获取串口参数\n");
- CloseHandle(hSerial);
- return 1;
- }
- dcbSerialParams.BaudRate = CBR_9600; // 波特率设置为9600bps
- dcbSerialParams.ByteSize = 8; // 数据位设置为8位
- dcbSerialParams.StopBits = ONESTOPBIT; // 停止位设置为1位停止位
- dcbSerialParams.Parity = NOPARITY; // 校验位设置为无校验
- if (!SetCommState(hSerial, &dcbSerialParams)){
- printf("无法设置串口参数\n");
- CloseHandle(hSerial);
- return 1;
- }
- // 设置串口读写超时时间
- timeouts.ReadIntervalTimeout = 50;
- timeouts.ReadTotalTimeoutConstant = 50;
- timeouts.ReadTotalTimeoutMultiplier = 10;
- timeouts.WriteTotalTimeoutConstant = 50;
- timeouts.WriteTotalTimeoutMultiplier = 10;
- if (!SetCommTimeouts(hSerial, &timeouts)) {
- printf("无法设置串口超时时间\n");
- CloseHandle(hSerial);
- return 1;
- }
- // 向串口发送数据
- char sendData[] = "Hello, Serial!";
- DWORD bytesWritten = 0;
- if (!WriteFile(hSerial, sendData, sizeof(sendData), &bytesWritten, NULL)) {
- printf("无法向串口发送数据\n");
- CloseHandle(hSerial);
- return 1;
- }
- printf("已发送数据:%s\n", sendData);
- // 从串口接收数据
- char recvData[32] = { 0 };
- DWORD bytesRead = 0;
- if (!ReadFile(hSerial, recvData, sizeof(recvData), &bytesRead, NULL)) {
- printf("无法从串口接收数据\n");
- CloseHandle(hSerial);
- return 1;
- }
- printf("已接收数据:%s\n", recvData);
- // 关闭串口
- CloseHandle(hSerial);
- return 0;
- }
复制代码
请注意,上述代码使用了Windows API中的串口相关函数。在运行之前,你需要根据实际的串口号修改`port[]`的值,并确保你的计算机上具有相应的串口设备。
这只是一个简单的示例,用于演示如何使用C语言进行串口收发的上位机控制。你可以根据自己的需求进行进一步的开发和扩展。希望对你有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|