| Форум РадиоКот https://radiokot.ru/forum/ |
|
| stm32f4 Discovery инициализация https://radiokot.ru/forum/viewtopic.php?f=59&t=76924 |
Страница 1 из 1 |
| Автор: | jordan [ Вс авг 19, 2012 11:06:23 ] |
| Заголовок сообщения: | stm32f4 Discovery инициализация |
Здравствуйте коты, предисловие такое, игрался с 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 работает отлично, контроллер определяет правильно,пишет,стрирает... |
|
| Автор: | ChipKiller [ Вс авг 19, 2012 13:19:23 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
jordan писал(а): 1 ...Может ли это повлечь какие то проблемы при работе с stm32f407 ? ... если нет какой либо специфики ( например различия в векторах прерывания ...), то все будет работать нормально ИМХО ... ( конечно про полноценную симуляцию и отладку можно забыть 2. Запустить на 168Mhz можно и "ручками" - тем более если datasheet под рукой 3. Использую Keil - F4 там есть .... |
|
| Автор: | Satyr [ Вс авг 19, 2012 14:19:55 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
У меня ИАР древний, но и в нем есть ST STM32F4xxx C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт. И при отладке не удобно - нет для дебагера файла с описанием регистров переферии - просмотр регистров кроме ядра будет пустой. |
|
| Автор: | jordan [ Вс авг 19, 2012 15:16:43 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
Цитата: Запустить на 168Mhz можно и "ручками" - тем более если datasheet под рукой - то что можно ручками по даташиту это понятно, я попросил пример настройки библиотечными функциями если у кого есть такая возможность... Цитата: У меня ИАР древний, но и в нем есть ST STM32F4xxx C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт. линкер в любом случае нужен, линкер есть... а что у вас за версия Iar? кто настраивал на 168Mhz, как решали задачу? |
|
| Автор: | DX168B [ Вс авг 19, 2012 15:34:13 ] | ||
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация | ||
У меня 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, шины и периферия тоже на максимальных частотах)
|
|||
| Автор: | Satyr [ Вс авг 19, 2012 16:06:44 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
jordan писал(а): Цитата: C Generic C-M4 все будет работать, но надо будет написать свой линкер скрипт. линкер в любом случае нужен, линкер есть... а что у вас за версия Iar? внимательнее. речь не о линкере, а о линкер-скрипте. |
|
| Автор: | SubDia [ Вс авг 19, 2012 16:19:34 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
Все верно, линейка F4xx появилась с версии IAR 6.30. Остальное уже расписали. |
|
| Автор: | jordan [ Вс авг 19, 2012 16:34:27 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
Цитата: внимательнее. речь не о линкере, а о линкер-скрипте. Тогда я извиняюсь, но я не совсем понимаю что за линкер-скрипт? DX168B спасибо! с генерированным вами файлом контроллер запустился на 168Mhz! правда exel-прога не работает что то наверно офис старый, ща разбираюсь... |
|
| Автор: | SubDia [ Вс авг 19, 2012 16:37:23 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
Макросы разрешить нужно, тогда заработает (сервис -> макрос -> безопасность -> низкая (или средняя)). |
|
| Автор: | Satyr [ Вс авг 19, 2012 16:37:58 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
jordan писал(а): Цитата: внимательнее. речь не о линкере, а о линкер-скрипте. Тогда я извиняюсь, но я не совсем понимаю что за линкер-скрипт? Конфиг для линкера, в какие области памяти какие сегменты поместить. |
|
| Автор: | DX168B [ Вс авг 19, 2012 17:28:52 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
Добавлю про сегменты: Открываем даташит и смотрим на карту памяти\регистров. Там расписаны адреса начала 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 и сохраняете файл в папке с проектом. |
|
| Автор: | jordan [ Вс авг 19, 2012 18:54:41 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
DX168B это у меня настроено, но все равно спасибо за то что откликнулись и не пожалели времени и помогли! И всем кто откликнулся тоже огромное спасибо, пока что все ОК, поставил IAR 6.30 там камушек этот есть, после выбора этого камушка появился и загрузчик напрямую из iar, и дебагер с регистрами... пока есть с чем рарзбираться |
|
| Автор: | DX168B [ Вс авг 19, 2012 23:08:56 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
В 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; } }; |
|
| Автор: | jordan [ Вс янв 27, 2013 14:18:54 ] |
| Заголовок сообщения: | Re: stm32f4 Discovery инициализация |
Здравствуйте опытные коты, после некоторой паузы продолжается изучение stm32f4discovery... Пользуюсь iar 6.30 for arm... Вопрос следующий, можно ли посмотреть в дебагере или еще где нибудь сколько тактов используется на ту или иную функцию??? В avr-studio в дебагере была удобная строка в которой бежали такты... Нет ли здесь чего то подобного??? |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|



