Код застревает в MX_USB_DEVICE_Init (); и фиксируется при подключении к другой стороне USB-порта - PullRequest
0 голосов
/ 08 мая 2020

Я использую STM32F103C8Tx, но USB-соединение не работает должным образом. Иногда код застревает в MX_USB_DEVICE_Init (); функция .. Более конкретно, он застревает в

USBx-> BTABLE = BTABLE_ADDRESS;

строка внутри MX_USB_DEVICE_Init ();

Когда я подключаю другую сторону USB-соединения , это будет исправлено.

В чем может быть причина? Так что мне нужно подключить USB-устройство, или оно застрянет в MX_USB_DEVICE_Init (); function?

Примечание: не имеет отношения к приоритету прерывания. Изменить: поскольку весь код слишком длинный. Вот часть, где он застревает: (я использую FREERTOS.)

void StartDefaultTask(void const * argument)
{

    /* init code for USB_DEVICE */
    MX_USB_DEVICE_Init();

    /* USER CODE BEGIN 5 */
    //Set all variables to zero at the beginning
    int dischargeSOCLevel;
    socBattery1 = -1;
    socBattery2 = -1;
    dc1_done=0;
    dc2_done=0;
    started =0;
    dc1_count=0;
    dc2_count=0;
    previous_time=0;
    pre_error=0;
    error=0;
    derivative=0;
    //integral=0;
    temperatureBank2=0;
    temperatureBank1=0;
    realise=0;
    avarage_current=0;
    avarage_counter=0;
    I2C_transmit_fail_count=0;
    I2C_receive_fail_count=0;
     currentDischargerState=DS_INITIALIZING;
    osDelay(13000);
...

Вот настройки CubeMX для USB:

CubeMX General View

CubeMX USB Window

CUbeMX USB_Device Window

Когда я отлаживаю, код застревает в этой строке:

  /*Set Btable Address*/
  USBx->BTABLE = BTABLE_ADDRESS;

Я знаю, что этот вопрос слишком общий, но я действительно не знаю, в чем проблема и где мне следует более подробно объяснить. Так что, если есть еще вопросы, задавайте.

...