STM32-VLDiscovery: мой вариант быстрого старта.

Внимание, статья обновлена. См. примечание в конце.

***

Предисловие.

Некоторое время назад, я, как и многие другие, принял участие в акции EBV, заказав себе упомянутую в названии платку. Моя первая попытка поковырять ее не увенчалась успехом, да и буквально одновременно с ней мне в руки попал LaunchPad… Одним словом, лежал STM32-Discovery буквально до сегодняшнего дня и пылился. Но в конце концов я взялся за него с твердым намерением наконец-то помигать светодиодом во что бы то ни стало. Естесственно, прежде всего я стал читать уже написанное на русском и английском. Однако, несмотря на большое количество статей, все они показались мне слишком разрозненными, а некоторые из более цельных — излишне объемными для начала. Возможно, я плохо искал, но так нигде и не нашел текста, прямо и без тучи лишней информации повествующего о том, как с нуля помигать светодиодом на STM32-Discovery. Полезные части встречались в разных местах, и вот я решил объединить их в по возможности лаконичное и законченное повествование.

Создание и настройка проекта.

Итак, что мы имеем: микроконтроллер STM32F100RB, установленный на плате с отладчиком; два светодиода, подключенных к PC8 (синий) и PC9 (зеленый). В качестве инструмента для написания кода я выбрал IAR.

Задача: помигать ими, попутно разобравшись, как настроить проект в IAR, что такое CMSIS и как в этих условиях организуется доступ к периферии.

Итак, наченем. Быстро и в картинках.
Запускаем IAR:

Создаем новый проект:

Просим IAR самостоятельно написать шаблон для main() и сохраняем:


И теперь начинается самое интересное – надо настроить опции проекта, чтобы у оного был шанс заработать. Если для AVR настройки проекта трогать почти не приходилось, для MSP430 дело ограничивалось небольшим вмешательством, то здесь все будет более глобально.

Первое, что нужно сделать – указать тип используемого контроллера. Как уже говорилось, в STM32-Discovery стоит STM32F100RB.


Далее надо поправить настройки линковщика. В них надо указать начало таблицы векторов прерываний, а также начало и конец областей памяти программы (ROM) и оперативной памяти (RAM). Рассчитываются они следующим образом: в STM32F100RB 128Kb памяти кода и 8Kb оперативной памяти. Начало у этих областей фиксировано на всей линейке – 0x08000000 (INTVEC) 0x08000000 (ROM) и 0x20000000 (RAM). Нам надо посчитать конечные адреса областей. Очевидно, что они получаются по следующей формуле:

[начало области] + ([размер области в килобайтах] * 1024) — 1.

Для STM32F100RB соответственно:

ROM: 0x08000000 + (0x80 * 0x400) — 1 = 0x0801FFFF
RAM: 0x20000000 + (0x8 * 0x400) — 1 = 0x20001FFF


Стек и кучу пока трогать не будем.

Действуем: ставим галку Override default, жмем Edit...

Вводим значения:


Жмем Save, сохраняем конфиг:

С линковщиком все. Теперь надо настроить отладчик, чтобы при попытке запуска программы IAR подключался к ST-LINK на плате Discovery.
Выбираем отладчиком ST-LINK:

Для корректной работы на следующей вкладке ставим галку Use flash loader:

И далее указываем режим SWD:

Все. Проект настроен, жмем OK. Теперь надо подключить CMSIS.
Что такое CMSIS, и вообще для чего она нужна? Каждый, кто уже писал под какой-нибудь МК, знает, что, прежде чем писать код, очень полезно подключить специальный заголовочный файл, в котором описаны имена регистров, модулей, констант и прочие обозначения, используемые в документации – без всего этого написание кода отдает мазохизмом. Естесственно, тут надо сделать то же самое. Только вместо одного файла надо добавить в проект шесть. Вот эти шесть файлов и есть CMSIS. Почему так много? Дело в том, что многие вещи, которые для, например, MSP430 компилятор генерирует сам – стартовый код, таблица прерываний, и т.п. здесь нужно писать руками. А этого делать, разумеется, неохота. Вот все это и входит в CMSIS.
Где добыть CMSIS? Для этого качаем STM32VLDISCOVERY firmware package – там все есть. Распаковываем, находим в stm32vldiscovery_package\Libraries папку CMSIS – это оно. Еще там есть папка STM32F10x_StdPeriph_Driver – этого добра нам не надо. В этой папке лежит т.н. стандартный драйвер периферии, представляющий собой набор функций для тех, кому лень читать даташит. Нас же, повторюсь, интересует исключительно CMSIS. Итак, нам нужны следующие файлы:

stm32vldiscovery_package\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c

stm32vldiscovery_package\Libraries\CMSIS\CM3\CoreSupport\core_cm3.h

tm32vldiscovery_package\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c

tm32vldiscovery_package\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h


— собственно, сама CMSIS

tm32vldiscovery_package\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h

— заголовочный файл с определениями констант, битовых масок и т.п.

stm32vldiscovery_package\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_md_vl.s

— код начальной инициализации микроконтроллера.

На будущее отмечу, что файл system_stm32f10x.c содержит функцию SystemInit(), которая вызывается до main() и проводит первичную настройку. Изначально там содержится код настройки системы тактирования. Пока необходимости что-либо менять там нет.

Все перечисленные файлы кидаем в директорию проекта и добавляем в него:



Эстеты могут разложить их все по красивым папочкам, это дела не меняет.

Теперь последний шаг – небольшое допиливание CMSIS напильником. В начале файла stm32f10x.h надо раскомментировать дефайн, соответствующий используемому контроллеру. Для нас это #define STM32F10X_MD_VL, ибо STM32F100RB отностися к Medium density Value Line devices. Но не только раскомментировать нужный дефайн, но и закомментировать ненужный — #define STM32F10X_XL !


Все! Теперь действительно можно писать код!

Первая программа.

Для начала я предлагаю написать простую программу, которая будет перемигиваться синим и зеленым светодиодами. Для этого из конфигурационных действий нам надо выполнить только одно – настроить порт.

Блоки периферии в STM32 имеют количество конфигурационных регистров, поражающее воображение человека, пришедшего с не настолько продвинутых платформ. Порты также не являют собой исключения, но в данный момент нам понадобятся только следующие регистры: GPIOC_CRH, (настройка на ввод-вывод, настройка скорости работы), GPIOC_ODR (собственно, сам выходной регистр порта) и RCC_APB2ENR. Вообще говоря, RCC_APB2ENR не относится к регистрам порта – это регистр системы тактирования. Но у периферии STM32 есть одна особенность – она не заработает (!), пока для нее не будет явно включено тактирование. В упомянутом же регистре расположен бит, отвечающий за порт C.

Несколько слов о доступе к регистрам, он организован несколько необычно. Блоки периферии здесь представлены в виде структур, полями которых как раз и являются регистры. Как по мне, решение чрезвычайно необычное, но, по крайней мере, не вызывающее особого дискомфорта, и, в каком-то смысле, даже логичное.
Итак, собственно программа (подробности относительно записываемых значений можно найти в даташите):

#include "stm32f10x.h"

void main(void)
{
  unsigned long d;
  
  //Enabling clock for GPIOC
  RCC->APB2ENR|=RCC_APB2ENR_IOPCEN;
  //Configuring GPIO8 and GPIO9 as push-pull output
  //refer to datasheet for details
  GPIOC->CRH&=~(GPIO_CRH_CNF8_0 | GPIO_CRH_CNF9_0);
  GPIOC->CRH|=(GPIO_CRH_MODE8_1 | GPIO_CRH_MODE9_1);
  
  while (1)
  { 
    //switching the LEDs
    if (GPIOC->ODR & GPIO_ODR_ODR8)
    {
      GPIOC->ODR&=~GPIO_ODR_ODR8;
      GPIOC->ODR|=GPIO_ODR_ODR9;
    }
    else
    {
      GPIOC->ODR|=GPIO_ODR_ODR8;
      GPIOC->ODR&=~GPIO_ODR_ODR9;
    }
    //simple delay
    for (d=0; d<1000000UL; ++d);
  }
}

Подключаем STM32-Discovery к USB. В IAR жмем Make, после окончания компиляции — Download and debug:

В режиме отладки запускаем исполнение программы, нажав Go:

Все. Светодиодики мигают, миссия выполнена.
Выход из режима отладки:

К сожалению, после выхода из отладки исполнение программы прекращается. Чтобы запустить ее вне отладки, надо передернуть USB.

Вот и все. Далее нужно просто читать Reference Manual.

Спасибо всем, дочитавшим до этого места. Надеюсь, моя статья сэкономит кому-нибудь пару вечеров.


Список использованных источников:

www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00277245.pdf
www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/CD00283778.pdf
www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00246267.pdf
www.compeljournal.ru/images/articles/2011_2_4.pdf
easyelectronics.ru/arm-uchebnyj-kurs-iar-ewarm-sozdanie-proekta.html
easyelectronics.ru/arm-uchebnyj-kurs-iar-ewarm-sozdanie-proekta-chast-2-cmsis-i-standard-peripherals-library.html


UPD:

Была обнаружена следующая проблема: в некоторых версиях IAR при старте отладки возникает ошибка — «Fatal Error: ST-Link Connection Error». При этом диалог настройки ST-Link в этой версии IAR выглядит следующим образом:



Решение (за него спасибо тов. SubDia с Радиокота): установить SWO Clock равным 32KHz.
  • +7
  • 30 апреля 2011, 22:46
  • _YS_

Комментарии (77)

RSS свернуть / развернуть
отлично
0
Кстати, то ли CMSIS, то ли драйверы, то ли и то, и другое обновилось с момента выхода Discovery. Взять можно на странице по STM32F100RB на сайте ST.
0
Может, что-то где-то и есть, но цель этой статьи — максимально лаконичное изложение базовых действий, необходимых для получения работающей в МК программы. Все обновления, пространные объяснения отличий SWD от JTAG и т.п. сюда не относятся. Это уже потом. Главное — понять принцип. А заменить одни файлы на другие несложно.
0
Что бы не передергивать USB шнурок, пропиши на горячие клавиши, прошивку и сброс мк:
ziblog.ru/2011/03/25/obnovlenie-stm32-st-link-utility/
0
  • avatar
  • ZiB
  • 01 мая 2011, 06:40
О, интересно.
0
Хорошая статья.
У меня правда после окончания отладки программа продолжает выполняться. Не помню уже что именно я колдовал. J-Link.
0
описано доходчиво, молодец. а что за акция EBV была?
0
Кто-нибудь использовал SWD в своих проектах для работы с МКами отличными от stm32f100b? все гладко?
0
LPCXpresso SWD использует. все шикарно отлаживается.
0
Господа, просветите дурака: почему при работе по SWD все шикарно дебажится. Стоит оторвать SWD и перестартовать — программа не стартует. В чем суть? Машина stm32f100c8.
0
У меня та же фигня. Прошу помощи.
0
Попробуйте добавить дефайн «STM32F10X_MD_VL» (в c/c++ compiler -> preprocessor), если его нет.
А вот потом появилась очень интересная ситуация с АЦП, когда по SWD все работает, а в свободном полете возвращает 0 и хоть ты тресни. Это в случае разовой конвертации по запросу.
0
0
Насчет этого согласен! Но в моем случае дело было не в этом
0
Статью утащила к себе в дизайн-идеи Терраэлектроника. Хоть ссылку поставили, но могли бы и автора указать.
0
  • avatar
  • ACE
  • 09 августа 2011, 01:33
Вау! А можно линк?
0
Нашел, и правда! Пипец, вот уж не думал, что мои статьи начнут тырить. xDD Пойду к ним требовать гонорар. xDD
0
Превосходная статья, в Atollic все сразу заработало только пришлось поставить int main(void), спасибо, пишите обязательно еще.
0
  • avatar
  • basil
  • 23 августа 2011, 18:31
Напиши про атоллик. Я слышал, что это хоть и эклипс, но авторами в бесплатной версии совершенно безбожно кастрированный. Ну и скринов доставь, впечатлений и все такое.
0
Попробую, уже очти созрел )
0
Пишу, пишу. :-)
0
В смысле вообще пишу, а не про атоллик — я с ним не работаю. Предыдущий ответ — к посту тов. basil :-)
0
Респект автору за статью, очень пригодилось, темболее, что я пока-что в этом чайник :)
Теперь хочу расказать, как мне пришлось боротся, что бы это все-таки заработало…
Скачал IAR, версия 6.21.1.2846, сделал в точности, все как описано выше, т.к. чайник, просто скопипастил прогу… Лишбы попробывать :) Не работает. Выдало кучу ошибок вида:

Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" (declared at line 52 of «C:⁄Program Files⁄IAR Systems⁄Embedded Workbench 6.0 Kickstart⁄arm⁄inc⁄c⁄intrinsics.h»)

Первый же запрос в Гугл дал интересную ссылку. Беглый перевод показал — что начиная с версии 6.20 в IAR УЖЕ включены библиотеки CMSIS. Ну и возникает конфликт. Вылечилось так: «Options/General Options/Library Configuration» поставить галку «Use CMSIS» и удалить ранее добавленые в проект файлы «core_cm3.c» и «core_cm3.h», причем пришлось удалять физически и из папки проекта. Теперь все откомпилилось. Хух )
Дальше, видимо уже по незнанию: не захотел линковатся, писало типа «ниид ДЛЛ». По-видимому, пропетлял не установил драйвер… Установил что было в самом IAR в папке «IAR Systems\Embedded Workbench 6.0 Kickstart\arm\drivers\ST-Link\ST-Link_V2_USBdriver.exe». Потом запустил образовавшийся файл (у меня был тут: «Program Files\STMicroelectronics\st_toolset\stlink\ST-LinkUpgrade.exe») где предложили обновить фирмварэ… Сделал.
Теперь думаю все будет нормально, ХУХ. Нажал «Download and run» — весело замигали светодиоды, высветилось окошко Programming Flasm Memory… И так я просидел минут 15. БЛ@$Ь!!! Что опять нетак ???!!! Кароче, уже чисто интуитивно пришел к этому: во вкладке «Options/Debugger/Download» мало поставить галку Use flash Loader(s)!!! Надо поставить ещё следующую галку «Override ...» и ВЫБРАТЬ АДЕКВАТЫЙ загрузчик! По-умолчания зачем-то выбирает «FlashSTM32F10xxB.board». Не знаю, может так и надо, но замена этого файла на файл «FlashSTM32F100xB.board» все поставило на свои места. Все слинковалось, записалось и мигало… А я вытирал пот, матерился, и вообще был зол :( Такой гемморой на чайника свалился… Это уже слишком :)
0
Выдало кучу ошибок вида:

Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" (declared at line 52 of «C:⁄Program Files⁄IAR Systems⁄Embedded Workbench 6.0 Kickstart⁄arm⁄inc⁄c⁄intrinsics.h»)

А ведь на эту тему даже аппноут есть. :)
0
теперь-то я знаю, что есть…
0
При отладке нет отображения регистров DAC, TIM6, TIM7, но все они работают исправно. Контроллер, как и положено, выбран STM32F100хB. У меня у одного так?
0
йцук
0
сори! а как фото добавить? теперь по делу: сделал все как было сказано выше и так как посоветовал "_YS_"!, потому что у меня версия IAR — 6.21.1 (IAR Embedded Workbench for ARM 6.21.1), но все равно не компилит! выдает 9 ошибок!!!
Вот что написано в Messages:
Building configuration: deskover_1 — Debug
Updating build tree…
main.c
Fatal Error[Pe1696]: cannot open source file «stm32f10x.h» D:\DOCUMENTS\YHUBEP\диплом 2011\для IAR\discovery\main.c 1
searched: «D:\DOCUMENTS\YHUBEP\диплом 2011\для IAR\discovery\»
searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\CMSIS\Include\»
searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\»
searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\»
Error while running C/C++ Compiler
system_stm32f10x.c
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" (declared at line 52 of «C:\Program Files\IAR Systems\ D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1084
Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp void __set_PSP(unsigned long)" (declared at line 53 of «C:\Program Files\IAR Systems\ D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1094
Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_MSP(void)" (declared at line 50 of «C:\Program Files\IAR Systems\ D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1104
Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp void __set_MSP(unsigned long)" (declared at line 51 of «C:\Program Files\IAR Systems\ D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1114
Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __REV16(unsigned long)" (declared at line 173 of «C:\Program Files\IAR Systems\ D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1124
Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __RBIT(unsigned long)" (declared at line 174 of «C:\Program Files\IAR Systems\ D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1134
Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __STREXB(unsigned char, unsigned char *)" (declared at line 181 of «C:\Program D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1175
Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __STREXH(unsigned short, unsigned short *)" (declared at line 182 of «C:\Program D:\DOCUMENTS\YHUBEP\диплом 2011\для Discovery\core_cm3.h 1186
Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h»)
Error while running C/C++ Compiler
Total number of errors: 9
Total number of warnings: 0
Помогите пожалуйста! что делать?
0
А вы попробуйте переложить проэкт в папку БЕЗ РУССКИХ БУКВ в названии…
0
У мя IAR нормально лопал проекты в русской папке.
А ошибки характерные, связаны с тем, что в IAR 6.2+ CMSIS встроена. Нужно
1) В настройках проекта найти и поставить галочку Use CMSIS (она находится в Project Options -> General Options -> Library Configuration).
2) Выпилить все хедеры CMSIS из проекта, убрав путь к ним из Project Options -> C/C++ Compiler -> Preprocessor.

Подробно и с картинками (правда на английском) об этом написано в STM'овском документе TN0830.
0
спасибо! попробую!
0
кинул в корневик диска С, (т.к. исправление на английский не помогло) и осталась одна ошибка:
Changed settings forces a full rebuild…
Building configuration: deskover_1 — Debug
Updating build tree…
2 file(s) deleted.
Updating build tree…
main.c
Fatal Error[Pe1696]: cannot open source file «stm32f10x.h» C:\discovery\main.c 1
searched: «C:\discovery\»
searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\CMSIS\Include\»
searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\»
searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\»
Error while running C/C++ Compiler
Total number of errors: 1
Total number of warnings: 0

СПАСИБО за ПОМОЩЬ чайнику!
0
урааа! компилит без ошибок, а вот когда жму «Download and debug» выбивает такую ошибку:
1-я) Fatal error: ST-Link Connection error Session aborted! — ошибка соединения! получается не видит через USB?
2-я) Failed to load flash loader: C:\ тра-та-та\ST\FlashSTM32F100xB.flash — походу не может загрузить этот файл?
Спасибо за помощь!
0
1) Попробуй поставить SWO Clock в 32кГц, как рекомендуется в конце статьи. Алсо иногда ст-линк конфликтует с виртуальными приводами демон тулза.
2) Проверь наличие такого файла. Похожая бага была в 5.5, там решалось указанием другого файла (подробности — в теме про дискавери на казусе).
0
у меня и стоит 32КГц!
файл присутствует!
НЕ знаю что делать!
0
Tue Nov 01, 2011 17:45:05: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\FlashSTM32F10xxx.mac
Tue Nov 01, 2011 17:45:06: Fatal error: ST-Link Connection error Session aborted!
Tue Nov 01, 2011 17:45:06: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\FlashSTM32F10xxxRAM16K.out
Tue Nov 01, 2011 17:45:06: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\FlashSTM32F10xxB.flash
0
Могу только предложить плясать с бубном. И если стоит DAEMON Tools или Alcohol — попробуй временно отключить все его приводы или вообще деинсталлировать.
А, еще попробуй библиотеку STLinkUSBDriver.dll заменить на аналогичную из свежей версии ST-LINK Utility.
0
не помогло :( сейчас попробую иар версии 6.10 поставить!
0
Млин, Вы комментарии-то целиком прочитайте:

Тов. abigsam писал:

Нажал «Download and run» — весело замигали светодиоды, высветилось окошко Programming Flasm Memory… И так я просидел минут 15. БЛ@$Ь!!! Что опять нетак ???!!! Кароче, уже чисто интуитивно пришел к этому: во вкладке «Options/Debugger/Download» мало поставить галку Use flash Loader(s)!!! Надо поставить ещё следующую галку «Override ...» и ВЫБРАТЬ АДЕКВАТЫЙ загрузчик! По-умолчания зачем-то выбирает «FlashSTM32F10xxB.board». Не знаю, может так и надо, но замена этого файла на файл «FlashSTM32F100xB.board» все поставило на свои места.
0
Гы, а вот про этот комментарий я уже забыл. И он довольно неприметный. Почему бы не добавить в статью еще один UPD, насчет адекватного загрузчика?
0
Получил недавно эту платку и столкнулся со следующей проблемой — не могу зашить или даже стереть микроконтроллер. Иар пишет, что вроде как все прошло нормально. Но при попытке запустить отладку проекта выдает ошибку, что то типа «the debugging session could not be started».
Воспользовался STM32 ST-Link utility, стер с помощью неё контроллер.
В ИАР-е выставил верификацию после прошивке — тогда он стал писать, что верификация не прошла. Т.е. читать читает, а писать на может. В чем может быть дело?
0
IAR kickstart edition ставили? Драйвер правильный?
0
IAR kickstart edition ставили? Драйвер правильный? Настраивали все как описано?
0
Не kickstart а какой-то другой. Драйвер — тот, что был в нем. Не менял. Настраивал сам, сравнивал с тем, что написано — отличий не нашел. Проект пока безо всякой CMSIS, единственная функция main, зацикленная до бесконечности.
0
Попробуйте kickstart, он под эти платы заточен.
0
Хорошо, а какую версию посоветуете?
0
Ну, там особого выбора нет. :) Что IAR предлагает, то и качайте. Только учтите, что, начиная с версии 6.2, IAR включает CMSIS, это может привести к некоторым сюрпризам. Подробнее.
0
Понял. Спасибо. Я с этими сюрпризами уже столкнулся, спасибо за ссылку, прочитаю, как официально рекомендуют с ними справляться!
0
Поставил IAR 6.30.4 и заработало!
0
Ну вот и славно.
0
Все вы пишите
Только учтите, что, начиная с версии 6.2, IAR включает CMSIS, это может привести к некоторым сюрпризам.
Но как им пользоваться??? Посмотрел папку c:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\arm\CMSIS\Include\. Там нету хидера для stm32f10xxB. Облазил всю папку CMSIS ниче подобного не нашел??? Так в каком файле описаны все регистры если CMSIS уже включена??? Я раньше юзал stm8l и по аналогии нашел файл iostm32f10xxB.h в папке c:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\arm\inc\ST\. Здесь есть описания для регистров. Так скажите мне пожалуйста как использовать вот этот включенный CMSIS??? и что плохого будет если я буду пользоваться не CMSIS, а одним файлом iostm32f10xxB.h???
0
Спасибо! Надеюсь, сегодня сэкономиццо ещё пара человеко-вечеров.
0
  • avatar
  • _v_
  • 18 июля 2012, 21:00
Не за что. :) Кстати, я теперь переехал на новый, свой собственный, блог. Можете наведаться, если есть желание. :)
0
Скучно там у тебя. Комментарии напоминают картинку «в этой комнате собрались все, кого волнует твое мнение».
0
Мне сейчас на работах весело. На обеих. :D Вообще как-то сейчас жизнь завертелась, не то что писать, бывает, что поесть времени нет…
0
Добавлю ирфу, может кому поможет в борьбе с st-link
В общем, никакие танцы с бубном над опциями проекта не решали проблему с st-link.
Написал в тех. поддержку IAR, но там вежливо послали.
Нашел форум my.st.com
на котором предлагали скачать dll от usb драйвера st-link предыдущей версии.
Скачал, поменял dll — всё заработало.
dll лежит в
C:\Program Files\IAR Systems\Embedded Workbench 6.4 Kickstart\arm\bin\STLinkUSBDriver.dll
Операционка винда 7. Через несколько дней попробую на работе на XP.
dll скачивал отсюда
dll drivera ot st-link
0
  • avatar
  • vsev
  • 02 августа 2012, 00:56
Вот еще забавное видео в помощь в борьбе с st-link на youtube
0
Вроде эта та dll-ка, которая 65 кБ весит, насколько я помню. Регулярно сталкиваюсь с этой проблемой, и регулярно ее решаю таким способом. =)
0
Оригинальная (шла с iar 6.4) имеет размер 65536 байт.
Размер у той на которую заменил 389632 байта.

Бился с st-link дня 4, но что самое интересное, на компьютере, на котором стояла свежеустановлення сборка windows 7 все работало, а на ноутбуке с семеркой и на работе с XP ни в какую.
После замены на ноуте длл — st-link заработал.
Изначально драйвер для ST-link ставил из главной менюхи установки IAR после установки самой программы.
Версия программы
IAR Embedded Workbench for ARM 6.40.2.3992
IAR Embedded Workbench common components 6.4.4.2356

Сплошное шаманство.
0
Забавно. У меня все четко наоборот. St-Link обновлен до второй версии, все как положено. Но с «родной» 300-кБ dll не работает; как только меняю на 65-кБ, все становится на свои места. Причем проверено на трех машинах с различными XP и на одной 32-разрядной семерке.
Шаманство — согласен.
0
Спасибо за статью, с ее помощью «быстростартанул» на stm32f303 ))
0
Да не за что. :) Можете посмотреть мой новый блог, я теперь живу там. :) Может еще что-то интересное для себя найдете. :)
0
Коллеги, прошу помощи. Мозг взорван напрочь.
Не могу понять что хочет IAR (7.10.1)
Для проверки накидал простой код:
#include "stm32f10x.h"
int main()
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
  return 0;
}

Вылетает ошибка линкера Error[Li005]: no definition for «RCC_APB2PeriphClockCmd» [referenced from D:\Cortex\Progs\IAR\Testpro\Debug\Obj\main.o]

CMSIS и периферию подключил по гайдам, в stm32f10x.h камень нужный раскоментировал.
Подключение _GPIO.h вручную или includ'ами ничего не меняет.
В упор не пойму что хочет IAR от меня…
0
В гуглах пишут раскоментировать и\или добавить в настройки дефайн USE_STDPERIPH_DRIVER — он по умолчанию был раскоментирован, добавление в препроцессор ничего не меняет (логично)
0
Надо еще добавить файлы самого драйвера в проект. Качается с сайта ST. Впрочем, я не рекомендую это ардуинообразное поделие, по крайней мере, для начала.
0
Да, вы не подключили калечное поделие ST под названием Standard Peripheral Library (SPL). Для этого и правда надо добавить файлы драйвера в проект и раскомментировать дефайн, который вам уже подсказали.
0
Спасибо!
Тоска — печаль, я думал достаточно в препроцессоре указать путь к SPL\src и волшебство случится. Но пришлось явным образом подключать к проекту. Какой смысл тогда пути в препроцессоре указывать, если всеравно придется отдельно подключать в проект =\
0
Чтобы он знал, где инклюды искать. Стадии линковки и компиляции в С совершенно не связаны друг с другом и потому линкеру надо отдельно указывать, что именно надо линковать (это и делается включением.с-файлов в проект). Подробнее.
0
Вот оно как, спасибо большое.
0
Хорошая статья :) Моя проблема как раз живой пимер
0
Волшебства не бывает. :)
0
Таа… просто первым опытом был кокос, так он действительно волшебство в настройке, по сравнению с IAR :)
0
Если что-то кажется слишком простым, значит где-то есть подвох. :)
0
Возможно… но ввиду отсутствия опыта и\или довольно простых проектов я разницу маловероятно пока увижу… А в холиварах на тему что лучше — сложно откопать истину по тем же причинам.
0
Кокос просто делает все это за тебя (я так понимаю, ты включал библиотеку галочкой в визарде).
Впрочем, во всех языках новее С (кроме С++) используется более современный механизм — модульная компиляция. Там дествительно хватает команды «использовать %modulename% в исходнике и не требуются внешние костыли (вроде project manager'а или make) для сборки.
0
команды «использовать %modulename% в исходнике
*команды «использовать %modulename%» в исходнике
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.