stm32f4 Discovery инициализация

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

Здравствуйте коты, предисловие такое, игрался с stm32f100rb( stm32f100 discovery ) проблем практически не было и инфы в сети достаточно... взял stm32f4 Discovery для изучения более мощного контроллера, и появилось желание использовать стандартную библиотеку для периферии от ST, в stm32f100 работал непосредственно с регистрами по даташиту...
По аналогии создал проект в iar 6.21, подключил startup_stm32f4xx.s, stm32f4xx.h, system_stm32f4xx.c, system_stm32f4xx.h, прописал пути к заголовочным файлам, файл линкера взял из demo проекта от ST для stm32f4discovery проект запустился, помигал светодиодиком, но осталось несколько вопросов и опасений:

1. В general options в поле device не stm32f407vgt6, вообще не ни одного stm32f4... просто выбрал в поле Core - Cortex-M4.
Может ли это повлечь какие то проблемы при работе с stm32f407 ?

2. Контроллер запустился но явно не на 168Mhz, я предполагаю что из-за этого stm32f4xx.h -->

Код: Выделить всё

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ 
#endif /* HSE_VALUE */
А на плате установлен кварц на 8Mhz, как выйти из ситуации желательно с помощью, библиотечных функций и stm32f4xx_rcc.c
( з библиотечными функциями мала знаком )

3. Iar`овский загрузчик(ST-link) и дебагер не работает, пишет что о способен работать только с Cortex-M3,и нет загрузчика в папке Iar/....../,может другую версию Iar, или загрузчик можно где то надыбать, st-link utility работает отлично, контроллер определяет правильно,пишет,стрирает...
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

jordan писал(а):1 ...Может ли это повлечь какие то проблемы при работе с stm32f407 ?
... если нет какой либо специфики ( например различия в векторах прерывания ...), то все будет работать нормально ИМХО ... ( конечно про полноценную симуляцию и отладку можно забыть :) )
2. Запустить на 168Mhz можно и "ручками" - тем более если datasheet под рукой
3. Использую Keil - F4 там есть ....
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

У меня ИАР древний, но и в нем есть ST STM32F4xxx
C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт.
И при отладке не удобно - нет для дебагера файла с описанием регистров переферии - просмотр регистров кроме ядра будет пустой.
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

Запустить на 168Mhz можно и "ручками" - тем более если datasheet под рукой
- то что можно ручками по даташиту это понятно, я попросил пример настройки библиотечными функциями если у кого есть такая возможность...
У меня ИАР древний, но и в нем есть ST STM32F4xxx
C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт.
линкер в любом случае нужен, линкер есть... а что у вас за версия Iar?

кто настраивал на 168Mhz, как решали задачу?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

У меня IAR 6.30. Там есть этот МК.
А для настройки тактирования я воспользовался Excell скриптом от производителя.
Взять его можно тут: СЦЫЛКО
Настраиваете тактирование, потом жмете Run и потом генерируете исходник system_stm32f4xx.c и заменяете им тот, что есть у вас.
В файле startup надо проверить наличие этих строк:

Код: Выделить всё

.........

        MODULE  ?cstartup

        ;; Forward declaration of sections.
        SECTION CSTACK:DATA:NOROOT(3)

        SECTION .intvec:CODE:NOROOT(2)

        EXTERN  __iar_program_start
        EXTERN  SystemInit
        PUBLIC  __vector_table

        DATA
__vector_table
        DCD     sfe(CSTACK)
        DCD     Reset_Handler             ; Reset Handler
..........
И в обработчике Reset_Handler (в том же файле):

Код: Выделить всё

...................
        THUMB
        PUBWEAK Reset_Handler
        SECTION .text:CODE:REORDER(2)
Reset_Handler

        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0
..................
А с библиотеками я пока не разбирался. В регистры пишу пока все руками, чтобы нормально его освоить.

Скриншот скрипта:

Изображение

Во вложении лежит готовый исходник. (Ядро 168MHz, шины и периферия тоже на максимальных частотах)
Вложения
system_stm32f4xx.c
Исходник (периферия на максимуме)
(22.33 КБ) 1136 скачиваний
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

jordan писал(а):
C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт.
линкер в любом случае нужен, линкер есть... а что у вас за версия Iar?
внимательнее. речь не о линкере, а о линкер-скрипте.
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Все верно, линейка F4xx появилась с версии IAR 6.30.
Остальное уже расписали.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

внимательнее. речь не о линкере, а о линкер-скрипте.
Тогда я извиняюсь, но я не совсем понимаю что за линкер-скрипт?

DX168B спасибо! с генерированным вами файлом контроллер запустился на 168Mhz! правда exel-прога не работает что то наверно офис старый, ща разбираюсь...
Последний раз редактировалось jordan Вс авг 19, 2012 16:38:27, всего редактировалось 1 раз.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Макросы разрешить нужно, тогда заработает (сервис -> макрос -> безопасность -> низкая (или средняя)).
Последний раз редактировалось SubDia Вс авг 19, 2012 16:38:49, всего редактировалось 1 раз.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

jordan писал(а):
внимательнее. речь не о линкере, а о линкер-скрипте.
Тогда я извиняюсь, но я не совсем понимаю что за линкер-скрипт?
Конфиг для линкера, в какие области памяти какие сегменты поместить.
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Добавлю про сегменты:
Открываем даташит и смотрим на карту памяти\регистров. Там расписаны адреса начала Flash памяти и концовка. Так же там есть тоже самое для ОЗУ (оперативки)
В настройках проекта, в разделе Linker, на вкладке Config ставим галочку Override default.
Далее, указываем путь к нашему будущему линкер-скрипту: $PROJ_DIR$\stm32f4xx_flash.icf
После этого, жмем кнопку Edit и указываем значения адресов памяти:

На первой вкладке Vector table
.intvec start выставляем 0x08000000

На второй вкладке Memory Regions
ROM Start: 0x08000000 ; End: 0x080FFFFF
RAM Start: 0x20000000 ; End: 0x2001FFFF

На третьей вкладке Stack\Heap Sizes
CSTACK: 0x400 ; HEAP: 0x200 //Тут значения размеров стека и кучи. Выбираете сами, в зависимости от поставленной задачи.

После этого, жмете Save и сохраняете файл в папке с проектом.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

DX168B это у меня настроено, но все равно спасибо за то что откликнулись и не пожалели времени и помогли!
И всем кто откликнулся тоже огромное спасибо, пока что все ОК, поставил IAR 6.30 там камушек этот есть, после выбора
этого камушка появился и загрузчик напрямую из iar, и дебагер с регистрами... пока есть с чем рарзбираться :shock:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

В IAR 6,30 была у меня грабля с прерываниями.
Дело в том, что в моей копии среды есть только шаблон C++
Там обработчики надо заносить в extern...
Пример обработчика прерывания таймера 2 и 3:

Код: Выделить всё

//////////////////////////////////////////////////////////////////////////////
extern "C"
{
  void TIM2_IRQHandler(void) //Обработчик прерывания TIM2
  {
    buff++;
      USART_Send(&buff, 1);
    i += 1u;
    TIM2->SR = 0;
  }
  //--------------------------------------------------------------------------
  void TIM3_IRQHandler(void) //Обработчик прерывания TIM3
  {
    asm("nop");
    TIM3->SR = 0;
  }
};
 
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Чт апр 01, 2010 14:14:55

Сообщение jordan »

Здравствуйте опытные коты, после некоторой паузы продолжается изучение stm32f4discovery...

Пользуюсь iar 6.30 for arm... Вопрос следующий, можно ли посмотреть в дебагере или еще где нибудь сколько тактов используется на ту или иную функцию???

В avr-studio в дебагере была удобная строка в которой бежали такты... Нет ли здесь чего то подобного???
Ответить

Вернуться в «ARM»