Jump to content

STM32F407ZGT USB OTG FS CDC


SuperЛёха
 Share

Recommended Posts

Доброго всем времени суток и времени года :-)

Очередной затык, и не могу понять в каком направлении двигаться, может кто подскажет...

Использую связь устройства на STM32F407ZGT с ПК по USB CDC (периферия USB OTG FS).

Использую HAL STM32CubeIDE.

В программе много критических прерываний от таймеров, куда важнее чем USB, но очень нужно чтобы и USB работало. 

Естественно что у критических событий приоритет наивысший, и если приоритет прерывания USB понизить - USB перестаёт работать в Windows, оно определяется но мол не может работать и всё тут.

Если же приоритет повысить - USB работает, но прерывание USB как то долго обрабатывается в коде, драйвере ST или ещё в какой то ж-пе (не могу разобраться в ST дебрях) и перебивает надолго критически важные прерывания.

Может я сделал ошибку используя  USB OTG FS и нужно было иными способами с USB OTG HS как то через DMA сделать это? Но через DMA обмениваться 8 байтами как то тоже не правильно посчитал я в начале проекта.

Может у кого то есть код USB CDC более оптимален по быстродействию?

Link to comment
Share on other sites

46 минут назад, SuperЛёха сказал:

оно определяется но мол не может работать и всё тут.

Правильно, USB критичен к времени обработки запросов.

 

47 минут назад, SuperЛёха сказал:

но прерывание USB как то долго обрабатывается в коде

Придется избавляться от HAL, калокуба и прочего мусора. Да и что там вообще может долго обрабатываться? Там же просто работа с буферами памяти. Или вы туда всю логику работы программы засунули?

 

49 минут назад, SuperЛёха сказал:

используя  USB OTG FS и нужно было иными способами с USB OTG HS

Каким боком OTG относится к CDC? Это разные вещи вообще. Плюс не проще ли поставить туда USB-UART конвертер?

 

51 минуту назад, SuperЛёха сказал:

Может у кого то есть код USB CDC более оптимален по быстродействию?

Поищите на форуме easyelectronics, мне в свое время там помогли с USB HID под 303 камень...

Link to comment
Share on other sites

19 минут назад, BARS_ сказал:

Придется избавляться от HAL, калокуба и прочего мусора. Да и что там вообще может долго обрабатываться? Там же просто работа с буферами памяти. Или вы туда всю логику работы программы засунули?

Я в прерывании от USB поднимаю только флаг, что данные приняты, но как будто до функции прерывания ещё что то делается и это "долго".

21 минуту назад, BARS_ сказал:

Каким боком OTG относится к CDC? Это разные вещи вообще. Плюс не проще ли поставить туда USB-UART конвертер?

Я про периферийные блоки, их 2 в 407-м один вроде как с DMA может работать, другой нет.

22 минуты назад, BARS_ сказал:

Придется избавляться от HAL, калокуба и прочего мусора. Да и что там вообще может долго обрабатываться? Там же просто работа с буферами памяти. Или вы туда всю логику работы программы засунули?

Это нужно быть уже мега программистом :-)), а я больше универсальный спец, таким не возможно освоить всё в идеале.

26 минут назад, BARS_ сказал:

Каким боком OTG относится к CDC? Это разные вещи вообще. Плюс не проще ли поставить туда USB-UART конвертер?

Если не получится довести до ума, видимо так и придётся конвертер ставить и забыть этот страшный сон с USB.

Link to comment
Share on other sites

Химические элементы FANSO EVE Energy для питания беспроводных датчиков
Литиевые батарейки различного химического состава и разных типоразмеров широко используются в беспроводных датчиках систем сбора данных, промышленной автоматики и систем умного дома. И в любом из многочисленных вариантов использования беспроводных датчиков основными требованиями к их работе являются автономность и бесперебойность функционирования.
Главным условием, гарантирующим такую работу, является правильный выбор элемента питания для датчика.

Подробнее >>

Сравнительное тестирование алкалиновых батареек POWER FLASH 

В потребительском и промышленном сегментах российского рынка химических источников тока имеется множество щелочных (алкалиновых) батареек различных производителей и ценовых категорий. Но велика ли разница в их качестве?

Провели небольшой сравнительный тест, чтобы понять, могут ли источники тока POWER FLASH эффективно заменить продукцию таких известных производителей, как Duracell и GP, вычислить, чему равна стоимость одного часа работы батареек, а также сравнить полученные данные со значениями, указанными в технической документации.  Подробнее>>

1 час назад, tvvm сказал:

Посмотрите статью https://habr.com/ru/post/674662/ .

Благодарю, статья интересная, но автор использует ту же библиотеку от ST. 

Только что, SuperЛёха сказал:

 

Подозреваю, что в дебрях USB не просто разобраться и не осилить мне, поэтому буду смотреть и добавлять скорее всего CP2102 и далее работать с UART->CP2102->USB

Link to comment
Share on other sites

Новые источники питания на DIN-рейку класса High End от MORNSUN
Компания MORNSUN разработала новую линейку ИП с креплением на DIN-рейку класса High End. Линейка состоит из двух семейств однофазных ИП, различающихся функционалом (LIMF и LIHF) и одного семейства на трехфазное напряжение (LITF). У всех этих ИП печатная плата с компонентами имеет лаковое покрытие. Продукция работоспособна в температурном диапазоне -40...85ºС (для однофазных) и -30...70ºС (для трехфазных). Кроме того, однофазные ИП соответствуют требованиям ATEX и могут использоваться во взрывоопасных зонах. Семейство LIMF имеет стандартный функционал (ККМ, сухой контакт реле, 150% перегрузочная способность), а семейство LIHF – максимальный функционал с доп. функциями селективной защиты (SFB) и возможностью дистанционного управления (может заменить серию QUINT от Phoenix Contact).

Подробнее >>

А думаешь если задействуешь USART то что то изменится? Всё равно придётся слать данные и получать в прерывании и это же прерывание будет мешать я уже пробовал у хвалёных STM на 100 МГц сил не хватает.

Link to comment
Share on other sites

9 часов назад, MechanicV сказал:

А думаешь если задействуешь USART то что то изменится? Всё равно придётся слать данные и получать в прерывании и это же прерывание будет мешать я уже пробовал у хвалёных STM на 100 МГц сил не хватает.

Думаю это решит проблему, т.к. один UART уже задействован под modbus, и работает без нареканий.

Link to comment
Share on other sites

В STM работа с UART очень красиво решается с использованием DMA и прерывания IDLE. В результате получаем полностью аппаратный прием данных с прерыванием в конце каждого пакета. Нагрузка на камень в итоге минимальная.

Link to comment
Share on other sites

22 минуты назад, BARS_ сказал:

В STM работа с UART очень красиво решается с использованием DMA и прерывания IDLE. В результате получаем полностью аппаратный прием данных с прерыванием в конце каждого пакета. Нагрузка на камень в итоге минимальная.

А имеет смысл задействовать DMA для UART если объём передаваемых данных всего 8 байт, туда сюда?

Link to comment
Share on other sites

Ну тут уже вам решать, что лучше. 8 прерываний, или DMA но одно. Ну а передавать 8 байт можно и просто с ожиданием флага окончания передачи.

Edited by BARS_
Link to comment
Share on other sites

4 часа назад, BARS_ сказал:

Ну тут уже вам решать, что лучше. 8 прерываний, или DMA но одно. Ну а передавать 8 байт можно и просто с ожиданием флага окончания передачи.

Кстати да, я чёт не подумал. Благодарю!

Link to comment
Share on other sites

В 13.09.2022 в 19:12, SuperЛёха сказал:

Подозреваю, что в дебрях USB не просто разобраться и не осилить мне, поэтому буду смотреть и добавлять скорее всего CP2102 и далее работать с UART->CP2102->USB

и не стоило начинать. Работа с UART почти не грузит камень и позволяет избавиться от привязки ко времени. USB не дает в контроллере никаких преимуществ перед UART-USB и скоростей выше 1,5 мегабит все равно не получить. И не важно - HAL используется или LL. Так что правильное решение

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

Edited by mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • Пропала 12ти вольтовая линия, собрана она на элементах V13, V14, V15, V16, V18 и R45. Вместо 12ти вольт на выходе около 17 вольт, и подозрительно низкое напряжение на V18 (4 вольта), причем если этот сталитрон выпаять напруга не поменяеться. Хочу заметить что 403 были все не битые, но я их заменил на кремний р Есть еще просьба подсказать как проверить операционный усилитель 140УД1Б, они должны питаться от 12ти вольт, и скорее всего им хана. Если надо, имееться второй осциллограф С1-112. Заранее спасибо.  
    • Осваиваю работу с SD картой 8Mb отформатированную в FAT32, 4096 байт/кластер, с одним файлом LOG.TXT. Использовал CubeIDE. Подключил SD карту по интерфейсу SDIO 1 bit. Проверил работу SDIO чтением секторов через функции HAL, нашёл файл LOG.TXT и его содержимое. Подключил библиотеку FatFs. Использовал функции: f_mount(&fs, "", 1); f_open(&logFile, "LOG.TXT", FA_OPEN_APPEND | FA_WRITE | FA_READ); f_read(&logFile, &readBuff[0], 4, &bytesRead); f_close(&logFile); Все функции возвращают уведомление об успешном выполнении (значение 00). Проблема: bytesRead ==0 (0 прочитанных байт), буффер readBuff[] пуст.
    • Судя по Вашему аррогантному поведению, демонстрируете его тут Вы. В аккурат своей подписи...
    • Да да, не будем фантазировать. При таком раскладе я готовый модуль купил бы. Однако мне хочется припутить то, что есть. К тому же это разовый проект.
    • зависит от "нужной точности", а на практике все равно будете подстраивать "наощупь", чтобы работать удобнее было. Есть, но надо учитывать что все бкдет зависеть от конкретных характеристик терморезистора.
    • Легко. Потребуются два сдвиговых регистра 595. Заталкивать в них будете два байта последовательно. Один данные, другой биты управления, сложенные в байт. Отправлять нужно будет несколько раз (с учетом переключения битов управления).
    • Вот и пользуйтесь. В чем проблема? Я дал человеку, то что надо. Что не надо, ему знать не обязательно в данный момент.  Не надо вам демонстрировать свой ум.
×
×
  • Create New...