Jump to content

    
IRBaboon

STM32H742VG Hardfault

Recommended Posts

Уважаемые коллеги!

Столкнулся с проблемой, которую не могу решить:
Я собрал проект в КУБе, запустил в Кейле. В качестве источника тактирования применяю внутренний HSI.
Отладчик - китайский стлинк. 
После сборки и запуска дебага - выпадаю в хардфолт сразу после систем инита. 
Совершенно не понимаю, с чем это связано - пытался использовать разные делители, разные источники тактирования, даже проверял что происходит с ногой резет :)
Сталкивался ли кто либо с подобной проблемой? Подскажите пожалуйста - в чём может быть загвоздка.

Share this post


Link to post
Share on other sites

Т.е. в main() даже не заходит?
В самой SystemInit() FPU-сопроцессор включается?
В настройках проекта галка генерирования FPU-инструкций стоит?

Насколько я знаю, __main() использует FPU в своих целях для ускорения запуска.

Share this post


Link to post
Share on other sites
3 часа назад, IRBaboon сказал:

Совершенно не понимаю, с чем это связано

А расшифровать пробовали по содержимому регистров?

3 часа назад, IRBaboon сказал:

После сборки и запуска дебага - выпадаю в хардфолт сразу после систем инита. 

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

Share this post


Link to post
Share on other sites

Уж для того чтобы в hard fault вылететь, процессору нужно начать выполнять инструкции... так что генератор точно не виноват.

Share this post


Link to post
Share on other sites
On 3/19/2021 at 2:09 PM, IRBaboon said:

выпадаю в хардфолт сразу после систем инита

Уберите систем инит и проверьте.

Хотя это очевидно для гуру программирования.

Share this post


Link to post
Share on other sites
19.03.2021 в 14:09, IRBaboon сказал:

выпадаю в хардфолт сразу после систем инита.

После или внутри? После обычно идет переход в __main(), а уже оттуда в main(). Где именно вы вываливаетесь в хард фолт:

- в ресет хендлере;

- в систем ините;

- в __main()

- в main()

Share this post


Link to post
Share on other sites

Пройдитесь по "внутренностям" функции инициализации и вызываемых в ней функций (Step Into в режиме отладки). Уже будет яснее, откуда сваливается в hardfault.

Share this post


Link to post
Share on other sites
On 3/20/2021 at 6:12 PM, Priest_89 said:

Пройдитесь по "внутренностям" функции инициализации и вызываемых в ней функций (Step Into в режиме отладки). Уже будет яснее, откуда сваливается в hardfault.

Совершенно точно вываливаюсь при выполнении инструкции                  LDR     R0, =SystemInit

On 3/19/2021 at 5:13 PM, MrBearManul said:

А расшифровать пробовали по содержимому регистров?

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

Боюсь что это происходит в самом начале - приложил скрин.
Как только я вхожу в дебаг, и исполняю первую инструкцию он валиться сразу.

Screenshot_1.png

On 3/20/2021 at 6:08 PM, Darth Vader said:

После или внутри? После обычно идет переход в __main(), а уже оттуда в main(). Где именно вы вываливаетесь в хард фолт:

- в ресет хендлере;

- в систем ините;

- в __main()

- в main()

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

Edited by IRBaboon

Share this post


Link to post
Share on other sites
15 минут назад, IRBaboon сказал:

Боюсь что это происходит в самом начале - приложил скрин.

Что значит "вначале"? Процессор просто обязан выполнить инструкцию, чтобы попасть в "хардфолт". На вашем скрине курсор не находится на инструкции. Перейдите в окно дизассемблера и прошагайте пошагово код.

 

Или он у вас каким-то чудесным образом выполняет константу 0xFFFFFFFF как инструкцию? Тогда да, прямой путь в хардфолт.

Share this post


Link to post
Share on other sites

Как видно про приложенным скринам - у ТСа флешь не прошилась программным кодом и содержит стёртое значение 0xFFFFFFFF.

Непонятно - что он вообще пытается выполнять, если прямо перед ним эти 0xFFFFFFFF. Только слепой не заметит......  :unknw:

Share this post


Link to post
Share on other sites
15 minutes ago, jcxz said:

Как видно про приложенным скринам - у ТСа флешь не прошилась программным кодом и содержит стёртое значение 0xFFFFFFFF.

Непонятно - что он вообще пытается выполнять, если прямо перед ним эти 0xFFFFFFFF. Только слепой не заметит......  :unknw:

Ну, я не слепой, просто для меня дизассембли это тёмный лес. 
Как же такое может быть, что во флеш ничего не записалось - битый программатор? 
Мне не до конца ясно почему в аутпуте мне пишут что No Algorithm Found, но я так понимаю, что это вообще для другого банка и меня не касается.

Screenshot_2.png

Share this post


Link to post
Share on other sites
13 минут назад, IRBaboon сказал:

Как же такое может быть, что во флеш ничего не записалось - битый программатор? 

Причин может быть множество: кривой отладчик, кривое подключение отладчика (провода или настройки), неправильный тип МК выбранный в проекте, флешь МК защищена от записи и т.д.

Совет: устанавливать опцию "Verify" для прошиваемой firmware в настройках отладчика, чтобы был контроль правильности прошивания. Не знаю где она в вашей IDE, но думаю должна где-то быть.

 

PS: В эмбеддинге без знания ассемблера делать нечего.  :unknw:

Share this post


Link to post
Share on other sites
40 minutes ago, jcxz said:

Причин может быть множество: кривой отладчик, кривое подключение отладчика (провода или настройки), неправильный тип МК выбранный в проекте, флешь МК защищена от записи и т.д.

Совет: устанавливать опцию "Verify" для прошиваемой firmware в настройках отладчика, чтобы был контроль правильности прошивания. Не знаю где она в вашей IDE, но думаю должна где-то быть.

 

PS: В эмбеддинге без знания ассемблера делать нечего.  :unknw:

Я понимаю - опцию Verify я всегда вообщем-то включаю. Наверное для начала попробую использовать другой программатор.

" В эмбеддинге без знания ассемблера делать нечего." - ну, с одной стороны да, с другой из всех проектов которые я запускал такое первый раз - раньше хардфолт если и был, то решался либо внешним источником питания, либо кривым источником тактирования.
 

Share this post


Link to post
Share on other sites
6 минут назад, IRBaboon сказал:

раньше хардфолт если и был, то решался либо внешним источником питания, либо кривым источником тактирования.

Т.е. наугад, методом тыка. А когда этот метод перестал работать, отсутствие опыта не позволило вам найти истинную причину. Изучайте сечас, у вас есть прекрасная возможность. Сможете расшифровать реальный настоящий "хардфолт". И рекомендую разобраться с настройками проекта. Я не знаком с кейлом, т.к. использую другой компилятор и среду разработки, но первое, на что следует обратить внимание, так это на настройки линковщика и программатора. Почитать документацию при необходимости.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.