나는 지난 2 주 동안 프로젝트를 진행해 왔으며 이번 주 디버깅이 이번 주 전체를 차지했습니다. 누구든지 도울 수 있는지 궁금하면 가능한 한 명확하고 명료하게 노력할 것입니다.
STM32F302K8 (Cortex M4) 기반의 MicroController에서 USB 가상 통신 포트를 구현하려고합니다. CDC 클래스를 구현하는 USB Full Speed Device를 설정하는 데 필요한 코드를 생성하기 위해 STM32CubMX를 사용했습니다. 내 장치는 Windows (장치 관리자)와 Linux 모두에 나타납니다. 예제 코드를 기반으로 간단한 에코 함수를 구현할 수 있지만 이제 USBD_CDC_SetTxBuffer 함수를 사용하여 데이터를 PC로 보내려고하면 하드 오류 처리기가 시작됩니다. USB 장치를 초기화 할 때 USBD_CDC_Init ()가 호출되지 않기 때문에 UsbDeviceFS.pClass ( USBD_CDC_SetTxBuffer에 필요) 필드가 초기화되지 않는다는 사실로이 범위를 좁혔습니다 .
ST 포럼에 문서화되었지만 여전히 동일한 오류가 발생하는 예제 코드에서 힙 크기 변경, USBD_CDC_TransmitPacket 에서 전송 플래그 수정 및 CDC_DATA_HS_MAX_PACKET_SIZE 의 크기를 512에서 256으로 변경하는 것을 포함하여 몇 가지 버그에 대한 수정 사항을 구현 했습니다.
내 장치 설정 코드는
* 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);
}