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

 
 
> проблема с отладочной платой STM32VLDISCOVERY, не прошивается во Flash
viZIer
сообщение Sep 21 2011, 09:30
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 19-09-07
Пользователь №: 30 666



Всем добрый день.

Используюсь средой IAR 5.41 для ARM (соответственно) и китом STM32VLDISCOVERY. Проблема заключается в следующем:
Пока отлаживается программа через среду, все работает по алгоритму программы. Но когда отключаю питание с устройства и снова подключаю
программа отсутствует в ядре.

Настройки для прошивки и отладки задавал как указано в руководстве от ST.

Как правильно настроить среду чтобы контроллер работал после перезапуска.

Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
controller_m30
сообщение Dec 30 2011, 23:21
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



К сожалению, Firmware Package с сайта STM, я так и не смог запустить в IAR 5.40 (хотя в описании пакета сказано, что подходит версия IAR 5.40 or later...)
Но удалось найти в нете HEX файл с миганием светодиодов, а по нему определить - в чем было дело, и почему созданный и проверенный в IAR, ассемблерный файл не хочет работать самостоятельно на STM32VLDiscovery.
Оказалось, что при создании ассемблерного проекта IAR создает таблицу векторов, в которой ячейка вектора RESET содержит команду безусловного перехода "B main" - так принято в AT91SAMxxx например.
А должно быть (чтоб программа для Cortex запустилась) - абсолютный адрес перехода на старт программы "main", да еще и с младшим битом =1 (означает, что это вектор для режима THUMB).
Например, в созданном IAR BIN-файле:
Код
адрес:       данные:
0x08000000 - 0xB800F000      ;начальное значение указателя стека SP
0x08000004 - 0xB800F000      ;вектор Reset содержит команду "B main"
0x08000008 - 0xxxxxxxxx      ;здесь начало программы "main"
----------------------------------------------------------------------------------
а должно быть так:
0x08000000 - 0xB800F000      ;начальное значение указателя стека SP
0x08000004 - 0x08000009      ;вектор Reset содержит адрес начала программы "main", + установленный в 1 младший бит
0x08000008 - 0xxxxxxxxx      ;здесь начало программы "main"
Если в таблице векторов должны быть еще адреса прерываний, то для Cortex M3 в этих векторах тоже должен быть указан абсолютный адрес подпрограммы обработчика прерывания, и установленный в 1 младший бит - чтоб процессор перешел в режим THUMB.
IAR 6.21 из ассемблера создает такой-же, не работающий самостоятельно файл прошивки, хотя успешно отлаживает и прошивает программу в Discovery...

Кстати, начальное значение указателя стека, тоже задается IAR-ом не по человечески - то копируется вектор RESET, то задается равным 0. Но из настроек "Linker/Config/Edit" все равно извлекать данные не хочет.

Сообщение отредактировал controller_m30 - Dec 30 2011, 23:22
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:37
Рейтинг@Mail.ru


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