Перейти к содержанию
    

Keil ULINK-ME

Были ли у кого проблемы с 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 загружаю. Но не заводится генератор. И не знаю, где рыться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Со своим проектом и со своей платой все режимы отладки JTAG/SW и трассировка вроде работают

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Со своим проектом и со своей платой все режимы отладки JTAG/SW и трассировка вроде работают

Спасибо! Судя по тому, что загрузка и верификация флэш проходит, дело в программе или аппаратной части.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где-то у Keil писалось, что ULINK-ME по первой ноге JTAG выдает +3.3V, которыми может запитывать тестируемую плату. А для своих разработок рекомендует отрезать эту дорожку или выпаять диод на ULINK-ME. Возможно, в этом и состоит "ограниченность" этого устройства?

Второй (и главный) вопрос - кто-нибудь из пользователей ULINK-ME отлаживал процессоры с внешней шиной, с адресацией за пределы внутренней памяти микроконтроллера?

Генератор у меня запускается, но в какой-то момент вываливается в HardFault.

P.S. Если можно перенести тему в раздел "для начинающих", не возражаю. Я про этот раздел "забыл" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не можете определить место, где возникает HardFault? Если да, то почему бы просто не создать обработчик этого события и не проанализировать содржимое регистров?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...почему бы просто не создать обработчик этого события и не проанализировать содржимое регистров?

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

Поставив там точку останова, получаю:

R13(SP)=0x64000398

R14(LR)=0xfffffff9

Т.е., стек почему-то организовался во внешнем ОЗУ. А программа залетела в HardFault_Handler из несуществующего адреса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А изначально стек где находился?

На счет регистра LR вы не правы. При переходе в режим исключительной ситуации адрес возврата нужно выгребать из верхушки стека. LR предоставляет всего лишь информацию о режиме, в котором находилось ядро до возникновения исключения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А изначально стек где находился?

На счет регистра 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так MSP - это и есть указатель стека... вот он и перепрыгивает на область внешней ОЗУ. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так MSP - это и есть указатель стека... вот он и перепрыгивает на область внешней ОЗУ. ;)

Я его об этом "не просил" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Со стеком разобрался (в разделе для начинающих написано).

Теперь о главном.

Пытался использовать библиотеку 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 проблем нет. С библиотекой, надеюсь,...

Только не говорите выкинуть ее нахрен. Потом, потом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...