Дек 102011
 

Интегрированная среда IAR EWARM позволяет выполнить полный цикл разработки программы для микроконтроллеров ARM. Список поддерживаемых ей микроконтроллеров очень внушителен. Встроенный debugger дает возможность отладить программу для конкретного типа микроконтроллера в симуляторе или непосредственно в «железе» через интерфейсы JTAG или SWD.

В данной статье будет описана работа с отладочной платой STM32L-DISCOVERY от фирмы ST Microelectronics.

Плата имеет встроенный программатор-отладчик ST-LINK, с помощью которого прямо из среды IAR можно запрограммировать микроконтроллер (на плате установлен STM32L152RBT6), а затем вести отладку программы. К выводам этого микроконтроллера подключены светодиоды LD3 (зеленый) и LD4 (голубой). На стандартном примере управления светодиодом рассмотрим устройство и возможные режимы работы порта ввода/вывода общего назначения (GPIO).

Для начала работы необходимо установить пакет IAR EWARM, а также скачать с сайта ST Microelectronics комплект библиотек для данного семейства микроконтроллеров. На сайте iar.com доступны 2 бесплатные ознакомительные версии программы IAR EWARM. В отличие от полноценной коммерческой версии они имеют некоторые ограничения. Для версии Evaluation edition лицензия имеет 30-дневный срок, после окончания срока действия лицензии компиляция проектов будет невозможна. Версия Kickstart edition не имеет ограничений по сроку лицензии, но размер сгенерированного выходного файла не должен превышать 32 кбайт. Также в этих версиях есть и другие ограничения, например, в выходной файл не включается исходный код библиотек, нет поддержки проверки соблюдения правил языка C — MISRA C, ограниченная техническая поддержка.
Для данного проекта используется версия 6.30, ознакомительная версия с ограничением на размер генерируемого кода не более 32 кбайт – IAR EWARM Kickstart edition. Больше пока и не нужно.

Библиотеки Standard Peripheral Library. Это набор стандартных библиотек для работы с различными внутренними периферийными устройствами в составе микроконтроллера, для каждого конкретного семейства микроконтроллеров его можно загрузить с сайта ST Microelectronics — st.com. Также, в этом наборе имеется библиотека CMSIS.
Cortex Microcontroller Software Interface Standard (CMSIS) – стандартная библиотека ядра микроконтроллеров серии Cortex. Содержит описание регистров микроконтроллера и другое.
Загрузить архив со стандартными библиотеками можно по ссылке

stm32l1_stdperiph_lib.zip

Процесс загрузки и установки IAR EWARM пропустим, так как ничего сложного тут нет. Если среда разработки уже установлена на компьютере, библиотеки загружены, то можно приступить к созданию проекта. Для начала создадим папки для наших проектов. Пусть для всех проектов будет одна общая папка Project, внутри нее создадим еще папку Led для текущего проекта, а также папку Libraries для библиотек. В папку Libraries распакуем загруженный с сайта ST Microelectronics архив с библиотеками.

Запускаем среду IAR. Далее создаем новое рабочее пространство: File -> New -> Workspace. Теперь в этом пустом рабочем пространстве необходимо создать новый проект (в одном рабочем пространстве может быть несколько проектов). Идем в меню Project, выполняем пункт Create New Project, и видим такое окно.

Здесь нам предлагается выбрать шаблон для нашего проекта. Раскрываем список «С» выбираем пункт «main», жмем ОК. Появится окно, где будет предложено выбрать каталог и имя для сохранения проекта. Даем проекту имя Led и сохраняем в одноименной папке. Теперь наш проект примет такой вид

В центральном окне открылся файл с текстом программы main.c, пока он содержит только одну заготовку функции main(). В окне Workspace вверху находится выпадающий список с двумя пунктами Debug и Release. Конфигурация Debug создает выходные файлы для программирования микроконтроллера с отладочной информацией, конфигурация Release — без нее. В каждой из этих конфигураций настройки для одного и того же проекта создаются индивидуально. По умолчанию выбрана конфигурация Debug, оставим без изменений, так как далее программа будет тестироваться и в собственном симуляторе и на плате Discovery. Ниже списка выбора конфигурации отображается дерево с файлами проекта.
Теперь к нашему проекту необходимо добавить несколько файлов, без которых не обойтись.
Итак, какие файлы нам понадобится добавить в проект? Их всего два:
system_stm32l1xx.c
и
startup_stm32l1xx_md.s
Щелкаем правой кнопкой мыши по названию проекта, в появившемся меню выбираем пункты Add -> Add Files.

Далее идем по следующему пути:
Libraries -> CMSIS -> CM3 -> DeviceSupport ->ST -> STM32L1xx
и добавляем в проект файл system_stm32l1xx.c.

Также добавляем в проект файл startup_stm32l1xx_md.s, находящийся по адресу
Libraries -> CMSIS -> CM3 -> DeviceSupport ->ST -> STM32L1xx -> startup -> iar.

Пришла очередь настроек проекта. Снова щелкаем правой кнопкой мыши по названию проекта и выбираем пункт Options.

Далее будут описаны не все возможные опции настроек проекта, необязательные для данного проекта могут быть пропущены.

Категория General Options.

Вкладка Target.
Здесь необходимо выбрать тип микроконтроллера. Отмечаем пункт Device, жмем кнопочку выбора микроконтроллера . В появившемся списке выбираем нужный тип — STM32L152xB.

Вкладка Output.
Здесь задается тип генерируемого выходного файла: Executable или Library, то есть исполняемый файл или библиотека. Оставляем Executable. Ниже при желании можно поменять пути, по которым будут сохраняться исполняемый файл, объектный файл и файл листинга.
Вкладка Library Configuration.
Здесь важен только один параметр: в разделе CMSIS он называется Use CMSIS. Необходимо отметить этот пункт.
В списке Library выбирается конфигурация библиотек, для данного примера этот пункт несущественен, как и остальные параметры этой вкладки.
Настройки остальных вкладок категории General Options также не потребуются для данного проекта, оставим их без изменений.

Категория C/C++ Compiler.

В этой категории выбираются стандарты языка C/C++, режимы оптимизации и другие параметры.
Вкладка Optimization. Здесь нужно выбрать уровень оптимизации кода при компиляции программы. В нашем случае необходимо отключить оптимизацию, выбрав None.
Вкладка Preprocessor. А вот эта вкладка очень важна. Здесь, в поле Additional include directories, мы должны указать все пути к файлам, добавленным в проект. У меня получились записи вот такого вида:

$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32L1xx\startup\iar\
$PROJ_DIR$\..\Libraries\STM32L1xx_StdPeriph_Driver\inc\
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32L1xx\

Теперь при обращении к этим файлам, вызове функций и т.п., компилятор будет знать, куда ему обращаться. Пути здесь заданы относительные. Запись $PROJ_DIR$ означает, что путь к файлу указан относительно директории текущего проекта. В нашем случае это каталог Led в папке Project. Запись \..\ означает шаг из каталога проекта на один уровень вверх, то есть теперь мы попадаем из каталога Led в каталог Project. На сколько уровней вверх из каталога проекта надо подняться, столько записей вида \..\ и должно следовать друг за другом, например \..\..\ выведет на 2 уровня вверх и т.д. Дальше все понятно, указаны пути к файлам system_stm32l1xx.c и startup_stm32l1xx_md.s, каждый в отдельной строке. Адрес во второй строке — $PROJ_DIR$\..\Libraries\STM32L1xx_StdPeriph_Driver\inc\ введен заранее, потому что далее мы будем подключать в тексте программы заголовочный файл gpio.h.

Категория Output Converter.

По умолчанию IAR генерирует файл с отладочной информацией в формате ELF. Нам нужно изменить этот формат на Intel extended (hex) или binary. Для этого устанавливаем галочку в пункте Generate additional output и выбираем нужный формат, у меня это Intel extended.

Output Converter

Категория Linker.

Вкладка Config. На этой вкладке указывается путь к файлу конфигурации линкера, в котором будут сохранены настройки из данной категории. По умолчанию указан файл конфигурации, находящийся в одной из директорий пакета IAR. Поскольку, в этот файл будут внесены изменения, рекомендуется перенести его в каталог с нашим проектом, и изменить путь, указанный по умолчанию. Тогда для каждого проекта будет отдельный файл конфигурации линкера со своими индивидуальными настройками. Во-первых, отметим пункт Override default (отменить настройки по умолчанию), затем жмем кнопку выбора каталога справа от поля ввода адреса к файлу.

Linker

В следующем открывшемся окне выделяем файл generic_cortex.icf, выполняем операцию копирования, далее идем в каталог с нашим проектом, делаем вставку файла, выделяем его и жмем кнопку Открыть.

Linker_copy

Теперь файл конфигурации линкера лежит в папке с проектом и адрес к нему задан соответствующий.

Linker config file

Как видите, адрес задан явно. При переносе в другой каталог или на другой компьютер, линкер этот файл не найдет. Поэтому сразу же советую поменять адрес на такой
$PROJ_DIR$\generic_cortex.icf
Теперь адрес файла будет вычисляться относительно папки с проектом.

Далее жмем кнопку Edit. В открывшемся окне на первой вкладке Vector Table надо указать начальный адрес таблицы векторов прерываний
.intvec start = 0x08000000.

Linker_invec_start

Следующая вкладка Memory Regions. Здесь задаются начальные и конечные адреса Flash памяти (ROM) и ОЗУ (RAM). Тут надо точно задать размеры памяти, придется лезть в datasheet. В разделе Memory mapping можно найти таблицу с картой памяти. Вставляем эти адреса в начальные позиции. Для STM32L152RBT6 размер flash памяти равен 128 кбайт, размер ОЗУ (RAM) равняется 16 кбайт. Поэтому, конечные адреса можно вычислить, зная размеры памяти для данного кристалла. Вот такие адреса получаются для STM32L152RBT6.

Linker_memory regions

И последняя вкладка Stack/Heap Sizes. Здесь можно задать размеры стека и кучи. Стек нам нужен для сохранения данных, например, при вызове функций и т.п. Для нашего проекта размер стека можно задать небольшим, а под кучу (Heap) память можно не выделять.

Linker_Stack_Heap size

Категория Debugger.

Вкладка Setup. Выбор метода отладки программы. В списке Driver для разных вариантов отладки выбирается Simulator (во встроенном симуляторе) или ST-LINK (непосредственно в «железе» через аппаратный программатор\отладчик). Также, должна быть установлена галочка в поле «Run to main», указывающая, что программа начинает работать с основной функции main(). Выбираем ST-LINK, а в дальнейшем кратко рассмотрим и работу в симуляторе.

Debugger ST_LINK

Вкладка Download. Здесь нужно включить опцию программирования кристалла непосредственно из среды IAR – Use flash loader(s).

Debugger_use flash loader

Категория ST-LINK.
Здесь выбирается тип интерфейса, посредством которого будет вестись отладка программы на плате STM32L-DISCOVERY. Должно быть отмечено SWD.

ST-LINK

И на этом, наконец, настройки проекта закончены, жмем ОК.

Идем в меню Project -> Rebuild All. В нижнем окне Messages\Build можно наблюдать процесс компиляции и сборки всех файлов проекта, и если нет ошибок, в итоге мы должны увидеть следующее:

Total number of errors: 0
Total number of warnings: 0

На этом завершена подготовка проекта, теперь можно заняться написанием непосредственно кода. Как уже упоминалось в начале, на плате имеются два светодиода LD3 (зеленый) и LD4 (голубой). Далее приведен код, который заставляет эти светодиоды поочередно перемигиваться. Наберите его в окне main.c (или скопируйте отсюда) и заново выполните сборку проекта Project -> Rebuild All.

#include "stm32l1xx.h"
#include "stm32l1xx_gpio.h"

#define LD_PORT GPIOB
#define LD_GREEN GPIO_Pin_7
#define LD_BLUE GPIO_Pin_6

#define GPIO_HIGH(a, b) a -> BSRRL = b
#define GPIO_LOW(a, b) a -> BSRRH = b

void InitPeriph(void);
void Delay(uint32_t step);

int main()
 {
  InitPeriph();
  while(1)
  {
   GPIO_LOW(LD_PORT, LD_BLUE);
   GPIO_HIGH(LD_PORT, LD_GREEN);
   Delay(0x0001FFFF);
   GPIO_LOW(LD_PORT, LD_GREEN);
   GPIO_HIGH(LD_PORT, LD_BLUE);
   Delay(0x0001FFFF);
  }
 }

void InitPeriph(void)
 {
  RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
  GPIOB->MODER |= GPIO_MODER_MODER7_0;
  GPIOB->OTYPER &= ~GPIO_OTYPER_OT_7;
  GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR7;
  GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7;

  GPIOB->MODER |= GPIO_MODER_MODER6_0;
  GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;
  GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR6;
  GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6;
 }

void Delay(uint32_t step)
 {
  while(step>>0)
  {
   --step;
  }
 }

Теперь можно подключить плату STM32L-DISCOVERY к компьютеру и нажав на панели инструментов кнопку Download and Debug Download and Debug, наблюдать процессы программирования микроконтроллера и запуска отладчика IAR. На появившейся панели инструментов Debug

Toolbars_Debug

необходимо нажать кнопку Go Toolbars_Debug_Go для запуска программы на выполнение. При правильно выполненных настройках два светодиода на плате должны начать мигать поочередно. В следующей статье будет детально разобран код программы, описаны функции регистров GPIO, а также вкратце рассмотрена работа в симуляторе.

Загрузить архив с проектом

P.S. С момента выхода версии IAR EWARM 6.2 в среду разработки включены собственные библиотеки CMSIS (файлы core_cm3). Это нововведение обосновывают улучшением оптимизации кода. При загрузке проектов, созданных в предыдущих версиях, с библиотеками CMSIS от ST Microelectronics компиляция будет невозможна! Также обращайте на это внимание при работе в пиратской более ранней версии IAR EWARM, чем версия 6.2. Тут будут отличия при настройках проекта. Более подробно смотрите здесь

Работа в IAR EWARM 6.2 с проектами, созданными в более ранних версиях.

Другие статьи:

  49 Responses to “STM32. Создание проекта в IAR EWARM. Работа с портами ввода/вывода. Часть 1.”

  1. Nosferatu

    В коде показанном с статье ошибка. В цикле while видно случайно при публикации статьи вставлен html тег переноса строки.

  2. Nosferatu

    Пример из папки заработал только после того, как в категории ST-LINK выбрал «Connect during reset»

    • Попробовал пример с сайта, у меня все работает. При любом варианте в категории ST-LINK. Могу только сказать, что эта настройка используется в том случае, когда выводы SWD могут быть деактивированы программно. В этом случае соединение происходит до выполнения инструкций из кода, зашитого в контроллер. Проверьте еще раз, может теперь ST-LINK будет работать в режиме Normal? Если не получится, пишите, попробуем разобраться.

  3. здравствуйте, я с stm32l-discovery мучаюсь уже больше месяца, не могу прошить при помощи IAR-а, постоянно какие то ошибки, какие я уже версии не пробовал, найдя Ваш вариант сделал сначала всё сам, не получилось, потом попытался запустить ваш проект, выдаёт следующие ошибки:
    Wed May 30, 2012 17:09:54: Fatal error: ST-Link Connection error Session aborted!
    Wed May 30, 2012 17:09:54: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\
    FlashSTM32L15xxxRAM16K.out
    Wed May 30, 2012 17:09:54: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\
    FlashSTM32L15xxB.flash,
    до вашего проекта, всё выполнял в IAR(6.10) и были только последние две ошибки, Ваш проект был создан в IAR(6.30) появилась еще и первая ошибка, в результате в 6.10-две ошибки, в 6.30-три ошибки.
    Помогите мне пожалуйста, чем можете, объясните студенту, за ранее спасибо, а также спасибо за данную статью очень понятно. жду ответа.

    • Судя по ошибкам, во-первых, нет соединения с ST-LINK.
      Во-вторых, неудача при загрузке файлов flash loader. Советую проверить наличие этих двух файлов в каталогах (скопировал у вас в комментарии):
      C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\FlashSTM32L15xxxRAM16K.out
      и
      C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\
      FlashSTM32L15xxB.flash
      У меня тут одно отличие — название папки не Embedded Workbench 6.0, а Embedded Workbench 6.0 Kickstart (версия 6.30 с ограничением размера кода в 32 кБайта, загружена с оф. сайта IAR).
      Вернемся к первой ошибке. Тут могут быть проблемы с драйвером ST-LINK. Штука капризная, где-то на форумах замечались конфликты с драйверами виртуального привода Daemon Tools, очень часто ,кстати, пишут об этом, даже в сообществе на родном сайте ST. Можно попробовать переустановить вместе с IAR (пути установки лучше тогда оставить те, что заданы по умолчанию). Заодно можно установить ST-Link Utility, чтобы проверить работу программатора ST-LINK без связки с IAR. Этот вариант лучше оставить напоследок, вначале проверив аппаратную часть.
      Здесь может быть несколько вариантов.
      1) Шнурок USB. При подключении должы гореть красные светодиоды LD2 PWR и LD1 COM (UM1079 User Manual на Дискавери, стр.9). При попытке соединения LD1 COM начинает перемигиваться «красный — зеленый».
      2) Две перемычки CN3 должны быть установлены (находятся справа вверху над индикатором). Они подключают микроконтроллер платы к ST-LINK.
      3) В МК уже содержится какой-то код. После сброса программа конфигурирует выводы отладки SWD так что ST-LINK уже не может обмениваться данными с МК.
      Но мне кажется, что причина все таки в неудачной попытке загрузки файлов flash loader, советую начать с проверки путей, указанных во 2 и 3 ошибках, и действительно ли там есть эти файлы. Что за IAR установлен, скачан с официального сайта? Как выше писал, вижу отличие в названии каталога, хотя может это и не так уж важно.
      Предлагаю следующий порядок действий:
      Установить ST-LINK Utiltity, если утилита есть, лучше попробовать переустановить, как уже писал могут быть проблемы с драйвером. Снести еще Daemon Tools перед этим? Хотя у меня с ним вроде не конфликтует, но как говорится «раз на раз не приходится». Попробовать стереть мк из этой программы. Если сразу не получилось, не отчаиваться, жмем и удерживаем кнопку Reset на плате, снова запускаем стирание мк и тут же мгновенно отпускаем кнопку. Может при этом надо будет установить галочки в пунктах SWD и Connect under Reset (меню Target -> Settings). Это позволит ST-LINK установить соединение еще до выполнения инструкций программы, если она есть в мк и перенастраивает нужные для программирования выводы. Если пройдет удачно, значит проблема в IAR или зашитый код навредил. Далее снова пробуем запуск программирования из IAR. В IAR тоже предусмотрено соединение во время аппаратного сброса, на всякий подобный случай, делается это в опциях проекта: на вкладке ST-LINK в выпадающем списке Reset нужно выбрать вариант Connect during reset. Но если эта проблема уже исключена, оставляем там вариант Normal. Ну и если из IAR опять не получается, пробуем переустановить, пути лучше оставить по умолчанию, у меня это C:\Program Files\IAR Systems… и т.д.

      • P.S. Перед запуском отладки в IAR надо обязательно перекомпилировать проект. Меню Project -> Rebuild All, иначе где-то в его недрах будут адреса для поиска файлов как на моем компьютере. Эта процедура их исправит.

        • Еще не понял какая же все таки версия IAR у вас установлена сейчас. Если 6.1, то проект в ней работать не будет. Начиная с версии 6.2 изменили выбор подключаемых библиотек CMSIS, раньше использовались файлы core_cm3 из библиотек ST, теперь они из пакета IAR. Об этом писал уже
          http://chipspace.ru/iar-ewarm-6-2-use-cmsis/
          Если проект компилится без ошибок, тогда все ОК.

          • сейчас 6.31, но и в 6.1 ошибки были такие же, ST utility работает нормально, ставил галочку в IARе чтобы тот создавал .hex файл, после чего загружал его через ST Utility и всё работало. daemon тоже удалял и чистил весь реестр от него так как написано, не помогло, скиньте пожалуйста ссылку на IAR 6.31, попробую еще раз переустановить, самое интересное, что скаченные файлы для stm32l-discovery с их сайта в IARе 6.31(а именно core3) не подходят и появляется еще больше ошибок, Ваши же подошли успешно.

  4. Лучше загрузить с оф. сайта версию с ограничением на размер кода в 32 кБайт. Хватит за глаза для изучения. Вот ссылка http://supp.iar.com/Download/SW/?item=EWARM-KS32. Далее жмем «Continue», попадаем на другую страницу, заполняем предложенную форму. Можно забить любые данные все, кроме e-mail, на почту придет письмо со ссылкой, по которой надо будет перейти. Там будет ссылка для загрузки, и два кода Licence Number и Licence key. Их надо где-то сохранить, потребуется ввести при установке.

    • Спасибо. Поставил скаченный IAR Embedded Workbench for ARM, v. 6.30, 32K Kickstart Edition, все заработало! Вначале только еще была проблема, что установки драйвера ST-Link_V2_USBdriver.exe оказалось недостаточно. Винда сама нашла еще какой-то драйвер и установила.

  5. Подскажите, пожалуйста. Мне сделали проект в IAR, файл -hex получаю, прошиваю в ST VisualProgrammer, но устройство не работает. Автор говорит, что шьёт непосредственно из IAR, тогда устройство работает.
    1.Такое может быть?
    2.Пробовал прошивать непосредственно из IAR, но не получается, выдаёт ошибку Fatal error: ST-Link Connection error Session aborted! Если я использую Discovery только как программатор, а устройство на другой плате, мне настраивать ST-Link в IAR так как вы рекомендуете или в моём случае что-то по-другому будет?
    Спасибо!

  6. А есть файл настроек проекта, который я могу показать, чтоб не давать проект целиком?

    • :) Такой секретный проект? И рад бы помочь разобраться, но мне как электронщику еще интересна была бы и схема, я так понял вы через Дискавери пробуете «прошить» внешний чип? Судя по ошибке «Fatal error: ST-Link Connection error Session aborted! » нет нормального соединения между ST-Link и микроконтроллером. Вариантов может быть масса: ошибка в схеме, нерабочий драйвер ST-Link, неверные настройки IAR (сама среда то не «крякнутая» случаем?) и… еще много нюансов. Даже если и есть такой файл, вряд ли чем поможет.

      Я так понял, вы не автор проекта, а скорее всего заказчик или студент. Если заказчик, то тут уж лучше автора привлечь к решению, будет проще и быстрей. А если для себя изучаете STM, пытаетесь вникнуть в готовый проект, то вижу что знаний у вас пока маловато, извините уж за прямоту. По вопросам понял, слишком в них мало конкретики.

      Так что и я пока конкретно ответить не могу, круг поиска проблемы уж очень вы задали широкий :). Попробуйте мои проекты с сайта загрузить, здесь я уж смогу помочь. Или шлите проект и схему на e-mail, он внизу страницы, если не хотите обнародовать.

      А можете изложить проблему на форуме, там быстрей увидят вопрос, чем в комментариях, может и быстрей кто-то еще подключится, да и наполнен он пока мало.

  7. Теперь картина понятней. Извините, Андрей, но у коммерческого проекта есть автор, получивший за него деньги, пусть он проблемой занимается. Нерабочий hex на его совести, зачем вам этот геморой с IAR, если вы заплатили деньги, должны получить рабочую прошивку.

  8. как узнать размер проекта целиком? В папке list у меня куча файлов проекта, что я подключал, во всех размер есть. А общий суммарный размер где смотреть?

  9. 2 774 bytes of CODE memory (+ 12 range fill )
    202 bytes of DATA memory (+ 16 absolute )
    169 bytes of XDATA memory

    вот это я имел ввиду в файле .map в папке list

    это для AVR было. Под АРМ пока не нашел где там указать, чтобы генерил его.

  10. Случилась вот какая оказия. дуба врезал stlink на stm32vldiscovery . Я запаял на его место новый stm32f103cbt7. в паутине нашел прошивку и закинул ее в него. потом на место stm32f100RBT6, лежавшего на плате, запаял stm32L152RBT6. Шьется ок. Но! результата снаружи НУЛЬ.Бился четверо суток, пока не нашел этот примерчик и записал его внутрь. И тут волею судьбы от земли отваливается проводок. (идущий от другой дискаверной платы по swd) и заработало!!!! НО! только таким макаром и запускается проц. swdclk swdio & +3в припаяны, отрываю землю — проц запускается, потом прилепляю землю — работает. загружаю программу и таже история. простое понижение питания результата не дает. Толи проц дефектный или в чем дело, может имеется нюанс какой, типа ножка определенная должна к чему-то подключена? Вот в запаянном новом stlink пока не соединил 25 и 27 пин тоже не запускался.

    • Плату бы проверить очень внимательно на предмет качества пайки. Разводка платы была под другой чип, они могут быть и не 100% совместимы по выводам с stm32L152RBT6, тоже проверить не помешает.

  11. проверил,выводы совместимы. Ваш проект http://chipspace.ru/stm32l-discovery-lcd/ то работает.
    А пример оффсайта STM32L-DISCOVERY не выводит на дисплей. в дебаггере определил что виснет в этом месте —
    /*!< Wait Until the LCD Booster is ready */
    while(LCD_GetFlagStatus(LCD_FLAG_RDY) == RESET)
    {
    }

    LCD_BlinkConfig(LCD_BlinkMode_Off,LCD_BlinkFrequency_Div32);
    LCD_GLASS_Clear();
    }
    не подскажете ли с чем это связано?

    • Я совсем запутался, откуда дисплей на плате STM32VL-DISCOVERY? Вы же вроде ее переделали. Или внешний индикатор подключен?
      Схемку бы на словах описали подробней.
      По поводу бустера интересный момент, надо копнуть в эту сторону. Завтра постараюсь заняться.

  12. внешний индикатор соединил проводами к штырям на плате дискавери. раньше он работал с msp430f425.
    там 4 линии COMa и 24 линии сегмента. И цифры там восьмерки и символы разные.
    вот мне надо его теперь прикрутить к stm32L. Взял Ваш пример http://chipspace.ru/stm32l-discovery-lcd-2/ — работает. Подскажите как в Вашем примере увеличить количество выводимых цифр.(в файле stm32l_discovery_lcd_new.c нашел, но если бы подсказали что и где, было бы быстрее). Разводку сегментов тыком выясняю, но не все знакоместа выводятся.

  13. http://chipspace.ru/stm32l-discovery-lcd/
    Контроллер может управлять 176 сегментами (4 управляющих линии COM0..3, на 44 сегмента каждая) или даже 320 сегментами (8 управляющих линий COM0..7 на 40 сегментов каждая).
    Структуру видеопамяти, выводы LCD можно посмотреть в Reference manual, datasheet.
    Библиотечные файлы из моего проекта — файлы из демопроекта от ST, только адаптированные под конкретный индикатор и урезанные.
    Разводка сегментов индикатора по внешним выводам, расположение выводов LCD на STM32, соответствие их «видеопамяти» — вот все, что нужно. Далее рутинная работа, по этим данным сделать свою таблицу символов. И это все.

    • Мне сложно помочь дистанционно, поскольку сделать файл библиотеки под другой индикатор — много рутинной работы, как уже упоминал. При написании примера было проще, там были готовые файлы из демопроекта, оттуда я и взял все цифры и буквы для знакогенератора под этот индикатор.
      Попробуйте включать каждый сегмент, зарисовать их расположение и соответствие выводам индикатора, если работа идет методом тыка. В общем, работы тут очень много.
      К тому же, не имея под рукой такого индикатора, я написать код и проверить просто не могу.

  14. Привет, подскажи плиз. Ковыряюсь с STM32F103RB. Установил ИАР с кикстарт лицензией. версия 6.5. поначалу прописывал путь к библиотеке как у тебя в статье написано — стало конфликтовать с интринсиксами , по совету других ембеддеров закомментировал конфликтующие объявления в core_m3.h. Криво, но компилится — только воринги на то, что комменты нельзя ставить в библиотеке. Потом нашел твою статью — пытаюсь сделать как написано — т.е. поудалял из препроцессора пути к библиотекам, поставил галку на use CMSIS. Ругается, что не может найти хедер (что не удивительно ведь его там и нет). может можно в ИАРе указать что искать в другом месте надо или еще как-то решить проблему?
    Fatal Error[Pe1696]: cannot open source file «stm32f10x.h» D:\Projects\dev\src\STM\1\main.c
    searched: «D:\Projects\dev\src\STM\1\»
    searched: «C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\CMSIS\Include\»
    searched: «C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\inc\»
    searched: «C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\inc\c\»

    • Видимо удалил нужные пути. Удалить можно пути только к папкам с файлами core_cm3.h, core_cm3.c. Все остальные необходимо оставить.
      Удалять все пути я не советовал :)

    • Пути к файлам придется посмотреть и скопировать. Во-первых, в статье пути к файлам для другой библиотеки, для STM32L152. Во-вторых, возможно, в более свежей версии библиотек структура папок несколько изменилась.
      Какая библиотека и какой версии используется? Напиши, а я напишу какие пути прописать.

  15. т.е. Иаровцы вставили библиотеку ядер, а путь к библиотеке доступа к переферии надо прописывать? ща попробую.

  16. оставил путь к библиотеке $PROJ_DIR$\CMSIS\CM3\DeviceSupport\ST\STM32F10x ; лежит там же хтмлник с датой и версией V3.5.0 / 11-March-2011.
    Я так понял состав подключаемых библиотек при работе в ИАР с мк STM32: библиотеку ядер (у меня кортекс м3) не указываем явно, только галку ставим на CMSIS в прерпоцессоре, все остальное что относится к переферии и регистрам конкретного процессора ищем у производителя кристалла, копируем к себе в проект и указываем путь в препроцессоре? сюда относятся (в моем случае STM32F103RB) такие библиотеки, как DeviceSupport и STM32F10x_StdPeriph_Driver.
    компилится, не ругается.

    • Совершенно верно все понял!
      Надо указать пути к следующим папкам:
      ……\CMSIS\CM3\DeviceSupport\ST\STM32F10x\
      ……\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\
      Если будут использоваться стандартные библиотеки периферии, то еще добавить строки:
      ……\STM32F10x_StdPeriph_Driver\inc\
      ……\STM32F10x_StdPeriph_Driver\src\
      На той же вкладке можно сразу указать тип семейства контроллера в поле Defined symbols — STM32F10X_MD.
      Можно здесь не указывать, а раскомментировать соответствующую строку с #define STM32F10X_MD в начале файла stm32f10x.h, затем сохранить файл.
      К проекту подключить файлы
      startup_stm32f10x_md.s
      system_stm32f10x.c

  17. Спасибо!

  18. А для чего указывать \CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\ ??
    Эти файлы startup_stm32f10x_md.s
    system_stm32f10x.c подключать прописав в main.c #include system_stm32f10x.h
    ??

  19. Здравствуйте! Не могли бы вы дать ссылку на скачивание даташита к контроллеру, который установлен на STM32L-DISCOVERY?
    Имею в виду не спецификации, а документ, в котором можно было бы посмотреть регистры для настройки периферии и прочего. Спасибо.

  20. PANYTA

    Здравствуйте.
    Вот мой результат компиляции:

    Building configuration: Led — Debug
    Updating build tree…

    4 file(s) deleted.
    Updating build tree…
    main.c
    startup_stm32l1xx_md.s
    system_stm32l1xx.c
    Fatal Error[Pe1696]: cannot open source file «stm32l1xx.h» D:\ДИМА\STM32\Projects\Libraries\CMSIS\Device\ST\STM32L1xx\Source\Templates\system_stm32l1xx.c 104
    searched: «D:\ДИМА\STM32\Projects\Libraries\CMSIS\Device\ST\STM32L1xx\
    Source\Templates\»
    searched: «D:\ДИМА\STM32\Projects\Libraries\CMSIS\Device\ST\STM32L1xx\
    Source\Templates\iar\»
    searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\CMSIS\
    Include\»
    searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\inc\»
    searched: «C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\inc\c\»
    Error while running C/C++ Compiler

    Total number of errors: 1
    Total number of warnings: 0

    Что не так ?

    • Не найден файл stm32l1xx.h. Надо прописать путь в настройках компилятора. И еще, постарайтесь не использовать кириллицу в названии каталогов. Может в данном случае это не критично, но иногда некоторые программы это воспринимают недружелюбно.

  21. PANYTA

    С кириллицей не дружит MPLAB, знаю. IAR, вроде не русофоб :)
    Файла stm32l1xx.h нет в вашем архиве на этой странице. Подскажите, где его взять (на ct.com).
    В каком разделе искать: Products, Support, или ещё где ?

  22. PANYTA

    Извиняюсь…
    Невнимательно смотрел. Всё есть.

  23. Здравствуйте. Подскажите, пожалуйста, зачем в теле функции задержки Delay() в цикле используется конструкция while(step>>0) вместо while(step > 0) или просто while(step)? Опечатка или какой то скрытый смысл?