|
STM32F4 не стартует вне отладки |
|
|
|
Nov 9 2012, 08:04
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 28-09-06
Из: Минск
Пользователь №: 20 776

|
Цитата(athlon64 @ Nov 8 2012, 14:33)  Куда копать? Такое бывает если смещены векторы прерываний. Например если в файле icf (IAR) смещены ROM_Start и INTVEC_Start адреса .
Сообщение отредактировал AVNN - Nov 9 2012, 08:06
|
|
|
|
|
Nov 12 2012, 05:25
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
С векторами прерываний всё в порядке. В ходе экспериментов удалось выяснить следующее: - В случае когда процессор не стартует, генерация на кварце 25 МГц отсутствует. - При тактировании от HSI глюк повторяется аналогично тактованию от кварца. - Если при включении удерживать сброс при подаче питания и после этого отпустить сброс, то процессор стартует стабильно. Сброс после подачи питания приводит к нормальному старту процессора. - BOR включен, порог выставлен на 2,7В, при выставлении любых порогов или отключении BOR ситуация не меняется. Работу BOR проверили лабораторным БП - BOR срабатывает. Всё это при запитывании процессора от БП на той же плате (5В на LM2679 -> 3.3В на LM1085) - Под рукой есть плата Discovery с процессором STM32F407VG, при запитывании её от того же БП 3.3В (с платы устройства), процессор Discovery стартует стабильно. NRST у дискавери подключен аналогично. - Если запитывать процессор от лабораторного БП в обход БП на плате, то процессор стартует стабильно. Осциллограммы нарастания напряжения питания 3.3В (жёлтый) и уровня на ноге NRST (синий): От лабораторного БП:
От нашего БП:
Какие у кого соображения?
--------------------
Руслан
|
|
|
|
|
Nov 12 2012, 09:37
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Цитата(Сергей Борщ @ Nov 12 2012, 13:54)  А на BOOT0 случайно никаких резисторов с емкостями нет? Есть возможность после того как не стартанул подключиться отладчиком на всем скаку и посмотреть, куда его занесло - в загрузчик, в исключение или еще куда? Стыдно признавать, но косяк действительно был в ноге BOOT0 Не был запаян резистор, подтягивающий её к земле, нога висела в воздухе. Сейчас всё стабильно стартует всегда
--------------------
Руслан
|
|
|
|
|
Nov 13 2012, 05:03
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882

|
Цитата(Allregia @ Nov 12 2012, 21:36)  А почему оно с отладчиком запускалсь, при плавающем буст0? Дллжно ведь было тоже глючить, или нет? Если дёрнуть резет после установления напряжения питания, то старт был стабильным. Ну а отладчик как раз и дёргал резет.
--------------------
Руслан
|
|
|
|
|
Dec 22 2012, 09:45
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471

|
У меня аналогичный глюк.. F4 дискавери, новенькая только из коробки. Родная прошивка (которая идёт с платой) работала, без всяких сбросов и перезапусков. Просто втыкаешь в USB и она работает. Написал свою прошивку (моргание светодиодами). Что бы она стартанула, нужно открыть утилиту ST-LINK и подключиться/отключиться к камню. Или нажать System Reset в окне MCU Core. Обратно возвращаю прошивку от дискавери - работает! А значит никаких перемычек и переделок не нужно. Может дело в самой прошивке? Например, родная начинается с циферки 2 :20000000800C00202D420008353C0008373C0008393C00083B3C00083D3C0008000000004C а моя прошивка начинается с единички, формат intel hex. И стока короче. :10000000800C002088010000F6010000F6010000CD Поразбирался - нет, дело не в формате прошивки, а в чём-то другом.. Залито всё правильно, с адреса 0800. Вектор на start и вершина стека установлены. Прерывания закрыты. Про ресету от ст-линка работает, а сама по себе не хочет
|
|
|
|
|
Dec 22 2012, 11:25
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(LWW @ Dec 22 2012, 11:45)  Может дело в самой прошивке? Например, родная начинается с циферки 2 :20000000800C00202D420008353C0008373C0008393C00083B3C00083D3C0008000000004C
а моя прошивка начинается с единички, формат intel hex. И стока короче. :10000000800C002088010000F6010000F6010000CD 10 и 20 - это количество байт данных в строке. Цитата(LWW @ Dec 22 2012, 11:45)  Залито всё правильно, с адреса 0800. С 800 или с 0x800000? Цитата(LWW @ Dec 22 2012, 11:45)  Вектор на start и вершина стека установлены. Прерывания закрыты. Откуда знаете про стек и старт? Что значит "Прерывания закрыты"?
|
|
|
|
|
Dec 22 2012, 18:38
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471

|
Люди! Нет ну это же ну просто свинство!! Взял другую платку. На ней такой же камень и 4 светодиода, только на другом порту. Исправил имена портов. Работает! С первого пинка пошла. Причём как часики. AHTOXAМимо Да и он на ассемблере. Очень простой код! И на другой-то плате работает. С первого раза запустился, только порт другой выставил. Вон лежит моргает... На дискавери какая-то деталюха ступорит камень! Но с другой стороны интересно, если демо-код (с акселерометром и мышкой) работает, значит это можно обойти программно? Может что-то с тактированием? Типа такты приходят от swd, а в камне фьюзами задано внешнее тактирование? Такое вообще бывает? (так помню бывало в тинках))
Сообщение отредактировал LWW - Dec 22 2012, 18:39
|
|
|
|
|
Dec 22 2012, 18:47
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471

|
А код очень маленький. Всего 120 байт. 26 инструкций. Вот если решим проблему, покажу!  Ну а какая телепатия? Два абсолютно одинаковых новых камня. На голой плате код работает. На дискавери нет. Тут надо не код смотреть, а схему.. Чего там наворочали, что требуется какой-то хитрый сброс, что даже кнопка не помогает?
|
|
|
|
|
Dec 24 2012, 00:00
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(LWW @ Dec 23 2012, 23:32)  Блииин.. Какой кошмар, люди... Ладно! Забудьте! Всё работает. Показываю обещанный код http://stm32asm.ru/minimal_code.htmlЦитата Помните, как это было в тинках и мегах? Нужно вначале установить вершину стека, прописать калибровочный байт, отрубить пса! Калибровочный байт - это для RC что ли? Стек компилятор пропишет до старта main - проблемы нет. Цитата А сколько народу на этом отрубилось! Тьма... Цитата Ведь кто-же его поймёт, что по умолчанию пёс всегда включен и будет сбрасывать процессор до тех пор, пока не вырубишь! Это зависит от модели меги и фузов. Но тоже не проблема. Цитата А калибровочный байт - его нужно предварительно считать из камня программатором и где-то сохранить. В каждом камне - свой уникальный байт. Очень много возни.. Кварц чем не устраивает? P.S. Честно говоря ни разу не использовал этот регистр. Чем-то это чревато?
|
|
|
|
|
Jan 10 2013, 08:29
|

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

|
QUOTE (LWW @ Jan 9 2013, 23:18)  Не всё можно загрузить через LDR. Изучите команду и поймёте  Так "=" как раз и используется для того, чтобы об этом голова болела у ассемблера. Изучите ассемблер и поймете  QUOTE Syntax
The syntax of LDR is: LDR{condition} register,=[expression | label-expression]
where:
...
expression evaluates to a numeric constant:
If the value of expression is within range of a MOV or MVN instruction, the assembler generates the appropriate instruction. If the value of expression is not within range of a MOV or MVN instruction, the assembler places the constant in a literal pool and generates a program-relative LDR instruction that reads the constant from the literal pool.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|