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

 
 
 
Reply to this topicStart new topic
> проблема с отладочной платой 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
broom
сообщение Sep 21 2011, 23:14
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 15-02-11
Пользователь №: 63 006



В левом верхнем углу, под надписью workspace должно быть Flash debug. Если стоит RAM debug то флэш останется чист
Go to the top of the page
 
+Quote Post
viZIer
сообщение Sep 22 2011, 07:09
Сообщение #3





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



Используя программу STM32 ST-LINK Utility, по адресам во Flash 0x080000000 вижу что присутствует программа. Но программа не запускается из флеша
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Dec 29 2011, 22:05
Сообщение #4


Местный
***

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



Аналогично. Заливаю программой ST-LINK_Utility в Discovery, созданный в IAR-е BIN файл. Утилита говорит ОК.
Читаю по адресу 0х08000000 - есть программа, с тем-же кодом что и IAR создал. Но не работает.
Если с помощью ST-LINK_Utility выполнить те-же действия с регистрами контроллера, что и залитая программа (включение светодиодов) - то
светодиоды загораются.
А операций всего три:
1. регистр разрешения тактирования RCC_APB2ENR [0x40021018] --> число 0x00000010 ;тактовый сигнал GPIOC разрешен
2. регистр контроля GPIOC_CRH [0x40011004] --> число 0х44444422 ;ножки GPIOC 8,9 - работают на вывод
3. регистр выходных данных GPIOC_ODR [0x4001100c] --> число 0x00000300 ;синий и зеленый светодиоды загораются

Есть подозрение, что скомпилированный на Си файл содержит еще какую-то настройку - потому весь Си-шный интернет успешно мигает светодиодами. Просьба сторонника ассемблера- выложите кто может, залитую в STM32VLDISCOVERY заводскую демо-программку, мигающую светодиодами. Или ссылку, где ее взять можно...
Go to the top of the page
 
+Quote Post
vovanse
сообщение Dec 30 2011, 03:41
Сообщение #5


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

Группа: Свой
Сообщений: 185
Регистрация: 14-02-06
Из: Кемерово
Пользователь №: 14 293



Цитата(controller_m30 @ Dec 30 2011, 05:05) *
Или ссылку, где ее взять можно...


На сайте stm, странице посвященной данному продукту - http://www.st.com/internet/evalboard/product/250863.jsp Design Support, Firmware
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Dec 30 2011, 23:21
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 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 - 00:12
Рейтинг@Mail.ru


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