Jump to content

    
Sign in to follow this  
Alex_Golubev

При запуске из отладчика программа работает, когда отключаешь и снова включаешь STM32 программа перестает работать

Recommended Posts

Привет.

Контроллер STM32f429zi.

Столкнулся с такой проблемой, запускаешь программу из отладчика все работает (в частности USB), когда передергиваешь питание микроконтроллера программа начинает выполнится некорректно (отваливается USB).

Если запустить контроллер из отладчика IAR и сразу выключить отладчик (шнурок программатора-отладчика выдергиваю) не трогая питание STM32, то все нормально программа выполняется корректно.

Но если передернуть питание то опять все отвалилось.

 

Как можно найти причину этого?

Edited by Alex_Golubev

Share this post


Link to post
Share on other sites
Как можно найти причину этого?

 

Если стартовать при помощи отладчика - происходит задержка, пока отладчик подключается, причина может быть в этом.

 

Или еще может быть у Вас таблица прерываний (0 элемент - начальный адрес стека, 1 - точка входа) не в том месте расположены!

 

Share this post


Link to post
Share on other sites
Куда грузится программа: ОЗУ или FLASH?
Не много не понял вопрос.

Но я загружаю программу во FLASH. Если вы говорите про BOOT0, то BOOT0 у меня на земле.

Edited by Alex_Golubev

Share this post


Link to post
Share on other sites

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

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

Если удается, то постепенно добавляйте в этот проект исходники и вашего глючного проекта.

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

 

зы. Подобный принцип поиска косяков годится для любой отрасли деятельности :)

Share this post


Link to post
Share on other sites
Не много не понял вопрос.

Но я загружаю программу во FLASH. Если вы говорите про BOOT0, то BOOT0 у меня на земле.

Симптомы указывают на неправильное положение таблицы векторов. Надо смотреть что там в файле .icf

 

Share this post


Link to post
Share on other sites

Есть еще один интересный момент, который меня вгоняет в ступор.

А именно, зашиваю эту же прошивку с помощью STM32 ST-LINK Utility в другой микроконтроллер и там такой проблемы нет. Беру еще один мк. там снова такая проблема беру другой ее нет.

 

В общем из 100 мк. 10 шт. ведут себя вот так не понятно.

Share this post


Link to post
Share on other sites
Есть еще один интересный момент, который меня вгоняет в ступор.

Любая прошивка себя так ведет на этих МК, или только ваша?

Схемотехника плат в норме? Среди этих 100 плат эти 10 вообще рабочие (все компоненты правильные)?

 

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

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

 

Share this post


Link to post
Share on other sites
В общем из 100 мк. 10 шт. ведут себя вот так не понятно.

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

Share this post


Link to post
Share on other sites
Еще вариант, который у себя наблюдал - медленно заводится внешний кварц, нужна была задержка.

В любой нормальной программе старт приложения следует производить по условию готовности генератора (соотв. биты или даже прерывание) с контролем таймаута, а НЕ после истечения некой фиксированной задержки.

 

Share this post


Link to post
Share on other sites
по условию готовности генератора
у меня так и сделано.

Плюс у меня стоит внешней генератор на 16 МГц. На нем генерация в норме.

Заметил вот еще что.

Беру не рабочей мк. ставлю уровень оптимизации в IAR low вижу не работает мк. ставлю для этого же мк. уровень оптимизации high, size работает.

Но думаю надо поставить везде high и будит счастье.

А нет беру второй мк. а для него подходит уже low.

Чета ваще не чего не понятно.

Share this post


Link to post
Share on other sites
Но думаю надо поставить везде high и будит счастье.

А нет беру второй мк. а для него подходит уже low. Чета ваще не чего не понятно.

Тут есть два варианта:

1) переписать нормально код, изучая соотв. литературу и мануалы

2) воспользоваться бубном :smile3046:

 

post-2831-1522927038_thumb.jpg

Share this post


Link to post
Share on other sites

Если USB из Куба, то мне приходилось размер кучи увеличивать. А еще SysTick таймер программировать. Как оно у них работает, хрен поймешь.

Share this post


Link to post
Share on other sites
Есть еще один интересный момент, который меня вгоняет в ступор.

А именно, зашиваю эту же прошивку с помощью STM32 ST-LINK Utility в другой микроконтроллер и там такой проблемы нет. Беру еще один мк. там снова такая проблема беру другой ее нет.

В общем из 100 мк. 10 шт. ведут себя вот так не понятно.

Мне приходят в голову следующие вещи, из моего опыта.

Первая: при работе отладчика им запускается DWT счетчик. Если в коде он используется для отсчета каких-либо задержек (почему и как именно - писано на форуме много), а код забывает его проинициализировать, то под отладчиком (или после вываливания из отладки) будет все работать, т.к. DWT тикает, но при запуске после сброса - нет.

Вторая: отладчик стартует медленно; за это время может успеть пройти инициализация периферии, которая не успевает при холодном старте без отладчика. У меня это было что-то тактируемое медленными генераторами (RTC) и, кажется, I2C, не помню точно.

 

В общем и целом опыт мой подсказывает, что чудес не бывает :( . Если что-то ведет себя непредсказуемо и странно, за этим стоит вполне конкретная причина. Ищите!

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.

Sign in to follow this