私は過去2週間プロジェクトに取り組んでおり、この1つの問題のデバッグにこの1週間かかりました。誰かが助けてくれるかどうか疑問に思って、私はできるだけ明確で明確になるように努めます。
STM32F302K8(Cortex M4)に基づくマイクロコントローラーにUSB仮想通信ポートを実装しようとしています。STM32CubMXを使用して、CDCクラスを実装するUSBフルスピードデバイスをセットアップするために必要なコードを生成しました。デバイスがWindows(デバイスマネージャー)とLinuxの両方に表示されます。サンプルコードに基づいて単純なエコー関数を実装できますが、関数USBD_CDC_SetTxBufferを使用してPCにデータを送信しようとすると、ハードフォールトハンドラーが起動します。USBD_CDC_Init()がUSBデバイスの初期化で呼び出されないため、UsbDeviceFS.pClass(USBD_CDC_SetTxBufferで必要)フィールドが初期化されないという事実にこれを絞り込みました。
STフォーラムに記載されているサンプルコードのいくつかのバグ(ヒープサイズの変更、USBD_CDC_TransmitPacketの送信フラグの修正、CDC_DATA_HS_MAX_PACKET_SIZEのサイズの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);
}