Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil ULINK-ME
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
ViKo
Были ли у кого проблемы с 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 загружаю. Но не заводится генератор. И не знаю, где рыться.
oleg_lwd
Со своим проектом и со своей платой все режимы отладки JTAG/SW и трассировка вроде работают
ViKo
Цитата(oleg_lwd @ Apr 27 2010, 11:08) *
Со своим проектом и со своей платой все режимы отладки JTAG/SW и трассировка вроде работают

Спасибо! Судя по тому, что загрузка и верификация флэш проходит, дело в программе или аппаратной части.
ViKo
Где-то у Keil писалось, что ULINK-ME по первой ноге JTAG выдает +3.3V, которыми может запитывать тестируемую плату. А для своих разработок рекомендует отрезать эту дорожку или выпаять диод на ULINK-ME. Возможно, в этом и состоит "ограниченность" этого устройства?
Второй (и главный) вопрос - кто-нибудь из пользователей ULINK-ME отлаживал процессоры с внешней шиной, с адресацией за пределы внутренней памяти микроконтроллера?
Генератор у меня запускается, но в какой-то момент вываливается в HardFault.
P.S. Если можно перенести тему в раздел "для начинающих", не возражаю. Я про этот раздел "забыл" smile.gif
bseyur
Вы не можете определить место, где возникает HardFault? Если да, то почему бы просто не создать обработчик этого события и не проанализировать содржимое регистров?
ViKo
Цитата(bseyur @ May 3 2010, 13:50) *
...почему бы просто не создать обработчик этого события и не проанализировать содржимое регистров?

По-умолчанию программа зацикливается там, насколько я понимаю.
Поставив там точку останова, получаю:
R13(SP)=0x64000398
R14(LR)=0xfffffff9
Т.е., стек почему-то организовался во внешнем ОЗУ. А программа залетела в HardFault_Handler из несуществующего адреса.
bseyur
А изначально стек где находился?
На счет регистра LR вы не правы. При переходе в режим исключительной ситуации адрес возврата нужно выгребать из верхушки стека. LR предоставляет всего лишь информацию о режиме, в котором находилось ядро до возникновения исключения.
ViKo
Цитата(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.
bseyur
Так MSP - это и есть указатель стека... вот он и перепрыгивает на область внешней ОЗУ. wink.gif
ViKo
Цитата(bseyur @ May 3 2010, 17:41) *
Так MSP - это и есть указатель стека... вот он и перепрыгивает на область внешней ОЗУ. wink.gif

Я его об этом "не просил" smile.gif
ViKo
Со стеком разобрался (в разделе для начинающих написано).
Теперь о главном.
Пытался использовать библиотеку 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 проблем нет. С библиотекой, надеюсь,...
Только не говорите выкинуть ее нахрен. Потом, потом...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.