реклама на сайте
подробности

 
 
> Микроконтроллер STM32F407VD, Проблемы с прошивкой
Pavel30
сообщение Apr 10 2014, 05:54
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 10-04-14
Пользователь №: 81 309



Добрый день! Возникла такая проблема, в данной схеме включения, возникают проблемы с прошивкой. ( Прошивается, но, раз через раз). Может кто-нибудь сталкивался с проблемами с микроконтроллером STM32F407VD? С чем это может быть связано?
Прикрепленное изображение


Сообщение отредактировал IgorKossak - Apr 11 2014, 05:34
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 30)
UnDerKetzer
сообщение Apr 10 2014, 06:00
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 105
Регистрация: 10-03-08
Из: Helsinki
Пользователь №: 35 763



Чем шьете (софт/программатор)? Какую ошибку получаете в случае неудачной попытки? Устройств партия? Если да, повторяется ли ошибка на других платах?

Сообщение отредактировал UnDerKetzer - Apr 10 2014, 06:01
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 10 2014, 07:18
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Pavel30 @ Apr 10 2014, 07:54) *
( Прошивается, но, раз через раз).
Я бы выкинул тяжелое наследие оккупацииPIC16C84 в виде C596.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Existing
сообщение Apr 10 2014, 07:35
Сообщение #4





Группа: Новичок
Сообщений: 4
Регистрация: 16-03-06
Пользователь №: 15 309



Цитата(Сергей Борщ @ Apr 10 2014, 11:18) *
Я бы выкинул тяжелое наследие оккупацииPIC16C84 в виде C596.

Конденсатор там как раз соответствует даташиту, в отличие от R583.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 10 2014, 07:43
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Existing @ Apr 10 2014, 09:35) *
Конденсатор там как раз соответствует даташиту,
А нагрузочной способности выхода программатора? Нету на этом входе кнопки на длинном проводе, не нужен там конденсатор. А резистор не помешает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 10 2014, 08:50
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Поясню немного ситуацию. Дело больше не в "шитье", а в неадекватной работе самого процессора. В некоторых случаях работы программы, например в перрываниях, программа улетает непонятно куда и не знает куда ей оттуда возвращаться. То есть будто стек разлетается и вместо тех адресов, что там должны быть, появляются абсолютно случайные числа. Иногда каким-то образом затираются или переписываются какие-то участки флеша и программа не работает, пока ее заново не прошить. При этом та же самая программа, прошитая в отладочную Discovery, работает без проблем. Замена самого микроконтроллера также ни к чему не привела.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 10 2014, 09:52
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а разве флэш перешить без спец команд можно?
Прошили, проверили прошивку, если ок, то все проблемы у вас в программе...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 10 2014, 09:56
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Работаю с этим процессором. Текуший объём прошивки:
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" может выдать ошибку с сообщением, что надо сбросить проц. Сбрасываешь - и всё поехало. Это относится и к терминальной версии. Сделали свой бутлоадер - всё работает устойчиво.

Удачи.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 10 2014, 09:58
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



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

Знаю, что нельзя. В том то и загадка.
Дело точно не в программе. Пробовал простейшую программку зашивать, которая просто несколько байт по USART принимает. Те же чудеса происходят. А вот на Discovery то же самое работает как часы.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 10 2014, 12:41
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Тогда надо внимательно смотреть схему питания, разводку питания и земли.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 11 2014, 04:31
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Всё дело было в земле. На плате небыли соедединены аналоговая и цифровая земли, и между ними появлялся потенциал в 0,4 вольта. После соединения всё заработало. Видимо ядру нехватало питания, потому что до соединения земель на пинах VCAP 1 и 2 были минимальные 1,2В, а после соединения земель, стало 1,26В, как и должно быть по даташиту.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 11 2014, 10:11
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Новый фокус. Линия V_BUS от USB и резистор P580. Подключаю USB разъем, со стороны разъема на резисторе 5В, со стороны контроллера - всего 0.5В. Контроллер на подключение разъема никак не реагирует. Делаю вывод, что сгорел вход контроллера. Но как-то странно он сгорел, потому что, если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает. Реально такое или снова фантастика какая-то?
Go to the top of the page
 
+Quote Post
Leopoldius
сообщение Apr 11 2014, 10:44
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 23-03-11
Из: Россия
Пользователь №: 63 824



Цитата(Haamu @ Apr 11 2014, 12:11) *
Новый фокус. Линия V_BUS от USB и резистор P580. Подключаю USB разъем, со стороны разъема на резисторе 5В, со стороны контроллера - всего 0.5В. Контроллер на подключение разъема никак не реагирует. Делаю вывод, что сгорел вход контроллера. Но как-то странно он сгорел, потому что, если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает. Реально такое или снова фантастика какая-то?


Может все же резистор плохо пропаян? laughing.gif
В корзинке опыта были случаи, что вывод вроде припаян, но то ли трафарет с браком, то ли пасты "зажмотили" и после пропайки, обыкновенным паяльником все наладилось. В пользу этого говорит :" если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает."
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 11 2014, 11:11
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



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

Как раз не в пользу, а наоборот. Если нога настроена на вход, то напряжение с обоих сторон резистора одинаковое. А паяльником пропаивал...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 11 2014, 19:06
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Haamu @ Apr 11 2014, 14:11) *
Если нога настроена на вход, то напряжение с обоих сторон резистора одинаковое.
Может стоит разобраться, почему при нештатной работе эта кога настроена на вывод?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Apr 12 2014, 02:27
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Еще на житаге некоторые резисторы по 10к лишние.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 16 2014, 08:03
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Перепаяли контроллер, проблема с USB осталась. Но нашлась одна особенность. Если запустить программу в режиме отладки, без всяких брейкпоинтов, ситуация не меняется. Но! После выхода из отладки комп начинает видить плату как COM-порт, собственно как и должен и всё работает. После перезапуска платы, снова перестает определяться. Где искать проблемму?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 16 2014, 08:41
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 16 2014, 08:53
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Среда CoIDE. Программатор/отладчик ST-Link V2, расположенный на плате STM32F4Discovery.
Обнаружил еще одну особенность. Дело даже не в отладке. Отладчик отключен, USB подключен. Включаю питание платы, USB не определяется. Очень кратковременно, буквально в одно касание, замыкаю ресет на землю и после этого комп начинает видить плату, можно втыкать - вытыкать USB, всё работает, до выключения питания платы. Попробовал выпаять конденсатор С596, тот что на ресете, ситуация не изменилась.

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

Сообщение отредактировал Haamu - Apr 16 2014, 10:55
Go to the top of the page
 
+Quote Post
Eminem
сообщение Apr 18 2014, 09:50
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 13-02-12
Пользователь №: 70 236



Haamu
А в чем Вы схемы рисуете?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 19 2014, 14:27
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?

может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 21 2014, 14:17
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Цитата(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);
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 21 2014, 17:49
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я в этой инициализации ваще теряюсь) но вроде как к земле ее не тянули... а в альтернативных функциях все само работает, могли прочие поля структуры от копи паста остаться...

блин неужели так ноги инициализировать удобнее чем через 3-4 понятные строки?
выбор функции
выбор подтяжки (если надо)
направление
начальное значение?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 21 2014, 21:21
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Haamu @ Apr 21 2014, 17:17) *
Просто ввела в заблуждение инициализация этой ноги:
Я не разбирался с системой USB этого контроллера, но строка GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; как бы подсказывает, что этот вывод настраиваивается совсем не на ввод. В задачнике спрашивается: зачем этой ноге быть выходом с открытым коллектором? Если вы сможете это обосновать, вы наверняка поймете кто и зачем тянет ее к земле. Если же обосновать не сможете - вероятно придете к выводу, что тут и кроется ошибка.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 22 2014, 05:32
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Прошу прощения, не тот кусок инициализации выложил, это от ноги ID. Инициализация V-Bus отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет. Перерыл весь USB-стек и не увидел нигде, чтобы V-Bus явно подтягивалась к земле, кроме работы в режиме хоста, где она отвечает за подачу питания на подключенное устройство. Следовательно, подтягивать ее к земле в режиме девайса может только альтернативная функция.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 22 2014, 05:49
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А она в альтернативную функцию настроена, или для STM это ничерта не значит?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 22 2014, 07:37
Сообщение #27


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Haamu @ Apr 22 2014, 08:32) *
отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет.
То есть все равно выход? Вероятно вам все же стоит почитать описание этой ноги и работы с ней в руководстве пользователя. Поверьте, в примерах из интернета могут быть ошибки. Даже если эти примеры распространяет производитель контроллера.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 22 2014, 13:28
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Да, эта нога настроена на работу альтернативной функции, соответственно и управляется она этой самой альтернативной функцией.
Кстати, на другой плате с аналогичной схемой подключения USB, эта нога ведет себя точно так-же.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 22 2014, 13:47
Сообщение #29


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed). Естественно, она должна быть выходом, OD или PP - неважно.
Надо посмотреть по схеме, какой полярностью включается этот подтягивающий резистор. Там, наверное, и транзистор есть. А то и два. sm.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2014, 07:15
Сообщение #30


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ViKo @ Apr 22 2014, 16:47) *
VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed).
Драссте. Ну откройте же описание. VBus - вход во всех режимах работы USB. Сигнал VBUS не входит в группу альтернативных функций (Alternative function) соответствующего разряда порта. Он является дополнительной функцией (Additional function) и включается настройками USB-контроллера, а не порта. И когда вы включаете альтернативную функцию на этой ноге вы подключаете к ней выход какой-то другой периферии.

Блин, да ну вас нафиг - три дня мусолить тему, которая в даташите ищется за две минуты. Причем почитать документацию автору темы предлагалось уже давно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 23 2014, 08:43
Сообщение #31


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ Apr 23 2014, 10:15) *
Драссте. Ну откройте же описание.

VBUS есть для OTG. Как эта ножка используется в проекте - ... laughing.gif .
P.S. впрочем, я только предположил.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 09:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01689 секунд с 7
ELECTRONIX ©2004-2016