Меню

настройка iar для stm32

Настройка iar для stm32

Среда IAR Workbench проприетарна и требует лицензирования (в случае если ваш код превышает 32 КБ), однако её вполне хватает для домашнего использования.

IAR Workbench – непосредственно среда разработки, в состав которой входит компилятор. После установки IAR потребуется зарегистрировать его, заполнив анкету на сайте компании. Укажите реальный почтовый ящик, на него вам вышлют лицензионный ключ.

С сайта ST Microelectronics нужно будет скачать архив STM32F10x standard peripherals library – в нём содержатся:

  • CMSIS (Cortex Microcontroller Software Interface Standard) – библиотека, определяющая работу ядра, того самого Cortex M3 (о ней мы поговорим позже);
  • SPL (Standart Peripheral Library) – стандартная периферийная библиотека, которая сэкономит вам много сил в конфигурации той или иной периферии;
  • Examples – если нужно изучить, как работает новая для вас периферия, то в этой папке лежит множество примеров на все случаи жизни.

Запустив IAR, создайте рабочее пространство FileNewWorkspace. Далее новый проект, меню ProjectCreate New Project…

Программу можно писать на ассемблере, Си или С++. Мы будем использовать язык программирования Си.

Созданный проект необходимо настроить, для этого открываем меню ProjectOptions. Во вкладке General Options выбираем целевой микроконтроллер – STM32F100x4.

Кроме того, в Library Configuration ставим галочку Use CMSIS. Среда IAR уже включает в себя эту библиотеку, и добавлять её к проекту необязательно, однако новые версии могут выдавать предупреждение вида:

Проблема решается заменой некоторых строк во встроенной библиотеке CMSIS: в местах упоминания CODE:REORDER добавьте NOROOT(1) . Например:

Далее добавляем путь, по которому будут храниться файлы *.c и *.h – для этого заходим во вкладку C/C++ Compiler ⇒ Preprocessor и добавляем &PROJDIR& (переменная, содержащий путь к папке с проектом).

В разделе Debugger выбираем в качестве отладчика ST-LINK. Ставим галочки Use flash loader и Verify во вкладке Download.

Во вкладке ST-Link выбираем SWD. Среда готова к использованию.

источник

Программирование STM32. Часть 2: IAR + CMSIS

Это вторая часть цикла статей про микроконтроллеры STM32F1xxx, начало тут. Здесь мы поговорим о библиотеке CMSIS, зачем она нужна, где взять и как ее подключить к своему проекту. Все стати цикла будут находиться здесь: http://dimoon.ru/category/obuchalka/stm32f1

Введение

Cortex Microcontroller Software Interface Standard (CMSIS) содержит описание всех регистров микроконтроллера, таблицу векторов прерываний и некоторый стартовый код, который выполняется перед передачей управления функции main(). Вообще говоря, СMSIS является необязательным компонентом проекта, однако, в этом случае придется самому заботиться об огромном количестве вещей. Кроме того, эта библиотека позволяет писать в некоторой степени переносимый код с одного микроконтроллера, на другой.

Качаем CMSIS

В данный момент CMSIS поставляется совместно с STM32Cube MCU Package. Скачать его можно на странице выбранного микроконтроллера (там, где качали даташит, Reference manual и так далее), называется STM32CubeF1:

Для скачивания нужно зарегистрироваться у них на сайте. Феее, ну и нафига они это сделали?:\ Оставлю ка я ссылку на архив в конце статьи, чтоб не возится во всеми этими регистрациями. Но все же лучше скачать актуальную версию библиотеки на официальном сайте. Весит архив к стати довольно много, 97 метров.

Создаем проект в IAR ARM

Теперь проводим небольшую подготовительную работу по созданию проекта в IAR ARM. Запускаем среду IAR Embedded Workbench:

В IAR-e все проекты (Projects) находятся внутри Workspace-а, причем количество проектов в одном воркспейсе может быть несколько.

Выбираем Project->Create New Project…

В открывшемся окне выбираем тип проекта: C->main:

Нажимаем ОК, набираем какое-нибудь имя (в моем случае test_proj) и сохраняем в какой-нибудь папке:

Проект создан. После этого выбираем File->Save All и в открывшемся окне набираем имя нашего Workspace-а, его можно назвать так же, как и проект.

Теперь нам надо настроить проект под конкретный микроконтроллер, а именно STM32F103C8. Нажимаем правой кнопкой мыши на названии нашего проекта и выбираем пункт Options…

В разделе General Options на вкладке Target выбираем наш микроконтроллер:

Далее настаиваем уровень оптимизации компиляции. При отладке иногда натыкался на некоторые проблемы при высоком уровне оптимизации, поэтому советую в C/C++ Compiler на вкладке Optimizations ставить None или на крайняк Low:

Складывать все файлы исходников в корень проекта не очень хорошая идея, в дальнейшем будет трудно ориентироваться среди кучи файлов, поэтому для CMSIS создадим одноименную папку CMSIS . Но нам необходимо указать компилятору путь, где искать исходники. Для этого на вкладке Preprocessor надо указать путь к папке с библиотекой. Чтоб не указывать абсолютные пути, в IAR-е существует переменная $PROJ_DIR$, в которой хранится путь к папке с проектом:

источник

Настройка iar для stm32

Оказывается, настройка IAR’а для stm32 – не совсем простое дело. В этом посте, мы с Ташкой покажем вам, как это делается и, под конец, помигаем светодиодом.

Само видео:

Внимание! В Lifelover подсказал, что, в настройках линкера от верхних границ памяти нужно отнимать 1, те, верхняя граница флэша должна быть 0x0801ffff а не 0x08020000. Готовый проект в шоунотах исправлен.

Читайте также:  настройка gps навигация андроид

Апдейт: Проект еще раз исправлен. Ребята из IAR’а назвали функции из intrinsics.h теми-же именами, что используются в CMSIS, поэтому CMSIS конфликтует с иаром новых версий. Решение довольно тупое – закомментировать конфликтующие функции в файлах CMSIS’а и использовать функции от иара. Новый проект:

Шоуноты:

Даша МОЛОДЕЦ. Даёшь дорогу женскому эмбедду. )))))))

BSVi Reply:
28 февраля, 2011 at 13:16

Sharix Reply:
28 февраля, 2011 at 20:58

Блин, прошу прощения. Просто Таша оч редкое имя, я выбрал то что распостранённей)))). Исправь пожалуйста))))

Конец = начало + размер — 1. Программисты.))

BSVi Reply:
28 февраля, 2011 at 19:39

Блин, а ты прав! Несмотря на аппноут от СТМ:

Там такие-же цифры, как и у меня. Но я только что попробовал в реальности. При записи в адрес 0x20002000 вылетает HardFaultException. Сейчас исправлю статью.

Таша, тут trouble… Надписи невидно, можно хоть как-то прокомментировать то, что пишется методом copy-paste?

BSVi Reply:
28 февраля, 2011 at 19:17

Crafter76, никакого trouble. Переключи качество в 720p.

Опана , можно холливар разводить из серии «Девушка vs электроника» .) Я сначала подумал что она и вправду программист. Но очень скоро разочаровался … Переломным моментом стала фраза «У нас получается вот столько» (да да тот момент с калькулятором) Выходит сказать сто тридцать одна тысяча семьдесят два проблема. Ну а потом понятно что всё по листочку заранее написанным Автором блога.

Ну а вошьем девчонка молодец !) Мне кажется её милый голос очень в тему с архитектурой STM32))

BSVi Reply:
28 февраля, 2011 at 22:05

Между прочим, в первой версии (которую озвучивал я) я так и сказал «вот столько». Смысл читать число с тучей знаков?

Alexokrat Reply:
28 февраля, 2011 at 22:18

Ну как бы странно чуток. Или меня лицей избаловал?

BSVi Reply:
28 февраля, 2011 at 22:27

Вот ты посчитал на калькуляторе число, к примеру, 152/63. Ты будешь читать полученный результат с точностью до 8-ого знака, или просто скажешь — вот это, и покажешь калькулятор?

BSVi , тебя мы более слышать не хотим )
Что-то все разом подсели на STM. Хоть бы кто-то рискнул написать тоже самое для LPC17xx.

BSVi Reply:
1 марта, 2011 at 7:42

для LPC я бы с удовольствием написал, он мне нравится в 1000 раз больше, но его хер купишь у нас в киеве в розницу (

Aneg Reply:
1 марта, 2011 at 14:29

Купил себе LPC1343FBD48 — 1 шт. вот здесь http://www.amel.com.ua всего за 26 грн., и это даже не смотря на то, что через ихний поиск ничего не находиться)))

BSVi Reply:
1 марта, 2011 at 18:34

Ухты, если это действительно так, то это — оччень круто! Жаль, только они не очень аффишируются. Да и имрад, как самый попсовый поставщик не возит (

tomatniy Reply:
1 марта, 2011 at 19:16

BSVi Reply:
1 марта, 2011 at 19:27

Ну и нафига мне в моих поделках самый жирный кортекс? вот LPC1343 — был бы в самый раз для большинста поделок.

«Криворукие индусы» из уст девушки звучало отпадно.=)

BSVi Reply:
3 марта, 2011 at 23:20

Э , у тебя Иар какого релиза? 0_О .

Раньше для STM32 я юзал STM32 ST-Link Utility и Sourcery G++ Lite . И даже не догадывался о том что с Иар можно работать с ARM :/

BSVi Reply:
5 марта, 2011 at 12:52

Как это не догадывался ? Иарт тем и славен, что работает со всем подряд. У меня иар 6.1.0 for ARM

эээ…это я такой тупой, или в чем тут дело…не пойму зачем вычислять верхнюю границу флэша (0x0801ffff)…она же прям в даташите и написана…ну прям на ролике видно…. ))

BSVi Reply:
5 марта, 2011 at 15:44

Она написана для всего семейства. Для конкретного контроллера нужно вычислять.

d_romka Reply:
5 марта, 2011 at 15:56

Спасибо Сергей! Так держать! Очень нужны подобные видеоуроки для начинающих АРМоводов. Очень хотелось бы продолжения рубрики по STM32. Думаю Ваши материалы послужат хорошим толчком для всех тех кто имеет желание, но не знает с чего начать.
Успехов в этом малость неблагодарном но очень нужном деле!

если бы еще в картинках всё это было.
не могу с видео информацию воспринемать

BSVi Reply:
9 марта, 2011 at 19:00

h0kum Reply:
9 марта, 2011 at 19:04

да понятно. Радует, что хоть такое есть! Спасибо! 🙂

А какой смысл делать в задержке volatile? Понимаю еще в прерываниях, где действительно компилятор может удружить и «оптимизировать», а тут…

BSVi Reply:
10 апреля, 2011 at 9:31

А тут компилятор может выбросить весь for, потому, что внутри ничего не происходит.

Marek Reply:
10 апреля, 2011 at 12:58

Это Вы сами так посчитали или у ИАРа это где-то описано? Если второе то спасибо за информацию и я не зря выбрал Кеил, если первое — рекомендую книги по теории компиляторов.

BSVi Reply:
10 апреля, 2011 at 19:21

Сам так посчитал. У иара это нигде не написано.

Читайте также:  wow fish bot настройка

В IAR пишет, что проблема с FlashSTM32F100xB.flash… Как поправить, чтобы загрузилось?

BSVi Reply:
10 апреля, 2011 at 9:19

У меня все работает (в видео это видно), поэтому ниего сказать не могу. Проверь, что путь у этому файлу указан точно.

Crafter76 Reply:
10 апреля, 2011 at 10:09

Сначала думал, что косячу в проекте… Увы, даже родной не пашет…
Потом думал косяк с платой… Попробывал загрузить stm8l discovery — та же проблема: st-link не отвечает…
Походу провод где-то сдох… Вроде питание есть, а какой-то из D-, либо D+ пробит: St-link ответил, а загрузить не смог…

Crafter76 Reply:
10 апреля, 2011 at 20:30

Неа… Все равно не помогает…
Пишет

Sun Apr 10 21:28:39 2011: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 5.5\arm\config\flashloader\ST\FlashSTM32F10xxx.mac

Sun Apr 10 21:28:39 2011: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 5.5\arm\config\flashloader\ST\FlashSTM32F100xB.out

Sun Apr 10 21:28:39 2011: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 5.5\arm\config\flashloader\ST\FlashSTM32F100xB.flash
Помогайте… Я горю…

BSVi Reply:
10 апреля, 2011 at 20:43

А повопробуй-ка поставить последний иар. У меня с 5.5 что-то похожее было.

LeftRadio Reply:
2 июля, 2011 at 15:34

У меня такое было когда STLink не отвечал, проверте если в STLinkUtility все норм тогда проблема с ИАР, но я думаю что не норм, проверяйте кабель/плату. Мне помогла промывка ацетоном STM32VLDiscovery 🙂

Vlad Reply:
29 октября, 2011 at 14:42

Столкнулся с такой-же проблемой, плясал с бубном около часа, пока не прочитал комментарии.
При попытке прошивки из IAR 6.21.1 у меня писало:
Failed to load flash loader: D:\IarProjects\Touch_sensing\FlashSTM32L15xxxRAM16K.out
Failed to load flash loader: D:\IarProjects\Touch_sensing\FlashSTM32L15xxB.flash
Хотя светодиод питания на плате светился.

Мне помогло передергивание кабеля 3 раза. Аж странно, похоже пыль в разем попала. Промывка ацетоном была бы эффективнее, но его нет.

BSVi расскажи пожалуйста если можешь и нетрудно про USART и DMA и как это все заставить работать вместе. А у меня кстати плата EMBEST EM-STM32С с сенсорным экранчиком:). http://canada.newark.com/embest/em-stm32c/development-tool/dp/64R5913. Вообщем задумка такая: есть видеомодуль, с него идет все по трех проводному RS-485 (не спрашивай почему не Ethernet) через STM32F107VC попадает на радиомодуль и обратно, т.е. будет из одного предположим USART1 через DMA попадает на USART2 и тудаи сюда. Как тебе? Еще такой вопрос вот в 107 и 105 есть DR (дата регистр) в него сдвиговый регистр пишет и прием и передачу? т.е. он о дин DR а уже из него можно писать в память или в uC? И еще вопрос, не знаешь как среда Green Hills? Кстати Таша очень впечатляющая девушка;) DIHALT нервно курит:)

BSVi Reply:
26 апреля, 2011 at 7:56

>DR (дата регистр) в него сдвиговый регистр пишет и прием и передачу?
С уартом я не разбирался, но думаю, что нет. Если это и один регистр, то на чтение и запись он замаплен на разные адресса.

>не знаешь как среда Green Hills?
Не знаю.

BSVi , ролик просто улёт.
Классная идея ))

Под IAR 6.2 не проходит компиляция, выдает следующее:

Error[Pe337]: linkage specification is incompatible with previous «__WFI»……

Откатил IAR до версии 5.5, ошибки исчезли, все компилится, но грузиться не хочет,
пишет тоже что и у Crafter76 — Failed to load flash loader.

В тоже время под Atollic все работает нормально компилит, debug-ит.
Может ли кто-нибудь подсказать по данному вопросу, хотелось бы работать под IAR?

Alhen Reply:
19 июля, 2011 at 19:03

Вроде как ошибка с flash loader это известный баг версии 5.5 и лечится патчем
http://dl.dropbox.com/u/13417678/patch.rar

но все таки вопрос почему IAR 6.2 отказывается компилить простую программу мигалки? Есть ли у кого какие мысли?

BSVi Reply:
20 июля, 2011 at 8:11

Судя по linkage specification is incompatible with previous «__WFI» ты выбрал неправильный процессор. Посмотри видушник еще раз и сделай все по шагам один в один.

e-not Reply:
2 августа, 2011 at 5:15

на IAR 6.2 такая же беда даже c готовым (вашим) проектом.
При этом в 6.1 всё работает. Надо бы сравнить что там (в IAR) нового понаделали…

RocketRumble Reply:
6 августа, 2011 at 8:57

Спасибо!
Когда следующий выпуск? Он, конечно, о прерываниях?

Ташка и Серега, спасибо большое за ролик! Очень помог
при написании первой программы для моей платы на основе
STM32F107.
IAR 6.2 немного поругался на ошибки, в связи с тем, что
некоторые функции из CMSIS теперь обьявленны в библиотеках
самого IAR’а. Немного подправил CMSIS и все заработало.

Ролик все еще играет хотя прошло уже уйма времени:). Кто пишет с библиотеками ,скажите плиз, как понять тот факт что если при частоте SYSCLK 72 МГц на ADC1 c помощью функции RCC_ADCCLKConfig() можно задавать прескалер, но если убрать эту функцию ничего не меняется т.е шарашет 72 МГц O_o на ADC1 хотя разрешено 14 max?:)

Вопрос по теме:
GPIOC->BSRR = GPIO_BSRR_BS8; — выход в 1

в чём принципиальная разница между следующими строками?

Читайте также:  защита настроек паролем ios

GPIOC->BRR = GPIO_BRR_BR8; — выход в 0

GPIOC->BSRR = GPIO_BSRR_BR8; — выход в 0

BSVi Reply:
3 октября, 2011 at 19:27

Да ни в чем, просто разные регистры. Иногда бывают случаи когда нужно одновременно и единички на ножки записать и нули, тогда BSRR предпочтительней. А для простого сброса — они равноценны.

Терпеть не могу, когда проблему обсуждают, потом сами ответ находят и не выкладывают.
Рассказываю про свою борьбу:
1. Проблемы с компиляцией.
Что-то типа «linkage specification is incompatible with previous «__WFI»» (не помню точно, потому что ошибку уже не бьет).
Мое решение: посмотрите на свою версию файла stm32f10x.h (в шапке). Вообще, если у Вас версия 6.2, там уже все библиотечки CMSIS есть, просто ИАР не помнит, куда он их кладет. Поэтому найдите их сами в установочной папке ИАРа и пропишите пути в препроцессоре.
2. Проблемы с прошивкой.
Било мне ошибку — не найден dll и
Failed to load flash loader: D:\IarProjects\Touch_sensing\FlashSTM32L15xxxRAM16K.out
Failed to load flash loader: D:\IarProjects\Touch_sensing\FlashSTM32L15xxB.flash
Опять же все безболезненно решается. Ищем в ИАРе папку с драйверами, а в ней ST-Link и ставим драйвер.
Наслаждайтесь)

imrad Reply:
23 января, 2012 at 13:36

Я имела в виду версию ИАРа 6.2. Версия файла у меня 3.1.2.

BSVi Reply:
23 января, 2012 at 13:38

По первому пунтку — я просто покоцал все объявления которые совпадают в иаре и в цмсисовской библиотеке. Это нужно, чтобы добавить библиотеку в проект и быстро ее открывать 🙂

Собственно, новый прожект уже лежит в статье.

У меня при открытии ранее работавших проектов выдает ошибку:
» Project contains unknown tool ‘RDIJTAGJET_ID’ »
Раньше всё работало нормально, версия 6.21, уже пере устанавливал.

Подскажите как определить семейство контроллера у меня плата STM32f207VGT6
Я просмотрел аналогичную библиотеку stm32f2xx.h
От туда ничего не подошло
Помогите пожалуйста

Спасибо за видео уроки! Все наглядно и понятно. Сейчас осваиваю ARM-ы и ваше наглядное пособие просто клад для быстрого старта. Жду с нетерпением следующего(надеюсь будет))).
Было бы здорово, если бы вы сделали обзор как работать с библиотеками(с исходным кодом и без него). Как подключать и что настраивать. Куда нужно смотреть чтобы понять как работают функции. Структуры хедеров…

1)Для IAR новых версий, если идет конфликт CMSIS — необходимо просто переименовать файл core_cm3.h (он будет пропущен) и в опциях проекта поставить галочку «Use CMSIS» (CMSIS будет использоваться встроенная в IAR).

2) В Вашем проекте не активировано тактирование от кварца. Работа идет от встроенного RC генератора на 8МГц. (Keil — это делает атоматом + там Wisard очень удобный для начинающих, на время разбирательств с регистрами).

В целом Маладец!
Ждем дальнейших видео-уроков. Главное жуйте поглубже ибо зачастую в сети только поверхностно рассказывают.

satory2600 Reply:
7 августа, 2012 at 9:49

Да, тоже заметил пару особенностей:

При настройке Release может выдавать ошибку Pe[1696]-не найден файл core_cm3.h
Для того, чтобы заработало в настройках проекта не забыть поставить галочку General Options->Library Conf->UseCMSIS & DSP Library

И еще: если хотите сменить в настройках частоту кварца по умолчанию , надо переопределить define в опциях проекта:
Options-> C++ -> Preprocessor Symbols -> Defined symbols:
HSE_VALUE=10000000 /* Например — 10 MHz */

info_ua Reply:
7 августа, 2012 at 11:08

И чтоб запустить работу от кварца, достаточно в начале программы прописать функцию SystemInit();
/*Пример*/
int main (void)
<
SystemInit();

Эта функция уже прописана в CMSIS в файле system_stm32f10x.c Она сама выставит нужные регистры так что при старте инициализирует кварц, если кварц вытащить во время работы, само перейдет на внутренний генератор (в три раза упадет производительность) подключить назад, снова запустит работу на кварце*3 с частотой ядра 24 мгц.

В описании на функцию SystemInit() написано:

This function is called at startup just after reset and
before branch to main program. This call is made inside
the «startup_stm32f10x_xx.s» file.

Т.е. сама функция SystemInit() вызывается ДО основной программы, поэтому какой смысл вставлять ее снова в main?

BSVi Reply:
12 августа, 2012 at 12:07

Да, она вызывается до cstartup.

Бесполезное видео. И проект к нему приложен бесполезный. Там же нет этого гребаного стартап-файла, без которого нет смысла дальше что-то делать

И если дальше к этому скелетному проекту прикручивать что-нибудь еще, например, ПРЕРЫВАНИЯ, то иар в них заходить не будет.

info_ua Reply:
14 апреля, 2013 at 13:44

Уважаемый. Данный сюжет показывает только первоначальное знакомство с данным микроконтроллером, на примере «hello world» только со светодиодом. Что говорит о простоте работы с регистрами и не так уж оно и невероятно сложно и не реально. А вот при углублении в его закрома сможете писать код на своё усмотрение и требуемые задачи.
Вам прям вот так и сразу нужно IOS показать, чтоб вы плюнули на это дело как на тяжело постижимое..

Создать новую ветку комментариев

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

источник