cuốn sách gpt4 ai đã làm

Giao tiếp USB C++

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 11:52:53 39 4
mua khóa gpt4 Nike

tôi đang làm việc với thiết bị USB Đã xảy ra sự cố khi giao tiếp. Tôi không thể sử dụng libusb hoặc WinUSB vì tôi có một trình điều khiển cụ thể (Silabs USB to UART, là cầu nối USB sang nối tiếp). Đây là cách tôi khởi tạo tệp thiết bị, gửi và đọc dữ liệu cũng như đóng tay cầm.

XỬ LÝ hDevFile = CreateFile(L"\\??\\USB#VID_10C4&PID_EA60#0001#{a5dcbf10-6530-11d2-901f-00c04fb951ed}",
GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
PurgeComm(hDevFile, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);

DCB dcbInitState;
GetCommState(hDevFile, &dcbInitState);

DCB dcbNewState = dcbInitState;
dcbNewState.BaudRate = 57600;
dcbNewState.Parity = KHÔNG ĐẶC BIỆT;
dcbNewState.ByteSize = 8;
dcbNewState.StopBits = ONETOPBIT;

if (SetCommState(hDevFile, &dcbNewState) == 0)
{
printf("Không thể đặt trạng thái COM. Lỗi: %i", GetLastError());
return -1;
}

Ngủ(60);

BYTE outData[8];
outData[0] = 0x53;
outData[1] = 0x10;
outData[2] = 0x04;
outData[3] = 0x10;
outData[4] = 0x40;
outData[5] = outData[3] ^ outData[4];
outData[6] = 0xAA;
outData[7] = 0x00;
DWORD dwViết;

if (!WriteData(hDevFile, outData, 8, &dwWritten))
{
printf("Không thể ghi dữ liệu. Lỗi: %i", GetLastError());
return -1;
}

BYTE inData[8];
DWORD dwRead;

if (!ReadData(hDevFile, inData, 8, &dwRead, 2000))
{
printf("Không đọc được dữ liệu. Lỗi: %i", GetLastError());
return -1;
}

SetCommState(hDevFile, &dcbInitState);
Ngủ(60);
CloseHandle(hDevFile);
hDevFile = INVALID_HANDLE_VALUE;

(Tôi lấy tên biểu tượng thiết bị từ sổ đăng ký, nhưng tôi đã bỏ qua phần đó để giữ cho câu hỏi của mình ngắn gọn. WriteData() và ReadData() là các hàm tùy chỉnh ghi và đọc tương ứng.)

Vấn đề là SetCommState() trả về giá trị bằng 0. GetLastError() trả về 122, tức là ERROR_INSUFFICIENT_BUFFER.

Vấn đề bây giờ là PurgeComm() cũng tạo ra ERROR_INSUFFICIENT_BUFFER. CreateFile() cho ERROR_SUCCESS nên nó phải được mở chính xác.

Có chuyện gì thế? Tôi đã bỏ lỡ điều gì à?

biên tập: Tôi đã thử liệt kê các cổng COM và phát hiện ra một điều thú vị - máy tính của tôi không có cổng COM. Mặc dù thiết bị đã được kết nối và kích hoạt nhưng trình điều khiển vẫn ở đó và tất cả những thứ đó. Tôi cũng đã thử buộc \\.\COM1, \\.\COM2, v.v. làm tên tệp cho CreateFile nhưng không thành công. Lần nào cũng nhận được ERROR_FILE_NOT_FOUND.

Xin hãy giúp đỡ. Điều này rất quan trọng với tôi.

câu trả lời hay nhất

Vì đây là thiết bị CP210x nên là cổng COM ảo nên các bạn mở trong CreateFile. Bạn đã đúng khi nói rằng bạn thử sử dụng \.\COMx, bạn chỉ cần tìm hiểu xem thiết bị CP210x của bạn được chỉ định cổng COM nào và bạn sẽ không nhận được ERROR_FILE_NOT_FOUND sai lầm. Bạn có thể tìm thấy nó bằng cách tìm trong Trình quản lý thiết bị:

nhập mô tả hình ảnh ở đây

看看 Hướng dẫn truyền thông nối tiếp cho CP210x , giải thích cách thực hiện các loại cuộc gọi này đến thiết bị của bạn và thậm chí còn có tính năng khám phá cổng COM để giúp bạn tìm tên COMxx một cách linh hoạt. Ngoài ra còn có phần mềm đi kèmAN197SW.zip .

Về giao tiếp USB C++, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/25522106/

39 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress