Страница 1 из 1
stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 11:06:23
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 работает отлично, контроллер определяет правильно,пишет,стрирает...
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 13:19:23
ChipKiller
jordan писал(а):1 ...Может ли это повлечь какие то проблемы при работе с stm32f407 ?
... если нет какой либо специфики ( например различия в векторах прерывания ...), то все будет работать нормально ИМХО ... ( конечно про полноценную симуляцию и отладку можно забыть

)
2. Запустить на 168Mhz можно и "ручками" - тем более если datasheet под рукой
3. Использую Keil - F4 там есть ....
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 14:19:55
Satyr
У меня ИАР древний, но и в нем есть ST STM32F4xxx
C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт.
И при отладке не удобно - нет для дебагера файла с описанием регистров переферии - просмотр регистров кроме ядра будет пустой.
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 15:16:43
jordan
Запустить на 168Mhz можно и "ручками" - тем более если datasheet под рукой
- то что можно ручками по даташиту это понятно, я попросил пример настройки библиотечными функциями если у кого есть такая возможность...
У меня ИАР древний, но и в нем есть ST STM32F4xxx
C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт.
линкер в любом случае нужен, линкер есть... а что у вас за версия Iar?
кто настраивал на 168Mhz, как решали задачу?
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 15:34:13
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, шины и периферия тоже на максимальных частотах)
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 16:06:44
Satyr
jordan писал(а):
C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт.
линкер в любом случае нужен, линкер есть... а что у вас за версия Iar?
внимательнее. речь не о линкере, а о линкер-скрипте.
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 16:19:34
SubDia
Все верно, линейка F4xx появилась с версии IAR 6.30.
Остальное уже расписали.
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 16:34:27
jordan
внимательнее. речь не о линкере, а о линкер-скрипте.
Тогда я извиняюсь, но я не совсем понимаю что за линкер-скрипт?
DX168B спасибо! с генерированным вами файлом контроллер запустился на 168Mhz! правда exel-прога не работает что то наверно офис старый, ща разбираюсь...
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 16:37:23
SubDia
Макросы разрешить нужно, тогда заработает (сервис -> макрос -> безопасность -> низкая (или средняя)).
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 16:37:58
Satyr
jordan писал(а):внимательнее. речь не о линкере, а о линкер-скрипте.
Тогда я извиняюсь, но я не совсем понимаю что за линкер-скрипт?
Конфиг для линкера, в какие области памяти какие сегменты поместить.
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 17:28:52
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 и сохраняете файл в папке с проектом.
Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 18:54:41
jordan
DX168B это у меня настроено, но все равно спасибо за то что откликнулись и не пожалели времени и помогли!
И всем кто откликнулся тоже огромное спасибо, пока что все ОК, поставил IAR 6.30 там камушек этот есть, после выбора
этого камушка появился и загрузчик напрямую из iar, и дебагер с регистрами... пока есть с чем рарзбираться

Re: stm32f4 Discovery инициализация
Добавлено: Вс авг 19, 2012 23:08:56
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;
}
};
Re: stm32f4 Discovery инициализация
Добавлено: Вс янв 27, 2013 14:18:54
jordan
Здравствуйте опытные коты, после некоторой паузы продолжается изучение stm32f4discovery...
Пользуюсь iar 6.30 for arm... Вопрос следующий, можно ли посмотреть в дебагере или еще где нибудь сколько тактов используется на ту или иную функцию???
В avr-studio в дебагере была удобная строка в которой бежали такты... Нет ли здесь чего то подобного???