Stm32 не запускается программа

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

Микроконтроллер не загружается корректно

Хотя это может показаться странным, существует довольно длинный перечень причин, по которым STM32 отказывается запускаться должным образом. Эта проблема обычно имеет следующие симптомы:

• микропрограмма не запускается

• Счетчик команд указывает на полностью недопустимый адрес (обычно 0xfffffffd или 0xfffffffe , но возможны и другие адреса в 4 ГБ области памяти), как показывает Eclipse во время сеанса отладки.

Чтобы решить эту проблему, нам нужно различать два случая: вы разрабатываете микропрограммное обеспечение для отладочной платы, такой как Nucleo, или для разработанной вами платы (это различие просто для упрощения анализа).

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

STM32CubeIDE. IDE не работает с китайскими клонами!!! Что делать???

B. Руководство по поиску и устранению неисправностей

• Определение секций памяти в файле mem.ld скрипта компоновщика неверно ни для области Flash-памяти, ни для области SRAM (обычно область Flash-памяти всего на всего не начинается с 0x08000000 ).

• Неправильный startup-файл запуска или вы просто забыли переименовать его расширение со строчной .s на заглавную .S .

Если вместо этого вы разрабатываете микропрограмму для собственной платы, то помимо контроля двух предыдущих пунктов вы также должны проверить следующее:

• Правильность конфигурации выводов BOOT (по крайней мере, вывод BOOT0 точно заземлен, а BOOT1 плавающий).

• Вывод NRST правильно развязан с помощью конденсатора емкостью 100 нФ.

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

Если это так, вероятно, у вас повреждена область памяти байтов конфигурации (Option bytes). STM32CubeProgrammer может очень помочь вам в отладке такой ситуации. После того, как вы подключите отладчик ST-LINK, перейдите в раздел Option bytes и убедитесь, что конфигурация BOOT (в разделе User configuration) правильно соответствует вашему микроконтроллеру.

В конце концов, иногда полное стирание чипа также может помочь в решении непонятных проблем с зупуском 😉

B. Руководство по поиску и устранению неисправностей

Невозможно загрузить микропрограмму или отладить микроконтроллер

Иногда бывает, что не удается загрузить микропрограмму на микроконтроллер или отладить его с помощью OpenOCD. Еще один узнаваемый симптом в том, что светодиод LD1 отладчика ST-LINK (тот, который попеременно мигает красным и зеленым, пока плата находится в процессе отладки) перестает мигать и остается замороженным, когда оба светодиода включены.

программатор ST-link V2 для STM8 / STM32 . установка драйвера

Когда это происходит, это означает, что отладчик ST-LINK не может получить доступ к порту отладки (через интерфейс SWD) целевого микроконтроллера или Flash-память заблокирована, предотвращая ее доступ к отладчику. Обычно существует две причины, которые приводят к этому неисправному состоянию:

Читайте также:
Как пользоваться квазаром программа

• Выводы SWD были сконфигурированы как GPIO общего назначения (это часто случается, если мы выполняем сброс конфигурации выводов в CubeMX).

• Микроконтроллер находится в режиме глубокого сна с пониженным энергопотреблением, который отключает порт отладки.

• Что-то не так с конфигурацией байтов конфигурации (возможно, Flash-память защищена от записи или включен уровень 1 защиты от чтения).

Чтобы решить эту проблему, мы должны заставить отладчик ST-LINK подключиться к целевому микроконтроллеру, сохраняя при этом низкий уровень на выводе nRST. Эта операция называется подключением при сбросе (connection under reset), и ее можно выполнить с помощью инструмента STM32CubeProgrammer, выбрав режим аппаратного сброса Hardware reset выпадающем списке Reset mode, как показано ниже.

Эту же операцию можно выполнить в OpenOCD, но с несколькими дополнительными шагами. Прежде всего, мы должны сказать OpenOCD «подключиться при сбросе», изменив файл конфигурации нашей платы (например, для Nucleo-F0 мы должны изменить файл board/st_nucleo_f0.cfg ). В этом файле вы найдете команду reset_config , которую нужно вызывать другим способом:

reset_config srst_only connect_assert_srst

Затем мы должны запустить OpenOCD и подключиться к консоли telnet через порт 4444 и ввести команду reset halt :

$ telnet localhost 4444 > reset halt

Теперь появится возможность снова перепрограммировать микроконтроллер или, в конечном итоге, выполнить массовое стирание.

Источник: studfile.net

Как «раскирпичить» STM32

Меня зовут Дмитрий Руднев. В этой публикации я поделюсь своим горьким опытом.

В современной разработке широко используются микроконтроллеры STM32. Они обладают неплохим соотношением цена/производительность, вокруг них сложилась развитая «экосистема». Для прошивки этих микроконтроллеров и внутрисхемной отладки обычно используют интерфейс Serial Wire (SWD).

В процессе отладки бывает всякое. Не беда, если STM32 после прошивки ведёт себя неадекватно. Обидно, если при этом к нему не удаётся подключиться.

На этом месте не надо впадать в отчаяние, т.к. «убить насмерть» STM32 в процессе программирования непросто, и его работоспособность можно восстановить штатными средствами.

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

Connect Under Reset

Если на входе BOOT0 обнаружен низкий уровень, системный загрузчик передаёт управление пользовательской программе, находящейся в FLASH-памяти. Если при этом к интерфейсу SWD подключен в режиме «Connect Under Reset» внутрисхемный отладчик, ему удаётся управление перехватить.

Рассмотрим, как это сделать с помощью программы STM32 ST-LINK Utility и программатора ST-LINK/V2-1. Программа была получена с официального сайта ST. Программатор пришёл в составе платы NUCLEO-F446ZE.

Запускаем программу, входим в «Settings»:

В окне «Settings» выбираем режим «Connect Under Reset»:

Подключаемся к нашему «кирпичику»:

Производим очистку памяти программ:

Подключение по UART1

Очень часто для прошивки STM32 применяются недорогие китайские клоны ST-LINK/V2. Без аппаратной переделки режим «Connect Under Reset» они не поддерживают. В этом случае стоит попытаться очистить память программ, подключившись к микроконтроллеру по UART.

Если подать на вход BOOT0 высокий уровень, то можно подключиться к микроконтроллеру через интерфейс UART1 с использованием программы Flash Loader Demonstrator. Программу можно получить с официального сайта ST. Преобразователь USB–UART подойдёт любой.

Читайте также:
Полезные программы на мак

Запускаем программу. Выбираем COM-порт, к которому подключен преобразователь USB–UART:

Убеждаемся, что соединение установлено:

На следующем экране программа показывает области памяти микроконтроллера:

На следующем экране мы должны выбрать действие. Выбираем Erase – All:

Очистка памяти программ успешно завершена:

На этом месте надо вернуть на вход BOOT0 низкий уровень.

От автора

Любое несчастье, которое происходит с Вами, с кем-то другим уже происходило. Всё, что описано в публикации, происходило со мной и моим оборудованием.

Первая часть публикации повествует о том, как я в самом начале самоизоляции «закирпичил» новенькую оригинальную NUCLEO-F446ZE.

Это не стало для меня ударом, т.к. я уже знал, что делать. Наоборот, в процессе восстановления работоспособности платы я даже получил какое-то удовольствие от работы.

Предыдущий опыт был более трагичным. Я использовал совсем бюджетную плату в связке с очень недорогим клоном ST-LINK/V2. В один прекрасный миг, связь с платой по SWD пропала.

Результаты поиска в сети убедили меня использовать режим «Connect Under Reset». Ничтоже сумняшеся, я подключил вывод NRST микроконтроллера к выводу «Reset» программатора. Не знал я тогда, что этот вывод используется только при работе с STM8.

Сигнал сброса не проходил. Связь по интерфейсу SWD не восстанавливалась. Игры с кнопкой «Reset» на плате результата не давали. В самый раз было начинать читать мануалы.

И метод RTFM сработал! Из раздела «2.3.10 Boot modes» datasheet DS5792 rev13 я узнал про загрузку через UART1. Затем я нашёл информацию о Flash Loader Demonstrator. Восстановить работоспособность STM32F103RET6 с этими инструментами было уже несложно, что и вылилось в 113 слов и пять картинок второй части публикации…

Буду рад, если мой опыт будет кому-то полезен!

  • Блог компании RUVDS.com
  • Программирование микроконтроллеров
  • Электроника для начинающих

Источник: habr.com

Stm32 не запускается программа

Подскажите, пожалуйста. Собственно, вопрос в теме. Сделал платку с контроллером STM32L152CB. Подключил по SWD, как написано в документации к отладчику (ST-LINK/V2):

Изображение

Дебаг в кейле запускается раз через раз. Когда не запускается, пишет:

No Target connected

А когда запускался, через несколько шагов выдавал ошибку:

Error while attempting to read 64 bytes from memory

Установил пятый кейл. Дебаг также запускается через раз. Но теперь программа стартует из адреса 0x1FF00000 (System memory). При подтягивании ножки Boot0 к нулю, контроллер перестаёт запускаться и выдаёт всё то же сообщение «No Target connected».

В программке ST-LINK Utility всё всегда работает. Правда, первый раз программа выдала ошибку и сказала попробуйте в настройках поставить «Connect Under Reset». После этого всё работает без ошибок. Может ресет отключить от отладчика? Правда, мне уже надоело платы резать.

И ещё, чтоб тем не плодить. Я может слепой, но может кто-нибудь даст ссылку, где чётко написано, какие контроллеры являются low density, medium density и т.д. А то в даташитах они постоянно ссылаются на это дело. Чисто интуитивно понтяно, что это примерно вот так, но тут только серия STM32F, да и в даташитах фигурирует medium density+, которого тут нет.

Читайте также:
Как понимать сообщение знач при вычислении формулы в программе excel

Добавлено: Вс дек 08, 2013 20:02:51

Схему и фотографии платы в нормальном разрешении .
Однозначно или сопли или длинные провода.
Надеюсь керамики не пожалел ?

алёша писал(а):

При подтягивании ножки Boot0 к нулю, контроллер перестаёт запускаться и выдаёт всё то же сообщение «No Target connected».

Добавлено: Пн дек 09, 2013 21:18:00

Отладку сделал через переходничок. Разъёмчик конечно хлипковат:

Добавил конденсаторы 33 пФ на SWCLK, SWDAT, NRST — не помогло.
Вот сама плата, соплей вроде не наблюдается:

Ну и пробую в ST Link Utility — всё работает вообще без запинки. А в кейле раньше работало иногда, если Boot0 не подтягивать ни к чему, а сейчас вообще перестало работать.

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Добавлено: Вт дек 10, 2013 23:21:29

Поставил в кейле тоже Connect under Reset. Теперь в дебаг входит без проблем. Но после пары шагов куда-то улетает, а когда останавливаешь, выдаёт сообщение:

Изображение

Компания MEAN WELL производит широкий ряд импульсных AC/DC-преобразователей в кожухе индустриального назначения. Особого внимания заслуживают семейства LRS, HRP и UHP, которые выполнены в кожухе и подключаются к однофазным сетям переменного тока. Рассмотрим подбор оптимального и экономичного ИП на примере этих семейств с учетом особенностей эксплуатации, как наличие пыли, агрессивных веществ в атмосфере, надежность и качество электросети, температурные условия, возможные временные перегрузки и.т.д. Семейства LRS, HRP и UHP подходят для обеспечения питания промышленных систем автоматизации и управления, электроприводов, различного технологического оборудования и устройств

Добавлено: Пт дек 13, 2013 00:14:53
Парни, каждый раз затыкается на одной и той же инструкции:
GPIOA -> MODER = (1<<22)|(0<<23);

Если её закомментить, всё работает без проблем. При простой загрузке программы ошибок не было ни разу. При включении питания программа выполняется. А вот отладка глючит. Также почему-то при дебаге продолжает иногда стартовать с адреса 0x1FF00000, как будто ножки Boot настроены на выполнение встроенного загрузчика.

Вот здесь написали, что прошиваться может нормально, а дебаг глючить из-за ножек Boot. У меня они подтянуты к нулю.
За годы общения на формуах я уже привык сам с собой общаться, но мало ли кто что подскажет:)

На многих доступных в России компонентах MORNSUN можно реализовать архитектуру распределенного питания для современных ПЛИС (FPGA), процессоров, цифровых сигнальных процессоров (DSP) и других аналогичных компонентов от шины питания до точки конечной нагрузки. Особая тема статьи – на что обращать внимание при выборе стабилизаторов напряжения PoL (Point of Load) для указанных компонентов.

Добавлено: Пт дек 13, 2013 09:42:54
алёша писал(а):
Парни, каждый раз затыкается на одной и той же инструкции:
GPIOA -> MODER = (1<<22)|(0<<23);

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

Тем кто не любит читать даташит , обычно и приходится самим с собой болтать .
В даташите много интересного можно найти, если начать читать.
Например то что на PORTA висит SWD и что таким макаром

GPIOA -> MODER = (1<<22)|(0<<23);

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru