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

 
 
> Не стартует STM32F405
amaora
сообщение Jun 25 2017, 19:29
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Сделал новую ревизию платы, в части МК изменилось только, что BOOT1 теперь идет на EN вход внешнего DC/DC. Вроде бы не должно никак мешать, когда контроллер в сбросе или загрузчике BOOT1 притянут к земле резистором 10К.

Однако, теперь после загрузки кода по USART через встроенный загрузчик, происходит странное. Сразу после загрузки МК работает как должно. Если снять питание и снова подать, то поведение как у чистого МК со стертым флешем. Но если не дергая питания, перейти в загрузчик сделав BOOT0=1 и сброс а затем (ничего на загружая) вернуть BOOT0=0 и снова сделать сброс, то стартует прошитый ранее код из флеш. Один только сброс не помогает.

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

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

Не знаю на что подумать, что проверить.

Сообщение отредактировал amaora - Jun 26 2017, 12:24
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amaora
сообщение Jun 28 2017, 16:48
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Перешел на GCC 7.1.0, попробовал разные варианты оптимизации, ничего не меняется. Сейчас постоянно падает при запуске из GDB. В пределах одной сборки падает стабильно в одном месте.

Похоже неполадки в freertos/heap_4.c, pvPortMalloc возвращает некорректные адреса. Но как здесь вход в загрузчик мог повлиять непонятно. Все очень странно. Да и от чего бы этому коду сломаться.

Код
extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
...
static void prvHeapInit( void )
{
BlockLink_t *pxFirstFreeBlock;
uint8_t *pucAlignedHeap;
size_t uxAddress;
size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;

    /* Ensure the heap starts on a correctly aligned boundary. */
    uxAddress = ( size_t ) ucHeap;

    if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
    {
        uxAddress += ( portBYTE_ALIGNMENT - 1 );
        uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
        xTotalHeapSize -= uxAddress - ( size_t ) ucHeap;
    }
...


Как можно здесь прочитать в uxAddress нулевое значение? Но получается именно так если верить GDB, с этого начинаются проблемы.

Go to the top of the page
 
+Quote Post
Integro
сообщение Jun 29 2017, 07:37
Сообщение #3


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

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Была подобная ситуация, только такое поведение наблюдалось когда BOOT1 был затянут в 1 (system memory), но ПО запускал через отладку, причина была в срабатывании необрабатываемого прерывании.

ИМХО, причина не в компиляторе, я бы на Вашем месте залогировал все обработчики прерываний, даже те которые не используете, и те которые не маскируемые.

Возможно Вы эти этапы уже прошли, но я бы прошелся по следующим шагам:
1. Временно выключил основной функционал прошивки, оставить только светодиодную индикацию, чтобы понимать, что ПО работает, частотой моргания диода подтвердить рабочую частоту. Если на плате нет диода, дергаем какой-либо пин, контролируем его каким либо осцилоскопом.
2. Зашить и проверить работоспособность ПО на первом устройстве, рабочем устройстве!
3. Зашить второе устройство убедиться в НЕ работоспособности.
3.1 Если вдруг случайно заработает, добавляем пошагово необходимый функционал, ищем причину.
4. Если Вы пишите что добавлен только резистор, чтобы убедиться что проблема в нем, демонтировав его, порезать линию управления EN (DC\DC)
4.1 Резистора нет, но ПО НЕ грузится искать другие отличия в схеме.
5. Без резистора ПО грузится? Снять и опубликовать на форуме осциллограммы сигналов: питание, reset, boot1.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amaora   Не стартует STM32F405   Jun 25 2017, 19:29
- - adnega   Цитата(amaora @ Jun 25 2017, 22:29) Не зн...   Jun 25 2017, 20:40
|- - amaora   Цитата(adnega @ Jun 25 2017, 23:40) Может...   Jun 26 2017, 12:31
- - Genadi Zawidowski   Кажется, внутренний pull-down это особенность BOOT...   Jun 25 2017, 20:53
- - Obam   Ну не бывает чудес. " Если снять питание и сн...   Jun 26 2017, 08:04
- - amaora   Посмотрел через отладку по SWD, что там происходит...   Jun 26 2017, 17:46
- - amiller   Цитата(amaora @ Jun 25 2017, 23:29) Сдела...   Jun 27 2017, 04:17
|- - Obam   Цитата(amiller @ Jun 27 2017, 08:17) Може...   Jun 27 2017, 07:25
- - x893   В любом электротехникуме есть предмет на первом ку...   Jun 29 2017, 08:59
- - Obam   В конце июня (; актуальный совет, особенно участни...   Jun 29 2017, 11:41
- - amaora   Причина все таки в компиляторе, точнее в моем его ...   Jun 30 2017, 16:24
- - amaora   Новые версии GCC были собраны с --enable-default-p...   Jul 1 2017, 16:59
- - esaulenka   amaora, Вы их где берёте? Вроде б на launchpad...   Jul 3 2017, 07:35
- - amaora   Цитата(esaulenka @ Jul 3 2017, 10:35) ama...   Jul 3 2017, 11:41


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:31
Рейтинг@Mail.ru


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