Перейти к содержанию
    

USB CDC и STM32F103. Попытка передать байт всегда возвращает USBD_BUSY

Контроллер STM32F103C8T6

Проект (не плюйтесь) сгенерирован в кубе под Keil.

Quote

/* USER CODE BEGIN PV */
    uint8_t DataOut[400];
    uint8_t *pDataOut;
        char str_tx[21];
        unsigned int j;
    
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_USB_DEVICE_Init();

    pDataOut=DataOut;
     sprintf(str_tx,"USB Transmit\r\n");
     
   
     
  while (1)
  {
        
        
        if (CDC_Transmit_FS((unsigned char*)str_tx, strlen(str_tx))==USBD_OK) 
        {    
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_12);
        }    
        HAL_Delay(500);
        
        
  }
  /* USER CODE END 3 */
}

ИнициализацияUSB

 

Quote

void MX_USB_DEVICE_Init(void)
{
  /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */
  
  /* USER CODE END USB_DEVICE_Init_PreTreatment */
  
  /* 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);

  /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */
  
  /* USER CODE END USB_DEVICE_Init_PostTreatment */
}
 

 

Да - само устройство в системе видится как COM порт, с этим проблем нет.

Но при попытке что-то передать - всегда возвращается USBD_BUSY.

Ну и в Терминале на компе ничего не принимается, етественно.

Куда копать? Что проверить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ответ нашелся. Но он породил еще один вопрос.

Оказывается нужно всего лишь передергивать затвор. USB кабель в смысле.

То есть, к примеру, все работает, данные отправляются.

Перепрошиваю контроллер той же прошивкой - программа запускается, но данные не отправляются.

А вот если передернуть USB кабель - то отправка данных вновь возобновляется.

 

Как  с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, zheka said:

Как  с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке.

Будет... :wink:  Ибо это сатанинское отродье - USB по природе своей таково.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 минут назад, zheka сказал:

Перепрошиваю контроллер той же прошивкой - программа запускается, но данные не отправляются.

А вот если передернуть USB кабель - то отправка данных вновь возобновляется.

Как  с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке.

Выпрямлять своё ПО или руки разработчику схемы. Потому что нормально написанное ПО на правильной схеме сперва отключается от шины, посылая хосту уведомление, что устройство отключено, а потом через некоторое время подключается - уведомляя хоста о своём подключении и необходимости выполнить энумерацию заново.

Ну и COM-порт на ПК тоже при этом закрывать нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гуру обычно берут один из 100500 проектов USB-CDC и минут 20 смотрят/используют.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...