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

STM32 OTG USB проблема с отладкой

Вы вообще читаете, что я пишу?

Мне лишь одного этого хватило:

Препроцессор - зло. Он не нужен.

Это позволяет лишний раз убедиться, что:

Чем дальше в лес, тем толще партизаны.

 

.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через отладчик выяснил, что процессор падает в HardFault.

Падает на этой функции:

HardFault - это ни о чём не говорит.

Возможно там у Вас UsageFault или MemFault или BusFault или ещё какой, а потом происходит эскалация до HardFault, так как у Вас и механизм исключений конечно не прописан и не инициализирован.

Изучайте документацию на ядро в части исключений. У Cortex-M есть куча регистров, по которым можно определить конкретный тип и причину fault-а. И тогда легко будет найти ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо читать и вникать в эту кучу кода, достаточно лишь один раз скомпилировать в одну либу и подключить к проекту вместе с H-файлами.

Не забыть про ключик компиляции, при котором каждая функция кладется в свою ELF-секцию, так в финальную прошивку попадут только те функции, которые используются, а не целиком соотв. С-файл.

Классно. Рад за вас, что у вас всё всегда работает.

Почему-то мой код надо отлаживать, а не просто написать и нажать кнопочку "build". И в процессе отладки очень хочется минимизировать количество "чёрных ящиков".

 

 

Речь тут не про HAL/CUBE и т. п, а про совсем другое - про банальное нарушение базового правила кода под МК: заходить в прерывания можно только для того, чтобы "отметиться" и что-то просемафорить наружу в основной код.

А число-дробилки и циклы ожидания выносятся наружу в основной код. Иначе жди беды!

То-то у кортексов настолько развесистый NVIC, что им с лёгкостью можно заменить простенькую операционку.

 

Ну я основную идею понял. "у меня всё работает, а шаг вправо, шаг влево - это сам дурак". Спасибо за мнение.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему-то мой код надо отлаживать, а не просто написать и нажать кнопочку "build".

Как раз в данном случае именно так и должен работать такой примитивный код.

 

И в процессе отладки очень хочется минимизировать количество "чёрных ящиков".

БИНГО! Начинает доходить! Вот почему я уже трижды написал "создать ПУСТОЙ ПРОЕКТ" !!!

 

То-то у кортексов настолько развесистый NVIC, что им с лёгкостью можно заменить простенькую операционку.

Ну-ну, а спотыкаемся уже на детских грабельках :smile3046:

 

Ну я основную идею понял.

Основная идея как раз совсем в другом:

1) чуть назад отойти от стены, в которую уперся как ...,

2) глянуть на нее издали,

3) найти в ней дверь,

4) подойти, открыть

5) и наконец-то двигаться дальше.

 

Самые простые решения чаще всего лежат прямо перед носом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Короче, далее бейтесь о стену уже без моей помощи - все, чем я мог помочь, тут уже прозвучало и неоднократно и не только от меня. Удачи ;)

Вы всё обещаете, но никак не уходите. Помощи от вас никакой, только тему засоряете.

Автор темы давно убрал глухой цикл из прерывания, а вы продолжаете ему твердить про это.

 

Вообще, я первый раз такое вижу - "HAL не пробовал, но он прекрасен". Этакое "Рабинович напел" наоборот.

 

 

Посмотрите настройки флеша. wait-states, ART prefetch. Если у вас старая ревизия контроллера (какой кстати контроллер?), то там были баги в ART prefetch. Возможно, куб включает ART безусловно, и проблема в этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помощи от вас никакой, только тему засоряете.
Да не расстраивайтесь вы так за ТС, он не маленький, сам разберется, хоть и не сразу ...

 

Автор темы давно убрал глухой цикл из прерывания, а вы продолжаете ему твердить про это.

© "Читаю книгу, а вижу фигу"

Внимательнее читайте порядок действий, которые я уже неоднократно приводил для ТС. Продублирую:

 

Нужно, точно локализовать источник косяка. Пока что все упирается в вашу функцию. Копайте в этом направлении.

Например, подряд в основном коде вызвать ее несколько раз или более радикально - гонять в бесконечном цикле, но не в прерываниях.

Вижу простое решение: отладить это чудо-код на ПУСТОМ проекте, добиться от него стабильной работы в разных ситуациях (банально тесты), и уже только после этого куда-то сувать.
А что делает тут USB?

Короче, ПУСТОЙ НОВЫЙ проект только для того, чтобы отладить ваши несчастные костыльные функции.

Добейтесь тут от них нормальной работы в ПУСТОМ проекте. Поиграйтесь с размером стека (например).

В конце концов, сделайте нормальный функционал БЕЗ поллинга!

 

Может еще нужно разжевать до косточек и написать проект за самого ТС???

 

Вообще, я первый раз такое вижу - "HAL не пробовал, но он прекрасен". Этакое "Рабинович напел" наоборот.

Не пойму, какое отношение подобные домыслы имеют к этой теме и ко мне лично? :cranky:

 

Я пользуюсь HAL (ранее SPL), ничего дурного в этом не вижу. Но без соотв. тестов слепо доверять бесплатному чужому коду тоже не стану.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внимательнее читайте порядок действий, которые я уже неоднократно приводил для ТС. Продублирую:

То есть, для отладки USB вы предлагаете выбросить USB? Ну, нормально, да. То-то автор темы так оценил вашу помощь.

 

Не пойму, какое отношение подобные домыслы имеют к этой теме и ко мне лично? :cranky:

Я пользуюсь HAL (ранее SPL), ничего дурного в этом не вижу. Но без соотв. тестов слепо доверять бесплатному чужому коду тоже не стану.

Я имел в виду куб, не думал, что есть разница между HAL и кубом. Вот та цитата, от которой я отталкивался:

Я сам лично не пользуюсь кубом и пока не планирую, но и отговаривать от этого новичков не стану.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, для отладки USB вы предлагаете выбросить USB? Ну, нормально, да. То-то автор темы так оценил вашу помощь.

И откуда ж вы такие умные беретесь, а? Для начала хорошенько почитайте тему.

Кратко для ленивых: проблема в данном случае вовсе не в CUBE/HAL/USB, а т.н. user-коде. Без самодеятельности ТС все там работает (с его же слов).

 

Я имел в виду куб, не думал, что есть разница между HAL и кубом.

Ну, коли вы не видите разницу между красным и мокрым, то сначала изучите матчасть, перед тем, как кидать кирпичи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ревизия проца A. Две штуки. Взял вторую плату, китайский клон Nucleo. Результат тот же. Сделал передачу по уарт ногодрыгом вручную. Аппаратный отключен. То же самое. При передаче первого байта отваливается USB. Такое впечатление, что любая запись в порт PA валит USB. Он тоже на этот порт выведен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал передачу по уарт ногодрыгом вручную. Аппаратный отключен. То же самое. При передаче первого байта отваливается USB. Такое впечатление, что любая запись в порт PA валит USB.
Чудеса да и только!

Другой USART или этот же, но в другие пины работает так же?

 

Он тоже на этот порт выведен.
Выкладывайте код вместе с инициализацией и на всякий случай схему.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ревизия проца A. Две штуки. Взял вторую плату, китайский клон Nucleo.

А какой проц-то? В F405/407/415/417 - ART не рабочий в ревизии A. Если куб его включает, то причина вылетов может быть в этом.

Кроме того, проверьте частоту, на которую вы настроили PLL. Правильно ли задана частота кварца.

 

И откуда ж вы такие умные беретесь, а? Для начала хорошенько почитайте тему.

Кратко для ленивых: проблема в данном случае вовсе не в CUBE/HAL/USB, а т.н. user-коде. Без самодеятельности ТС все там работает (с его же слов).

Я вообще-то высказывался не против CUBE/HAL/USB, а против вашего способа "помогать" автору темы. Вы не помогаете. Вы чешете своё ЧСВ.

 

Ну, коли вы не видите разницу между красным и мокрым

Разницу вижу. Повторюсь: я имел в виду куб. Вы, не пользуясь кубом, тем не менее уверены, что проблема в пользовательском коде. Вот это я и имел в виду под тезисом "анти-Рабинович напел".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разницу вижу. Повторюсь: я имел в виду куб. Вы, не пользуясь кубом, тем не менее уверены, что проблема в пользовательском коде. Вот это я и имел в виду под тезисом "анти-Рабинович напел".

Читайте отсюда.

 

Вот кратко:

В основном коде ВНЕ прерываний эта функция работает? В бесконечном цикле.

Да.

 

Вот код этой функции.

 

И тут почитайте: https://electronix.ru/forum/index.php?s=&am...t&p=1483529

 

Еще есть вопросы?

 

Увеличение размера стека помогает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой проц-то? В F405/407/415/417 - ART не рабочий в ревизии A. Если куб его включает, то причина вылетов может быть в этом.

Кроме того, проверьте частоту, на которую вы настроили PLL. Правильно ли задана частота кварца.

 

Процессор F411RE, ревизия A. Весь код генерит куб, я только компилирую его в кейле. Частоты не превышают ограничения в кубе (100Мгц и 50Мгц).

 

Одна плата такая: XNucleoF411re. Схемы нет.

Вторая плата такая:

 

post-38757-1487780386_thumb.jpg

 

Схема есть.

 

UART. На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. И нет гарантии что при манипуляции другими битами порта USB не будет отваливаться.

 

Выкладывайте код вместе с инициализацией и на всякий случай схему.

 

Всю портянку, что куб нагенерил, выкладывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...