Tôi đã làm việc trên một dự án trong hai tuần qua và việc gỡ lỗi một vấn đề này đã chiếm hết cả tuần này. Tự hỏi nếu có ai có thể giúp đỡ, tôi sẽ cố gắng rõ ràng và rõ ràng nhất có thể.
Tôi đang cố gắng triển khai Cổng USB Virtual Comm trên MicroContoder dựa trên STM32F302K8 (Cortex M4). Tôi đã sử dụng STM32CubMX để tạo mã cần thiết để thiết lập Thiết bị tốc độ đầy đủ USB triển khai lớp CDC. Thiết bị của tôi xuất hiện trong cả Windows (Trình quản lý thiết bị) và Linux. Tôi có thể thực hiện một chức năng echo đơn giản dựa trên mã ví dụ nhưng khi tôi cố gắng sử dụng chức năng USBD_CDC_SetTxBuffer để gửi dữ liệu tới PC, điều này sẽ tắt Trình xử lý lỗi cứng. Tôi đã thu hẹp điều này xuống thực tế là trường USBDeviceFS.pClass (cần thiết bởi USBD_CDC_SetTxBuffer) không bao giờ được khởi tạo vì USBD_CDC_Init () không bao giờ được gọi trong quá trình khởi tạo Thiết bị USB.
Tôi đã thực hiện sửa một số lỗi (bao gồm thay đổi kích thước heap, sửa cờ truyền trong USBD_CDC_TransmitPacket và thay đổi kích thước của CDC_DATA_HS_MAX_PACKET_SIZE thành 256 từ 512) trong mã ví dụ như được ghi lại trên diễn đàn ST.
Mã thiết lập thiết bị của tôi là
* USB Device Core handle declaration */
USBD_HandleTypeDef hUsbDeviceFS;
/* init function */
void MX_USB_DEVICE_Init(void)
{
/* Init Device Library,Add Supported Class and Start the library*/
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
USBD_Start(&hUsbDeviceFS);
}