stm32: настраиваем IAR и мигаем светодиодом.

Опубликовано в рубрике "ARM", 28 февраля, 2011.
Тэги: , , , автор:

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

stm32

Само видео:

 

 

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

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

 

Шоуноты:

Ссылка на библиотеку с CMSIS от stm




Комментарии
  1. Sharix написал(а) 28 февраля, 2011 в 11:39

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

  2. BSVi написал(а) 28 февраля, 2011 в 13:16

    Да не Даша, а Таша!

  3. Sharix написал(а) 28 февраля, 2011 в 20:58

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

  4. Lifelover написал(а) 28 февраля, 2011 в 14:38

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

  5. BSVi написал(а) 28 февраля, 2011 в 19:39

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

    https://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/CD00283778.pdf

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

  6. Crafter76 написал(а) 28 февраля, 2011 в 19:13

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

  7. BSVi написал(а) 28 февраля, 2011 в 19:17

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

  8. Alexokrat написал(а) 28 февраля, 2011 в 21:54

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

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

  9. BSVi написал(а) 28 февраля, 2011 в 22:05

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

  10. Alexokrat написал(а) 28 февраля, 2011 в 22:18

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

  11. BSVi написал(а) 28 февраля, 2011 в 22:27

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

  12. DVF написал(а) 28 февраля, 2011 в 23:07

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

  13. BSVi написал(а) 1 марта, 2011 в 7:42

    ээхх ((

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

  14. Aneg написал(а) 1 марта, 2011 в 14:29

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

  15. BSVi написал(а) 1 марта, 2011 в 18:34

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

  16. tomatniy написал(а) 1 марта, 2011 в 19:16

    https://imrad.com.ua/search.shtml?qs=lpc176&query=any

  17. BSVi написал(а) 1 марта, 2011 в 19:27

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

  18. Sienna_Stellar написал(а) 3 марта, 2011 в 22:49

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

  19. BSVi написал(а) 3 марта, 2011 в 23:20

    ))))

  20. Alexokrat написал(а) 5 марта, 2011 в 12:12

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

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

  21. BSVi написал(а) 5 марта, 2011 в 12:52

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

  22. d_romka написал(а) 5 марта, 2011 в 13:28

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

  23. BSVi написал(а) 5 марта, 2011 в 15:44

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

  24. d_romka написал(а) 5 марта, 2011 в 15:56

    ааа))) ясн)

  25. konsvik написал(а) 9 марта, 2011 в 12:12

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

  26. h0kum написал(а) 9 марта, 2011 в 18:56

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

  27. BSVi написал(а) 9 марта, 2011 в 19:00

    Дык, всем не угодишь.

  28. h0kum написал(а) 9 марта, 2011 в 19:04

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

  29. Marek написал(а) 8 апреля, 2011 в 19:48

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

  30. BSVi написал(а) 10 апреля, 2011 в 9:31

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

  31. Marek написал(а) 10 апреля, 2011 в 12:58

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

  32. BSVi написал(а) 10 апреля, 2011 в 19:21

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

  33. Crafter76 написал(а) 9 апреля, 2011 в 22:50

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

  34. BSVi написал(а) 10 апреля, 2011 в 9:19

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

  35. Crafter76 написал(а) 10 апреля, 2011 в 10:09

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

  36. Crafter76 написал(а) 10 апреля, 2011 в 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
    Помогайте… Я горю…

  37. BSVi написал(а) 10 апреля, 2011 в 20:43

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

  38. LeftRadio написал(а) 2 июля, 2011 в 15:34

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

  39. Vlad написал(а) 29 октября, 2011 в 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 раза. Аж странно, похоже пыль в разем попала. Промывка ацетоном была бы эффективнее, но его нет.

  40. dmitriycor написал(а) 23 апреля, 2011 в 16:36

    BSVi расскажи пожалуйста если можешь и нетрудно про USART и DMA и как это все заставить работать вместе. А у меня кстати плата EMBEST EM-STM32С с сенсорным экранчиком:). https://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 нервно курит:)

  41. BSVi написал(а) 26 апреля, 2011 в 7:56

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

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

  42. uschema.com написал(а) 18 июля, 2011 в 0:36

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

  43. Alhen написал(а) 19 июля, 2011 в 13:39

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

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

    и т.д.

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

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

  44. Alhen написал(а) 19 июля, 2011 в 19:03

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

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

  45. BSVi написал(а) 20 июля, 2011 в 8:11

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

  46. e-not написал(а) 2 августа, 2011 в 5:15

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

  47. RocketRumble написал(а) 6 августа, 2011 в 8:57

    https://supp.iar.com/Support/?note=75890

  48. RocketRumble написал(а) 31 июля, 2011 в 8:34

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

  49. Gothic написал(а) 2 августа, 2011 в 20:22

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

  50. dmitriycor написал(а) 14 августа, 2011 в 12:09

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

  51. Const_D написал(а) 25 сентября, 2011 в 11:42

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

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

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

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

  52. BSVi написал(а) 3 октября, 2011 в 19:27

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

  53. imrad написал(а) 23 января, 2012 в 13:34

    Терпеть не могу, когда проблему обсуждают, потом сами ответ находят и не выкладывают.
    Рассказываю про свою борьбу:
    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 и ставим драйвер.
    Наслаждайтесь)

  54. imrad написал(а) 23 января, 2012 в 13:36

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

  55. BSVi написал(а) 23 января, 2012 в 13:38

    Ого, сам имрад 🙂

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

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

  56. TOROS написал(а) 24 января, 2012 в 18:50

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

  57. __Egor__ написал(а) 5 февраля, 2012 в 17:25

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

  58. dm написал(а) 20 февраля, 2012 в 9:35

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

  59. info_ua написал(а) 12 марта, 2012 в 19:42

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

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

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

  60. satory2600 написал(а) 7 августа, 2012 в 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 */

  61. info_ua написал(а) 7 августа, 2012 в 11:08

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

    // Ваш код
    }

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

  62. satory2600 написал(а) 7 августа, 2012 в 11:53

    В описании на функцию 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?

  63. BSVi написал(а) 12 августа, 2012 в 12:07

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

  64. j3qq4hch написал(а) 13 января, 2013 в 20:38

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

  65. j3qq4hch написал(а) 13 января, 2013 в 20:51

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

  66. info_ua написал(а) 14 апреля, 2013 в 13:44

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

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


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