Перейти к содержанию

SuperЛёха

Members
  • Постов

    11
  • Зарегистрирован

  • Посещение

Информация о SuperЛёха

  • День рождения 11.05.1983

Информация

  • Пол
    Мужчина
  • Город
    Екатеринбург

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Микроконтроллеры
  • Оборудование
    TDS2002C; АКИП-3418/3; АКИП-2201; QJ5003C; ПСИ-2500; APPA 99 III; Testo 875-1i; LUKEY 702; T-962; SEGGER

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения SuperЛёха

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Месяц на форуме
  • Неделя на форуме

Последние значки

1

Репутация

  1. Ну тут пока не начнёшь - не поймёшь.
  2. Кстати да, я чёт не подумал. Благодарю!
  3. А имеет смысл задействовать DMA для UART если объём передаваемых данных всего 8 байт, туда сюда?
  4. Думаю это решит проблему, т.к. один UART уже задействован под modbus, и работает без нареканий.
  5. Благодарю, статья интересная, но автор использует ту же библиотеку от ST. Подозреваю, что в дебрях USB не просто разобраться и не осилить мне, поэтому буду смотреть и добавлять скорее всего CP2102 и далее работать с UART->CP2102->USB
  6. Я в прерывании от USB поднимаю только флаг, что данные приняты, но как будто до функции прерывания ещё что то делается и это "долго". Я про периферийные блоки, их 2 в 407-м один вроде как с DMA может работать, другой нет. Это нужно быть уже мега программистом :-)), а я больше универсальный спец, таким не возможно освоить всё в идеале. Если не получится довести до ума, видимо так и придётся конвертер ставить и забыть этот страшный сон с USB.
  7. SuperЛёха

    STM32F407ZGT USB OTG FS CDC

    Доброго всем времени суток и времени года :-) Очередной затык, и не могу понять в каком направлении двигаться, может кто подскажет... Использую связь устройства на 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 более оптимален по быстродействию?
  8. Честно - ещё не дорос. Слишком много задач кроме STM. В общем причина глюка который я видел найдена: Я получал значения с АЦП, затем их обрабатывал (считал TRMS), и вот результат после передёргивания питания - был бредом, однако после аппаратного сброса - всё работало как надою. Почти весь код лежит в CCMRAM, однако в RAM вынесены буферы DMA и буферы для подсчёта TRMS для каждого канала. Так вот, после передёргивания питания в RAM почему то валяется какой то мусор, который попадал в предварительно неинициализированный буфер (массив). Странно, что этот мусор находится в RAM после передёргивания питания, ведь по сути после подачи питания происходит тот же самый аппаратный сброс. Проинициализировал буфер и всё стало работать как надо.
  9. Прошу прощения! АЦП и DMA работают верно, где то необычно странная ошибка в коде.
  10. Всем доброго времени суток! Пару лет вяло осваиваю STM, никогда такого не было, и вот снова.... Суть проблемы в следующем: Опрашиваю 12 аналоговых входов с 3-х АЦП в циклическом режиме через DMA. На каждый АЦП по 4 канала. Заливаю в STM, всё работает как надо, и вот оно: отключаешь питание, затем включаешь - в ДМА хрень какая то сыпится не имея ничего общего с потенциалом на входах (может не в нём дело, а в АЦП), причём остальная периферия работает исправно. Далее делаю аппаратный reset - всё работает. Ещё раз reset - работает и всегда всё работает после аппаратного reset. Но как только питание передёрнешь - хрень. В первую очередь погрешил на конденсатор в цепи сброса - исправен 0,1мкФ, зажал ресет, включил питание, отпустил ресет - хрень. Повторил кучу экспериментов - одно и тоже, после передёргивания питания - хрень. После повторного сброса после старта - нормально работает всё до отключения питания. Питание стабильное, у каждой питающей ноге - емкость, да и в принципе плата многослойная проблемы с питанием исключаю. Как будто после включения питания не всё сбрасывается, но такое наверное вряд ли может быть. Может кто подскажет, в каком направлении копать.
×
×
  • Создать...