Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Микроконтроллер STM32F407VD
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Pavel30
Добрый день! Возникла такая проблема, в данной схеме включения, возникают проблемы с прошивкой. ( Прошивается, но, раз через раз). Может кто-нибудь сталкивался с проблемами с микроконтроллером STM32F407VD? С чем это может быть связано?Нажмите для просмотра прикрепленного файла
UnDerKetzer
Чем шьете (софт/программатор)? Какую ошибку получаете в случае неудачной попытки? Устройств партия? Если да, повторяется ли ошибка на других платах?
Сергей Борщ
Цитата(Pavel30 @ Apr 10 2014, 07:54) *
( Прошивается, но, раз через раз).
Я бы выкинул тяжелое наследие оккупацииPIC16C84 в виде C596.
Existing
Цитата(Сергей Борщ @ Apr 10 2014, 11:18) *
Я бы выкинул тяжелое наследие оккупацииPIC16C84 в виде C596.

Конденсатор там как раз соответствует даташиту, в отличие от R583.
Сергей Борщ
Цитата(Existing @ Apr 10 2014, 09:35) *
Конденсатор там как раз соответствует даташиту,
А нагрузочной способности выхода программатора? Нету на этом входе кнопки на длинном проводе, не нужен там конденсатор. А резистор не помешает.
Haamu
Поясню немного ситуацию. Дело больше не в "шитье", а в неадекватной работе самого процессора. В некоторых случаях работы программы, например в перрываниях, программа улетает непонятно куда и не знает куда ей оттуда возвращаться. То есть будто стек разлетается и вместо тех адресов, что там должны быть, появляются абсолютно случайные числа. Иногда каким-то образом затираются или переписываются какие-то участки флеша и программа не работает, пока ее заново не прошить. При этом та же самая программа, прошитая в отладочную Discovery, работает без проблем. Замена самого микроконтроллера также ни к чему не привела.
Golikov A.
а разве флэш перешить без спец команд можно?
Прошили, проверили прошивку, если ок, то все проблемы у вас в программе...
SasaVitebsk
Работаю с этим процессором. Текуший объём прошивки:
138 610 bytes of readonly code memory
59 535 bytes of readonly data memory (+ 4 absolute)
108 809 bytes of readwrite data memory
293 объектных файла. FreeRTOS.
Работает супер устойчиво. Просто блеск. За время отладки убил 2 проца перетыркиванием JTAG на лету. Больше инциндентов не было. Задействовано большинство периферии проца. Работает на максимальной частоте.

С прошивкой были проблемы. Связаны с тем, что прошивка возможна из нескольких источников. Детектирование идёт на лету, непонятно как, но проц часто неверно определяет источник. Для устранения данной ситуации необходимо чётко придерживаться доки CD00167594. Во время детектирования неиспользуемые источники должны сидеть на постоянном уровне. (Не должны болтаться в воздухе). Кроме того, даже если это соблюдено, иногда программа "STMicroelectronics flash loader" может выдать ошибку с сообщением, что надо сбросить проц. Сбрасываешь - и всё поехало. Это относится и к терминальной версии. Сделали свой бутлоадер - всё работает устойчиво.

Удачи.
Haamu
Цитата(Golikov A. @ Apr 10 2014, 13:52) *
а разве флэш перешить без спец команд можно?
Прошили, проверили прошивку, если ок, то все проблемы у вас в программе...

Знаю, что нельзя. В том то и загадка.
Дело точно не в программе. Пробовал простейшую программку зашивать, которая просто несколько байт по USART принимает. Те же чудеса происходят. А вот на Discovery то же самое работает как часы.
Сергей Борщ
Тогда надо внимательно смотреть схему питания, разводку питания и земли.
Haamu
Всё дело было в земле. На плате небыли соедединены аналоговая и цифровая земли, и между ними появлялся потенциал в 0,4 вольта. После соединения всё заработало. Видимо ядру нехватало питания, потому что до соединения земель на пинах VCAP 1 и 2 были минимальные 1,2В, а после соединения земель, стало 1,26В, как и должно быть по даташиту.
Haamu
Новый фокус. Линия V_BUS от USB и резистор P580. Подключаю USB разъем, со стороны разъема на резисторе 5В, со стороны контроллера - всего 0.5В. Контроллер на подключение разъема никак не реагирует. Делаю вывод, что сгорел вход контроллера. Но как-то странно он сгорел, потому что, если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает. Реально такое или снова фантастика какая-то?
Leopoldius
Цитата(Haamu @ Apr 11 2014, 12:11) *
Новый фокус. Линия V_BUS от USB и резистор P580. Подключаю USB разъем, со стороны разъема на резисторе 5В, со стороны контроллера - всего 0.5В. Контроллер на подключение разъема никак не реагирует. Делаю вывод, что сгорел вход контроллера. Но как-то странно он сгорел, потому что, если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает. Реально такое или снова фантастика какая-то?


Может все же резистор плохо пропаян? laughing.gif
В корзинке опыта были случаи, что вывод вроде припаян, но то ли трафарет с браком, то ли пасты "зажмотили" и после пропайки, обыкновенным паяльником все наладилось. В пользу этого говорит :" если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает."
Haamu
Цитата(Leopoldius @ Apr 11 2014, 14:44) *
Может все же резистор плохо пропаян? laughing.gif
В корзинке опыта были случаи, что вывод вроде припаян, но то ли трафарет с браком, то ли пасты "зажмотили" и после пропайки, обыкновенным паяльником все наладилось. В пользу этого говорит :" если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает."

Как раз не в пользу, а наоборот. Если нога настроена на вход, то напряжение с обоих сторон резистора одинаковое. А паяльником пропаивал...
Сергей Борщ
Цитата(Haamu @ Apr 11 2014, 14:11) *
Если нога настроена на вход, то напряжение с обоих сторон резистора одинаковое.
Может стоит разобраться, почему при нештатной работе эта кога настроена на вывод?
smk
Еще на житаге некоторые резисторы по 10к лишние.
Haamu
Перепаяли контроллер, проблема с USB осталась. Но нашлась одна особенность. Если запустить программу в режиме отладки, без всяких брейкпоинтов, ситуация не меняется. Но! После выхода из отладки комп начинает видить плату как COM-порт, собственно как и должен и всё работает. После перезапуска платы, снова перестает определяться. Где искать проблемму?
Сергей Борщ
Можно предположить, что при запуске отладки ваша среда совершает некие действия (настройку тактирования, отключение периферии или что-то еще), которые не дают вашей программе работать как задумано, ибо писавший программу программист полагался на значения периферийных регистров по умолчанию. При выходе из отладки отладчик на прощанье сбрасывает процессор и он начинает выполнять программу заново, но уже со сброшенной периферией. Более точно трудно сказать - вы не признались, какую среду разработки используете, а с телепатией у нас напряженка.
Haamu
Среда CoIDE. Программатор/отладчик ST-Link V2, расположенный на плате STM32F4Discovery.
Обнаружил еще одну особенность. Дело даже не в отладке. Отладчик отключен, USB подключен. Включаю питание платы, USB не определяется. Очень кратковременно, буквально в одно касание, замыкаю ресет на землю и после этого комп начинает видить плату, можно втыкать - вытыкать USB, всё работает, до выключения питания платы. Попробовал выпаять конденсатор С596, тот что на ресете, ситуация не изменилась.

Разобрался. Оказалось, что не успевал завестись внешний кварц. Увеличил HSE_STARTUP_TIMEOUT и всё заработало. А кварц не успевал стартовать, потому что емкости на нем слишком большие висели.
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?
Eminem
Haamu
А в чем Вы схемы рисуете?
Golikov A.
Цитата
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?

может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.
Haamu
Цитата(Eminem @ Apr 18 2014, 13:50) *
А в чем Вы схемы рисуете?

Я не рисую, я программист. А вообще вроде в Альтиуме. Но конкретно эта похоже еще в Пеинте подтерта.

Цитата(Golikov A. @ Apr 19 2014, 18:27) *
может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.

Похоже что так. Просто ввела в заблуждение инициализация этой ноги:
Код
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG_FS);
Golikov A.
я в этой инициализации ваще теряюсь) но вроде как к земле ее не тянули... а в альтернативных функциях все само работает, могли прочие поля структуры от копи паста остаться...

блин неужели так ноги инициализировать удобнее чем через 3-4 понятные строки?
выбор функции
выбор подтяжки (если надо)
направление
начальное значение?
Сергей Борщ
Цитата(Haamu @ Apr 21 2014, 17:17) *
Просто ввела в заблуждение инициализация этой ноги:
Я не разбирался с системой USB этого контроллера, но строка GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; как бы подсказывает, что этот вывод настраиваивается совсем не на ввод. В задачнике спрашивается: зачем этой ноге быть выходом с открытым коллектором? Если вы сможете это обосновать, вы наверняка поймете кто и зачем тянет ее к земле. Если же обосновать не сможете - вероятно придете к выводу, что тут и кроется ошибка.
Haamu
Прошу прощения, не тот кусок инициализации выложил, это от ноги ID. Инициализация V-Bus отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет. Перерыл весь USB-стек и не увидел нигде, чтобы V-Bus явно подтягивалась к земле, кроме работы в режиме хоста, где она отвечает за подачу питания на подключенное устройство. Следовательно, подтягивать ее к земле в режиме девайса может только альтернативная функция.
Golikov A.
А она в альтернативную функцию настроена, или для STM это ничерта не значит?
Сергей Борщ
Цитата(Haamu @ Apr 22 2014, 08:32) *
отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет.
То есть все равно выход? Вероятно вам все же стоит почитать описание этой ноги и работы с ней в руководстве пользователя. Поверьте, в примерах из интернета могут быть ошибки. Даже если эти примеры распространяет производитель контроллера.
Haamu
Да, эта нога настроена на работу альтернативной функции, соответственно и управляется она этой самой альтернативной функцией.
Кстати, на другой плате с аналогичной схемой подключения USB, эта нога ведет себя точно так-же.
ViKo
VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed). Естественно, она должна быть выходом, OD или PP - неважно.
Надо посмотреть по схеме, какой полярностью включается этот подтягивающий резистор. Там, наверное, и транзистор есть. А то и два. sm.gif
Сергей Борщ
Цитата(ViKo @ Apr 22 2014, 16:47) *
VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed).
Драссте. Ну откройте же описание. VBus - вход во всех режимах работы USB. Сигнал VBUS не входит в группу альтернативных функций (Alternative function) соответствующего разряда порта. Он является дополнительной функцией (Additional function) и включается настройками USB-контроллера, а не порта. И когда вы включаете альтернативную функцию на этой ноге вы подключаете к ней выход какой-то другой периферии.

Блин, да ну вас нафиг - три дня мусолить тему, которая в даташите ищется за две минуты. Причем почитать документацию автору темы предлагалось уже давно.
ViKo
Цитата(Сергей Борщ @ Apr 23 2014, 10:15) *
Драссте. Ну откройте же описание.

VBUS есть для OTG. Как эта ножка используется в проекте - ... laughing.gif .
P.S. впрочем, я только предположил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.