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

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

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

stm32

Само видео:

 

 

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

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

 

Шоуноты:

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ээхх ((

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

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

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

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

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

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

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

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

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

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

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

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

    ))))

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

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

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

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

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

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

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

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

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

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

    ааа))) ясн)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  36. Crafter76 написал(а) 10th Апрель, 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 написал(а) 10th Апрель, 2011 в 20:43

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

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

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

  39. Vlad написал(а) 29th Октябрь, 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 написал(а) 23rd Апрель, 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 написал(а) 26th Апрель, 2011 в 7:56

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

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

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

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

  43. Alhen написал(а) 19th Июль, 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 написал(а) 19th Июль, 2011 в 19:03

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  53. imrad написал(а) 23rd Январь, 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 написал(а) 23rd Январь, 2012 в 13:36

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  60. satory2600 написал(а) 7th Август, 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 написал(а) 7th Август, 2012 в 11:08

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

    // Ваш код
    }

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

  62. satory2600 написал(а) 7th Август, 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 написал(а) 12th Август, 2012 в 12:07

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.