Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32f4xx + USB CDC + StdPerph

Пт июл 28, 2017 23:32:56

Привет всем, замучился я с юсб из примера от ST :facepalm: Нужен виртуальный ком порт, способный передавать данные непрерывно и от нагрузки не зависающий, не зависающий, если выдернули шнур и т.д. На просторах интернета не удается найти стабильную реализацию данного режима на StdPerph, на hall есть очень стабильные варианты под STM32f103, работающие под операционкой реального времени, но мне нужно без излишеств на StdPerph. У кого, что есть кидайте. Свой глюченый пример почищу, отдельно выложу, может его можно исправить.

Re: STM32f4xx + USB CDC + StdPerph

Сб июл 29, 2017 09:37:30

Например, вот все стандартно на библиотеке от ST http://mikrocontroller.bplaced.net/word ... ge_id=1263 Таких примеров море. Что мы видим, полное отсутсвие проверки, что можно пихать новые данные в ЮСБ, как так вообще? Задаю огромный буфер, но если пихать в юсб больше, чем этот буфер, то оно загинается через несколько секунд. Все примеры рассчитаны на отправку пары слов в минуту :kill:

#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)
{

APP_Rx_Buffer[APP_Rx_ptr_in] = wert;
APP_Rx_ptr_in++;

if(APP_Rx_ptr_in >= APP_RX_DATA_SIZE)
{
APP_Rx_ptr_in = 0;
}
}

Re: STM32f4xx + USB CDC + StdPerph

Сб июл 29, 2017 10:24:22

Все примеры рассчитаны на отправку пары слов в минуту

тут не пару: http://tomeko.net/miniscope_v2f/index.php?lang=en
Использована, насколько помню, стандартная ST библиотека, правда это STM32F0x2 USB Full Speed Device Library.
Применял тоже эту библиотеку (Virtual COM Port), работало стабильно.
Там же на сайте есть осциллограф на F1 и F3 - может пригодится.

Re: STM32f4xx + USB CDC + StdPerph

Пн июл 31, 2017 22:58:16

правда это STM32F0x2
Спасибо, но с F0 я его не портирую. У кого еще, что есть на примете?

Re: STM32f4xx + USB CDC + StdPerph

Сб авг 05, 2017 11:38:57

По вышепреведенной ссылке есть вариант miniscope_v2d там на Ф303 , посмотрите.

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 12:15:10

Вот это:
http://forum.easyelectronics.ru/viewtop ... 17&t=27404
собран девайс на "BluePill" (F103), работает через BT или USB.
Я пробовал, вещь рабочая. Цеплял и на Android, и на Windows PC.
Мои фотки:
http://bildites.lv/a/xfjbphbf#33yk2zed

----------
http://tomeko.net/miniscope_v2d/index.php?lang=en
Я там тоже в конце статьи засветился - с переделанным "BluePill" , с чипом F303 ;-)
Последний раз редактировалось Juris Пн сен 04, 2017 12:22:21, всего редактировалось 1 раз.

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 12:20:22

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

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 15:20:05

По-моему, проблема вообще надумана, кубом


Не говори-ка, одно но - можно же сразу и без разгребания шлака калокуба/спл нормально делать...
http://mcu.goodboard.ru/viewtopic.php?id=40

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 15:47:46

Не говори-ка, одно но - можно же сразу и без разгребания шлака калокуба/спл нормально делать...
http://mcu.goodboard.ru/viewtopic.php?id=40

Это для F1/F3 и т.д., а нужно для F4.

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 19:28:35

По-моему, проблема вообще надумана, кубом генерится проект под любой мк и потом убирается все лишнее, включая HAL, если он не нужен.
Что-то говорит мне, что хол этот не разгрести, к тому же он лепит систему реально времени, на сколько я помню, но могу ошибаться. Мне хол и система реального времени не нужны. Самый простой путь, казалось бы, починить то, что есть, но я тонкостей работы юсб не знаю и в его реализацию в стм тоже не вникал. Может когда дойдут руки, а пока хотелось бы проверенное решение без зависаний и отвалов юсб.

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 20:27:22

Что-то говорит мне что хол этот не разгрести, к тому же он лепит систему реально времени, на сколько я помню, но могу ошибаться. Мне хол и система реального времени не нужны. Самый простой путь казалось бы починить то, что есть, но я тонклстей работы юсб не знаю и в его реализацию в стм тоже не вникал. Может когда дойдут руки, а поеа хотелось бы проверенное решение без зависаний и отвалов юсб.

Нет там никакой системы реального времени, там в одном месте идет настройка портов и приоритетов прерываний, нужно заменить на свое, еще раз 5 встречается пауза завязанная на SysTick, ее тоже меняешь на что угодно, остается 3 *.c из HAL(stm32f4xx_ll_usb и пара stm32f4xx_hal_pcd/pcd_ex) и соответствующие хедеры, плюс еще парочка хедеров в которых всякие макросы/перечисления по мелочи... В принципе в таком виде уже все можно и оставить, единственная возможная проблема в том, что StdPerph и HAL писали одни и те же индусы, потому какие-то имена там могут пересекаться и тогда в той части где используется HAL их придется переименовать.

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 20:56:09

Reflector, ты меня удивляешься. А чем юсб девайс отличается у линеек в старой периферии.
На тебя г. либы так действуют?

Re: STM32f4xx + USB CDC + StdPerph

Пн сен 04, 2017 22:06:35

Reflector, ты меня удивляешься. А чем юсб девайс отличается у линеек в старой периферии.
На тебя г. либы так действуют?

Ты же про USB ничего не знаешь, взял готовую либу для F1 и пользуешься, а я брал кубовские проекты разных серий и максимально упрощал. У меня даже эндпоинты живут в отдельном классе и на одном из методов этого класса я могу продемонстрировать разницу между F1 и F4... Для примера возьмем метод Endpoint::activate() и ему сопутствующие, сначала для F4:

Теперь F1/F3:

Как видно общего между этими двумя методами выполняющими одно и то же крайне мало, причем если в данном случае проще иметь дело с F4, то в других может быть и наоборот. Нельзя взять либу для F1, чуть ее подправить и заставить работать с F4, а ты лезешь со своей либой для F1 уже не в первую тему, где требуется работа с F4. И CDC, а по твоему линку я вижу только намерение с этим CDC разобраться, но не похоже, что это было сделано...

Re: STM32f4xx + USB CDC + StdPerph

Вт сен 05, 2017 06:12:33

Ты же про USB ничего не знаешь, взял готовую либу для F1 и пользуешься, ..


То есть , ты даже и ссылку не смотрел...

Re: STM32f4xx + USB CDC + StdPerph

Вт сен 05, 2017 09:02:51

То есть , ты даже и ссылку не смотрел...

Что конкретно не нравится? Я за теми двумя темами следил с момента создания, если намекаешь, что тема вообще-то про L1/F3(насколько помню, сайт сейчас не открывается), то там тот же модуль USB, что и у F1. Для F0 я не переделывал, но судя по регистрам там есть небольшие дополнения, все остальное идентично... Так в чем проблема? Ты взял готовую либу для F0, а не для F1? :)

Re: STM32f4xx + USB CDC + StdPerph

Вт сен 05, 2017 17:33:43

Проблема , и проблема лишь твоя , что ты воспринимаешь окружающий мир только сквозь либы.
Расширь свой кругозор...

Re: STM32f4xx + USB CDC + StdPerph

Ср окт 11, 2017 21:41:11

Добрый день. Вот либа, которую я использую в ослике. Проект под Кейл, все собирается заливается работает и виснет через некоторое время:))) Хотя некоторые говорят, что работает хорошо. Суть такова, что от либы я не смог найти оповещение о окончании передачи, пробовал и так и сяк, но непрерывно передавать не выходит. Я передаю по 32 кбайта и занимаюь в реальной программе чем-нибудь. Проект минимальный, ничего считай нет кроме самой либы. Кто шарит, что в ней не так, по свободе может посмотрите. Либа переделана каким-то американцем(хотя национальность его не знаю), либа эта официальный пример от STM. https://yadi.sk/d/w-8-vz8K3Ng3GT

Re: STM32f4xx + USB CDC + StdPerph

Вс янв 14, 2018 11:56:03

Тема закрыта, взял рабочую библиотеку из CubeMX.

Re: STM32f4xx + USB CDC + StdPerph

Ср июл 18, 2018 19:37:30

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

Решил не создавать отдельную тему. Эта подойдет, наверное.
Извиняюсь, если вопрос идиотский.

Имею "синюю таблетку" 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-устройство отключается и подключается вновь. Как избежать этой неприятности? Что-то послать хосту перед ресетом для остановки обмена?

Потыкайте носом хотя бы, куда смотреть.

Re: STM32f4xx + USB CDC + StdPerph

Чт июл 19, 2018 12:33:53

Всё понимаю, кроме "перегрузить МК". У вас на нём windows, что его перегружать надо?
Ответить