Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладочная плата STM32VLDISCOVERY
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Twen
Добрый день, у меня такая ситуация, купил отладочную плату STM32VLDISCOVERY, но в iar for arm 5.50 не могу настроить соединение ПК с прибором, не могу зашить...а вот через иар 6.10 находит прибор, но он платный, есть только демонстрационная версия...Что посоветуете?
V_N
Только что проверил демо пример note AN3268: IAR ANSI C/C++ Compiler V5.50.5.51995/W32 for ARM
Все компилится и отлаживается
676038
...This is a known bug in EWARM 5.50 with value line flashloader. It is fixed in EWARM5.50.5.
I advise you, if possible, to upgrade your EWARM version to 5.50.5 (available on IAR web site: www.iar.com).

Else , you can use the attached patch to fix this problem with your installed version. It contains a readme that explains hosw to use it....https://my.st.com...
Twen
Спасибо большое ! wink.gif
Twen
Начал разбирать с библиотекой для стм. В примерах для отладочной платы Discovery используется модуль startup_stm32f10x_md_vl.s.На сколько я понял это ассемблерный модуль. В проекте я хотел настроить модуль тактирования МК, но в описании примера в main.c указано следующее:
"At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f10x_xx.s) before to branch to application main."
Дело, что в настройках компилятора, поставлена галочка "Run to main", а почему тогда работа МК начинается с файла tartup_stm32f10x_md_vl.s, а не с main?
Twen
И хотелось бы понять как в библиотеке для stm реализованый прерывания. Обычно прерывания иаре описываются типа:
#pragma vector = TIMERA1_VECTOR
__interrupt void IntTimerA1(void)
{
}

А у библиотеке стм непонятно как, есть функция обработки прерываения, например SysTick_Handler(), а у файле startup_stm32f10x_xx.s написано :

__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler


Как эту надпись на ассемблере можно перевести на русский?

ViKo
Цитата(Twen @ Feb 28 2011, 09:22) *
Дело, что в настройках компилятора, поставлена галочка "Run to main", а почему тогда работа МК начинается с файла tartup_stm32f10x_md_vl.s, а не с main?

Это не в настройках компилятора, а в настройках отладчика.

Цитата(Twen @ Feb 28 2011, 13:11) *
DCD SysTick_Handler ; SysTick Handler
Как эту надпись на ассемблере можно перевести на русский?

Обработчик прерывания. Там еще указано [WEAK], что значит, что если найдется другой обработчик в проекте, то этот будет игнорирован.
upd. неправильно слово написал, нужно WEAK
Twen
Согласен, но почему же не с main-а стартует? И если, кто-то знаком с ассемблером стм, то дайте ссылки на какую-то книгу по ассемблеру для стм, заранее спасибо )

Цитата
Обработчик прерывания. Там еще указано [WEEK], что значит, что если найдется другой обработчик в проекте, то этот будет игнорирован.


А почему не указывается адрес вектора прерывания?
ViKo
Цитата(Twen @ Feb 28 2011, 13:22) *
Согласен, но почему же не с main-а стартует? И если, кто-то знаком с ассемблером стм, то дайте ссылки на какую-то книгу по ассемблеру для стм, заранее спасибо )
А почему не указывается адрес вектора прерывания?

Joseph Yiu. The Definitive Guide to the ARM Cortex-M3, 2 Ed (2010)
здесь имеется, но доверие нужно заслужить
Сами вектора прерываний заданы в начале startup_*.s
А адрес обработчика подставляется командой DCD
Код
                DCD     SysTick_Handler    ; SysTick Handler

Потом идет обработчик-заглушка. Зацикленный на себя код.
Код
SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP

Но в другом файле (*_it.c обычно) можно создать другой обработчик прерывания, на c. Который и будет скомпилирован и собран в проект.

До перехода в main() выполняются две функции. Функция __main копирует code и data, копирует или декомпрессирует RW data, инициализирует нулями ZI дата. Затем функция __rt_entry устанавливает stack и heap, инициализирует библиотечные функции, вызывает конструкторы верхнего уровня C++ (а также выходит из приложения после окончания работы основной программы). После этого вызывается функция main.
Так написано в DUI0471C_developing_for_arm_processors.pdf
Который (и кучу других) можно скачать с сайта ARM.
Twen
Понятно, спасибо.
Twen
Я хочу поставить на процессор(платка discovery) STM32F100B операционную систему uicroC...на сайте http://micrium.com есть множество ОС микроС, которые уже портированы, для stm есть ОС портированы на отладочные платы STM3210B-EVAL, STM3210E-EVAL, STM32-SK, STM32F103ZE-SK...у все них процессор STM32F103, а у моей платы F100. Так как процессоры 103 и 100 отличаются по большому счету емкостью памяти и наличием аппаратного USB, то я могу смело скачивать операционку для одного из отладочных модулей и использовать для своей платы, не так ли? И какие меня могут ожидать трудности в использовании ОС для 103 а не для 100?
P.S. С ОС реального времени никогда не работал.
Twen
Опытные товарищи программисты обращаюсь к вам за помощью.
И так начался разбираться с микроС. Прочитал перевод книги о микроСи и принялся за практику. И тут началось )...
У меня возникла следующая проблема, на сайте микроСи я скачал проект для отладочной платы STM32F103ZE-SK, вотссылка . У меня на плате, как я уже говорил контроллер STM32F100B, а проект сделан на 103 ...
Так вот , проект я нормально загрузил у свою платку, но после загрузки зеленая полоса с курсором появляется не на заголовке функции main, а на у асемблерном окне(Рис. 2). И после запуска программы процессор попадает у функцию App_Fault_ISR ( Description : Handle hard fault.) по прерыванию(Рис.1).
Выходит что-то не так с настройками ОС под мой процессор. Например 103 работает на частотах до 72 Мгц и переферии у него больше чем у 100.
Но я как бы запутался, я думал код программы начинает с выполнение с функции main , а в нее я даже не захожу а сразу попадаю в прерывания, так вот не понятно где находятся эти самые настройки, которые вызывают прерывание по аппаратной ошибки(То есть откуда стартует код!!! Как видно явно не из main...).

За раннее спасибо.
ViKo
В startup.s есть строчка
DCD Reset_Handler ; Reset Handler
Вот оттуда и стартует.
В форуме это обсуждалось.

Twen
Я понял, но у проекте не подключен нет такого файла startup.s ...Это же как бы операционка, может серия 100 не поддерживает ОС (...

На процессоре можно запустить микроСи/ОС-II, если он удовлетворяет следующим основным требованиям:

1. Вы должны иметь компилятор С для выбранного процессора и компилятор должен понимать реентерабельный код.
2. Вы должны иметь возможность включать и выключать прерывания из С.
3. Процессор должен поддерживать прерывания и вам нужно обеспечить регулярно возникающее прерывание (с частотой примерно 10…100 Гц).
4. Процессор должен аппаратно поддерживать стек, и процессор должен иметь возможность сохранять в стеке большие объёмы данных (возможно несколько КБ).
5. Процессор должен иметь команды загрузки и сохранения указателя стека и других регистров в стеке или в памяти.

Я просто думал, что если библиотеки подключены stm32f10x..., то ОС должна завестись и на 100...
AHTOXA
Скорее всего, у вас банально не хватает ОЗУ, у 100-й серии его маловато.
Стартап может быть написан и на Си, поищите таблицу векторов (что-то типа
Код
void (* const g_pfnVectors[])(void) =
{
(intfunc)((unsigned long)&_estack),
    Reset_Handler,
    NMI_Handler,
    HardFault_Handler,
    MemManage_Handler,

Twen
Таблица векторов написана у файле app_vect_v5.c...

__root const APP_INTVECT_ELEM __vector_table[] @ ".intvec" = {
{ .Ptr = (void *)__sfe( "CSTACK" )}, /* 0, SP start value. */
__iar_program_start, /* 1, PC start value. */
App_NMI_ISR, /* 2, NMI. */
App_Fault_ISR, /* 3, Hard Fault. */
App_MemFault_ISR, /* 4, Memory Management. */

АЗУ у 103 от 6 до 20 кБ, а у 100 от 4 до 8 кБ... я сомневаюсь , что маловато АЗУ, так как у проекте пару задач и то я их удалил, оставил одну практически пустую...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.