zheka 1 2 июня, 2019 Опубликовано 2 июня, 2019 · Жалоба Контроллер 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. Ну и в Терминале на компе ничего не принимается, етественно. Куда копать? Что проверить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 2 июня, 2019 Опубликовано 2 июня, 2019 · Жалоба Ответ нашелся. Но он породил еще один вопрос. Оказывается нужно всего лишь передергивать затвор. USB кабель в смысле. То есть, к примеру, все работает, данные отправляются. Перепрошиваю контроллер той же прошивкой - программа запускается, но данные не отправляются. А вот если передернуть USB кабель - то отправка данных вновь возобновляется. Как с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 2 июня, 2019 Опубликовано 2 июня, 2019 · Жалоба 3 minutes ago, zheka said: Как с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке. Будет... Ибо это сатанинское отродье - USB по природе своей таково. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 2 июня, 2019 Опубликовано 2 июня, 2019 · Жалоба 28 минут назад, zheka сказал: Перепрошиваю контроллер той же прошивкой - программа запускается, но данные не отправляются. А вот если передернуть USB кабель - то отправка данных вновь возобновляется. Как с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке. Выпрямлять своё ПО или руки разработчику схемы. Потому что нормально написанное ПО на правильной схеме сперва отключается от шины, посылая хосту уведомление, что устройство отключено, а потом через некоторое время подключается - уведомляя хоста о своём подключении и необходимости выполнить энумерацию заново. Ну и COM-порт на ПК тоже при этом закрывать нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 34 2 июня, 2019 Опубликовано 2 июня, 2019 · Жалоба Гуру обычно берут один из 100500 проектов USB-CDC и минут 20 смотрят/используют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться