Привет всем, замучился я с юсб из примера от ST Нужен виртуальный ком порт, способный передавать данные непрерывно и от нагрузки не зависающий, не зависающий, если выдернули шнур и т.д. На просторах интернета не удается найти стабильную реализацию данного режима на StdPerph, на hall есть очень стабильные варианты под STM32f103, работающие под операционкой реального времени, но мне нужно без излишеств на StdPerph. У кого, что есть кидайте. Свой глюченый пример почищу, отдельно выложу, может его можно исправить.
Например, вот все стандартно на библиотеке от ST http://mikrocontroller.bplaced.net/word ... ge_id=1263 Таких примеров море. Что мы видим, полное отсутсвие проверки, что можно пихать новые данные в ЮСБ, как так вообще? Задаю огромный буфер, но если пихать в юсб больше, чем этот буфер, то оно загинается через несколько секунд. Все примеры рассчитаны на отправку пары слов в минуту
#define CDC_DATA_MAX_PACKET_SIZE 64 /* Endpoint IN & OUT Packet size */ #define CDC_CMD_PACKET_SZE 8 /* Control Endpoint Packet size */
#define CDC_IN_FRAME_INTERVAL 0 /* Number of frames between IN transfers */ #define APP_RX_DATA_SIZE 1024*20 /* Total size of IN buffer: APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL */ - это что типа и все на чем держится эта библиотека, задаем буфер побольше, скорость поменьше?
это родная функция которая заполняет кольцевой буфер отправки, ничего не проверяя, отправились данные или нет, тупо по кругу в него гонит их и все //---------- // Ein Byte in den Sendepuffer eintragen //---------- void UB_VCP_DataTx (uint8_t wert) {
Все примеры рассчитаны на отправку пары слов в минуту
тут не пару: http://tomeko.net/miniscope_v2f/index.php?lang=en Использована, насколько помню, стандартная ST библиотека, правда это STM32F0x2 USB Full Speed Device Library. Применял тоже эту библиотеку (Virtual COM Port), работало стабильно. Там же на сайте есть осциллограф на F1 и F3 - может пригодится.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
По-моему, проблема вообще надумана, кубом генерится проект под любой мк и потом убирается все лишнее, включая HAL, если он не нужен.
Что-то говорит мне, что хол этот не разгрести, к тому же он лепит систему реально времени, на сколько я помню, но могу ошибаться. Мне хол и система реального времени не нужны. Самый простой путь, казалось бы, починить то, что есть, но я тонкостей работы юсб не знаю и в его реализацию в стм тоже не вникал. Может когда дойдут руки, а пока хотелось бы проверенное решение без зависаний и отвалов юсб.
Что-то говорит мне что хол этот не разгрести, к тому же он лепит систему реально времени, на сколько я помню, но могу ошибаться. Мне хол и система реального времени не нужны. Самый простой путь казалось бы починить то, что есть, но я тонклстей работы юсб не знаю и в его реализацию в стм тоже не вникал. Может когда дойдут руки, а поеа хотелось бы проверенное решение без зависаний и отвалов юсб.
Нет там никакой системы реального времени, там в одном месте идет настройка портов и приоритетов прерываний, нужно заменить на свое, еще раз 5 встречается пауза завязанная на SysTick, ее тоже меняешь на что угодно, остается 3 *.c из HAL(stm32f4xx_ll_usb и пара stm32f4xx_hal_pcd/pcd_ex) и соответствующие хедеры, плюс еще парочка хедеров в которых всякие макросы/перечисления по мелочи... В принципе в таком виде уже все можно и оставить, единственная возможная проблема в том, что StdPerph и HAL писали одни и те же индусы, потому какие-то имена там могут пересекаться и тогда в той части где используется HAL их придется переименовать.
Reflector, ты меня удивляешься. А чем юсб девайс отличается у линеек в старой периферии. На тебя г. либы так действуют?
Ты же про USB ничего не знаешь, взял готовую либу для F1 и пользуешься, а я брал кубовские проекты разных серий и максимально упрощал. У меня даже эндпоинты живут в отдельном классе и на одном из методов этого класса я могу продемонстрировать разницу между F1 и F4... Для примера возьмем метод Endpoint::activate() и ему сопутствующие, сначала для F4: Спойлер
Как видно общего между этими двумя методами выполняющими одно и то же крайне мало, причем если в данном случае проще иметь дело с F4, то в других может быть и наоборот. Нельзя взять либу для F1, чуть ее подправить и заставить работать с F4, а ты лезешь со своей либой для F1 уже не в первую тему, где требуется работа с F4. И CDC, а по твоему линку я вижу только намерение с этим CDC разобраться, но не похоже, что это было сделано...
Что конкретно не нравится? Я за теми двумя темами следил с момента создания, если намекаешь, что тема вообще-то про L1/F3(насколько помню, сайт сейчас не открывается), то там тот же модуль USB, что и у F1. Для F0 я не переделывал, но судя по регистрам там есть небольшие дополнения, все остальное идентично... Так в чем проблема? Ты взял готовую либу для F0, а не для F1?
Добрый день. Вот либа, которую я использую в ослике. Проект под Кейл, все собирается заливается работает и виснет через некоторое время:))) Хотя некоторые говорят, что работает хорошо. Суть такова, что от либы я не смог найти оповещение о окончании передачи, пробовал и так и сяк, но непрерывно передавать не выходит. Я передаю по 32 кбайта и занимаюь в реальной программе чем-нибудь. Проект минимальный, ничего считай нет кроме самой либы. Кто шарит, что в ней не так, по свободе может посмотрите. Либа переделана каким-то американцем(хотя национальность его не знаю), либа эта официальный пример от STM. https://yadi.sk/d/w-8-vz8K3Ng3GT
Решил не создавать отдельную тему. Эта подойдет, наверное. Извиняюсь, если вопрос идиотский.
Имею "синюю таблетку" c STM32F103C8T6. Прорабатываю на ней (учусь работать с STM32) инерциальный трекер (протокол Hatire +прога OpenTrack). Задача - реализовать виртуальный COM через USB. Воспользовался STM-овской библиотечкой STM_USB_fs_lib. В процессе пришлось выпаять пришпандоренный добрым китаезой резистор на 10кОм, перманентно подтягивающий Data+ USB к плюсу 3.3В, сделать подтяжку через резистор к ноге PB15 (USB_DISCONNECT_PIN).
Виртуальный ком, в принципе, работает хорошо, в терминале все видно, OpenTrack данные получает и выводит, как надо, ничего не отваливается. Однако, есть момент, который мне не нравится: Если перезагрузить МК, не отключая соединение в терминале (или в OpenTrack), вывод данных прекращается намертво. Вот для железяки CH340G на ардуине было не так - через некоторое время после сброса, обмен стартовал вновь. Что, конечно, удобно.
Если в описанной ситуации (остановка вывода данных после перезагрузки МК) в терминале нажать "отключение" и пересканировать наличные порты - виртуальный ком для терминала пропадает. Однако, в диспетчере устройств висит. Если контроллер сбрасывать при отключенном соединении, то после его включения все работает нормально.
Что происходит? За своевольное прекращение обмена, МК попадает в игнор у хоста? Но при перезагрузке подтяжка Data+ к 3.3В автоматом пропадает, USB-устройство отключается и подключается вновь. Как избежать этой неприятности? Что-то послать хосту перед ресетом для остановки обмена?
Сейчас этот форум просматривают: mab72 и гости: 39
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения