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

 
 
 
Reply to this topicStart new topic
> Keil ULINK-ME, Чего не может Keil ULINK-ME
ViKo
сообщение Apr 26 2010, 12:01
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Были ли у кого проблемы с ULINK-ME?
В хэлпе uVision4 написано:
ULINK-ME is only delivered and supported as part of Keil Starter Kits. It is not guaranteed to work with custom hardware.

Скомпилировал свой проект (начало). Что-то во флэш STM32F103 загружаю. Но не заводится генератор. И не знаю, где рыться.
Go to the top of the page
 
+Quote Post
oleg_lwd
сообщение Apr 27 2010, 08:08
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 26-10-05
Пользователь №: 10 131



Со своим проектом и со своей платой все режимы отладки JTAG/SW и трассировка вроде работают
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 27 2010, 11:10
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(oleg_lwd @ Apr 27 2010, 11:08) *
Со своим проектом и со своей платой все режимы отладки JTAG/SW и трассировка вроде работают

Спасибо! Судя по тому, что загрузка и верификация флэш проходит, дело в программе или аппаратной части.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 3 2010, 07:39
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Где-то у Keil писалось, что ULINK-ME по первой ноге JTAG выдает +3.3V, которыми может запитывать тестируемую плату. А для своих разработок рекомендует отрезать эту дорожку или выпаять диод на ULINK-ME. Возможно, в этом и состоит "ограниченность" этого устройства?
Второй (и главный) вопрос - кто-нибудь из пользователей ULINK-ME отлаживал процессоры с внешней шиной, с адресацией за пределы внутренней памяти микроконтроллера?
Генератор у меня запускается, но в какой-то момент вываливается в HardFault.
P.S. Если можно перенести тему в раздел "для начинающих", не возражаю. Я про этот раздел "забыл" smile.gif
Go to the top of the page
 
+Quote Post
bseyur
сообщение May 3 2010, 10:50
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Вы не можете определить место, где возникает HardFault? Если да, то почему бы просто не создать обработчик этого события и не проанализировать содржимое регистров?
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 3 2010, 11:10
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(bseyur @ May 3 2010, 13:50) *
...почему бы просто не создать обработчик этого события и не проанализировать содржимое регистров?

По-умолчанию программа зацикливается там, насколько я понимаю.
Поставив там точку останова, получаю:
R13(SP)=0x64000398
R14(LR)=0xfffffff9
Т.е., стек почему-то организовался во внешнем ОЗУ. А программа залетела в HardFault_Handler из несуществующего адреса.
Go to the top of the page
 
+Quote Post
bseyur
сообщение May 3 2010, 13:00
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



А изначально стек где находился?
На счет регистра LR вы не правы. При переходе в режим исключительной ситуации адрес возврата нужно выгребать из верхушки стека. LR предоставляет всего лишь информацию о режиме, в котором находилось ядро до возникновения исключения.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 3 2010, 13:59
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(bseyur @ May 3 2010, 16:00) *
А изначально стек где находился?
На счет регистра LR вы не правы. При переходе в режим исключительной ситуации адрес возврата нужно выгребать из верхушки стека. LR предоставляет всего лишь информацию о режиме, в котором находилось ядро до возникновения исключения.

Я в этом совсем "зеленый". Вот код из startup_stm32f10x_hd.s
Код
; Reset handler routine
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main

                LDR     R0, = SystemInit_ExtMemCtl; initialize external memory controller
                BLX     R0

                LDR     R1, = __initial_sp       ; restore original stack pointer
                MSR     MSP, R1                  

                LDR     R0, =__main
                BX      R0
                ENDP

После сброса стек в 0x20000400. После команды MSR в MSP загружается 0x64000400. Потому что в свойствах проекта я задал, что есть внешнее ОЗУ по адресу 0x64000000 размером 0x40000. Есть и еще пара устройств на шине. Почему стек прицепился к этой области, мне невдомек.
Потом скачет в main и где-то там заскакивает в HardFault.
Go to the top of the page
 
+Quote Post
bseyur
сообщение May 3 2010, 14:41
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Так MSP - это и есть указатель стека... вот он и перепрыгивает на область внешней ОЗУ. wink.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 3 2010, 14:57
Сообщение #10


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(bseyur @ May 3 2010, 17:41) *
Так MSP - это и есть указатель стека... вот он и перепрыгивает на область внешней ОЗУ. wink.gif

Я его об этом "не просил" smile.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 15 2010, 23:22
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Со стеком разобрался (в разделе для начинающих написано).
Теперь о главном.
Пытался использовать библиотеку STM32F10x_StdPeriph_Lib_V3.1.2. Имел описанные выше проблемы.
Буквально только что установил V3.3.0. Цитирую CMSIS_changes.htm:
Цитата
The old startup concept (calling SystemInit_ExtMemCtl from startup file and calling SystemInit from main) has the weakness that it does not work for controllers which need a already configuerd clock system to configure the external memory controller.

Перевожу эту абракадабру так - "индусы" лажанулись, с внешней памятью работать не будет.
Перешел на версию V3.3.0, выбросил из main, как написано, SystemInit - заработало!
В-общем, с ULINK-ME проблем нет. С библиотекой, надеюсь,...
Только не говорите выкинуть ее нахрен. Потом, потом...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th July 2025 - 10:46
Рейтинг@Mail.ru


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