Добрый день.
Помогите разобраться с работой USB на F103 мк.
Увидел одно устройство - оно работает в can шине. Но его можно подключить по USB, тогда оно перезагрузится и по USB можно поменять настройки в нем. При отключении USB оно вновь перезагружается и работает по can с новыми настройками.
пробовал реализовать такое сам.
Сделал 2 проекта в CubeMX, один по кан шлет один пакет в шину, второй через виртуальный ком порт шлет данные в USB.
По отдельности работает, но когда хочу объединить в один - не работает.
Можно заставить заработать USB, если выполнить
HAL_CAN_Stop(&hcan); HAL_CAN_DeInit(&hcan);
но заставить в этом проекте работать CAN у меня ни как не получается.
Пробовал закомментировать строку инициализации USB в main.c, в надежде что без этого can запустится, но тщетно
MX_USB_DEVICE_Init();
позже пробовал запустить деинициализацию USB
USBD_Stop(&hUsbDeviceFS); USBD_DeInit(&hUsbDeviceFS);
но тщетно.
Как в проекте отключить инициализацию USB и оставить только инициализацию кан?
Хочу или перемычкой, или заведу напряжение с USB на отдельный пин, что бы была возможность двойной загрузки.
Добрый день!
Делал подобное когда-то, постараюсь восстановить воспоминания. Вроде как система такая:
1. Включается тактирование CAN, USB не работает.
2. Отключается тактирование CAN, USB восстанавливает работоспособность.
Соответственно, детектируем подключение USB - отключаем CAN, работаем по USB, по окончанию - включаем CAN.
да, именно так и работает. Была ошибка в тактировании того проекта, что бы с USB.
Как детектировали USB? Через диод подавали напряжение на один из пинов или программно?
Электрически чаще. В одном недавнем проекте - питание от аккумулятора, но при подключении USB начинается зарядка и схема питается от USB. При этом постоянно мониторится входное напряжение, соответственно, когда USB подключено там 5В. Порог спокойно можно брать 4.5В и сравнивать ) Но это частный случай, скорее нетрадиционный, чем типичный, так что по сути да - по напряжению с USB разъема.
Программно в текущей версии HAL есть колбэки:
HAL_PCD_DisconnectCallback() HAL_PCD_ConnectCallback()
Но это все основано на мониторинге VBUS, так что аналогично в принципе.