Top.Mail.Ru
Уведомления
Очистить все

[Решено] USB STM32F103С8T6 (BluePill)

(@mihayk)
Level 3

Возможно ли использование USB на BluePill в качестве порта для обмена данными? Или он предназначен только как питание? Если первое возможно, то подскажите как установить драйвер для USB-интерфейса?

Цитата
Создатель темы Размещено : 28.06.2023 14:28
Aveal
(@aveal)
Top level Admin

Приветствую, да можно, самый простой вариант - CDC - https://microtechnics.ru/stm32cube-i-usb-virtual-com-port/

Virtual COM драйвер - ссылка.

ОтветитьЦитата
Размещено : 28.06.2023 15:28
(@mihayk)
Level 3

@aveal 

Благодарю за ответ. Пытался установить драйвера Virtual СОМ, но в процессе инсталляции выпадает ошибка: 1628 Failled to complete installation. Я думаю там версии предоставлены только для Win 7 и Win 8. А у меня Win 10. Есть информация по  версиям для Win 10?

ОтветитьЦитата
Создатель темы Размещено : 29.06.2023 09:33
Aveal
(@aveal)
Top level Admin

@mihayk честно не помню на 100 процентов, но по-моему на 10-ку его же ставил всегда...

ОтветитьЦитата
Размещено : 29.06.2023 17:27
(@mihayk)
Level 3

@aveal 

Установился, все ОК. Но обнаружилась неприятная ситуация:

У меня 2 контроллера STM32F1093C8T6 (BluePill). Поработав с USB c первым контроллером (ввод вывод данных через USB), я поработал со вторым контроллером (задача похожая на первую, с отличиями). Закончив работать со вторым, я переключился на первый контроллер. Но тут меня ждал неприятный эффект, этот контроллер перестал обнаруживаться, как виртуальный COM-порт. 

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

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

Что за ошибка (неопределенный дескриптор устройства в диспетчере устройств) и как избегать таких ситуаций? 

ОтветитьЦитата
Создатель темы Размещено : 29.06.2023 19:30
(@mihayk)
Level 3

Приветствую! 

Нашел причину сбоя!

Оказывается перед работой с USB-портом, если сразу идет работа с ним (в функции main()),  надо делать задержку хотя бы 2 сек (HAL_Delay(2000)) , чтобы контроллер успел инициализировать устройство USB. Выяснил методом проб и ошибок!

ОтветитьЦитата
Создатель темы Размещено : 30.06.2023 12:04
Aveal
(@aveal)
Top level Admin

@mihayk еще в идеале подтяжкой D+ через транзистор управлять, особенно если питание через этот же разъем - https://microtechnics.ru/community/elektronika/shema-usb-dlya-stm32/#post-500.

ОтветитьЦитата
Размещено : 30.06.2023 14:19
(@eduard)
Level 5 Moderator

В BluePill D+ подтянута к питанию. Что бы нормально запускалась, нужно перед инициализацией USB нужно эту ногу дёрнуть к земле и через 2 мс инициализировать USB, тогда он виндой определяется с лёту.

У меня было так

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
  MX_GPIO_Init();
  ResetUSB();                                                         // Прижимаем D+ USB к земле для запуска определения нашего устройства компьютером
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM1_Init();
  MX_ADC1_Init();
//  ResetUSB();
  MX_USB_DEVICE_Init();

ResetUSB() !!!!

 

// Фунция сброса D+ к нулю для запуска определения нашей железяки компьютером
void ResetUSB(void)
{
  // reset USB DP (D+)
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  // инициализируем пин DP как выход
  GPIO_InitStruct.Pin = GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); // прижимаем DP к "земле"
  HAL_Delay(1);
}

Работало на ура.

 

ОтветитьЦитата
Размещено : 30.06.2023 19:39
Поделиться: