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

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

Введение

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

Качаем CMSIS

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

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

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

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

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

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

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

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

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

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

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

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

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

Первая строчка указывает на корень проекта, где лежит main.c, это вроде как не обязательно, но пусть будет, вторая на будущую папку с CMSIS. Обращаем внимание на стрелки прокрутки вкладок, выделил синим:

Теперь отладчик. В разделе Debugger на вкладке Setup выбираем ST-LINK, который идет в комплекте с отладочными платами Discovery:

и на вкладке Download ставим галочку Use flash loader(s):

После этого в разделе ST-LINK выбираем тип интерфейса подключения, у нас по SWD:

Фух, проект настроили. Нажимаем OK для сохранения изменений.

После этого идем в каталог с проектом и создаем там папку CMSIS, в нее мы будем складывать файлы библиотеки CMSIS:

Библиотека CMSIS

Архив с STM32CubeF1 скачали, разархивировали. В нем содержится много разных вещей: документация, примеры для отладочных плат, драйверы HAL и сам CMSIS, который нам и нужен. CMSIS расположен в .\STM32Cube_FW_F1_V1.6.0\Drivers\CMSIS.

Вначале идем в .\CMSIS\Device\ST\STM32F1xx\Include:

У нас тут куча .h файлов для разных микроконтроллеров, но чего-нибудь наподобие stm32f103x8.h не видно. Открываем stm32f1xx.h. Там есть вот такая вещь:

Обращаем внимание на строчку:

Ага, STM32F103C8 тут есть. Значит для нашего микроконтроллера подойдут исходники, от B версии: STM32F103xB. Запомним это. Из этой папки копируем в CMSIS проекта следующие файлы:

Далее переходим в .\CMSIS\Device\ST\STM32F1xx\Source\Templates и отсюда забираем файл system_stm32f1xx.c

После нам нужен стартап-файл. Заходим в .\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar. Там нас так же ждет большое количество файлов и мы так же ищем тот, который оканчивается на xBstartup_stm32f103xb.s. Копируем его в $PROJ_DIR$\CMSIS\.

Затем переходим в .\CMSIS\Include и забираем вот эти 3 файла:

Так как в STM32F103C8 микропроцессорное ядро Cortex M3, то и берем соответствующие исходники.

Итого 8 файлов:

  1. stm32f1xx.h
  2. stm32f103xb.h
  3. system_stm32f1xx.h
  4. system_stm32f1xx.c
  5. startup_stm32f103xb.s
  6. core_cm3.h
  7. core_cmFunc.h
  8. core_cmInstr.h

Вот так это должно выглядеть в папке $PROJ_DIR$\CMSIS:

Теперь эти файлы надо добавить в обозреватель проекта в IAR-е. Для удобства создадим группу с одноименным названием CMSIS. Нажимаем правой кнопкой мыши на названии проекта и выбираем Add->Add Group…

Вводим название группы и нажимаем OK:

После этого в группу CMSIS добавляем файлы из папки CMSIS:

В открывшемся диалоге выбираем все файлы и нажимаем Открыть:

В результате получаем вот это:

После этого открываем файл stm32f1xx.h и раскомментируем стоку с #define STM32F103xB:

Далее пишем следующий main:

Выбираем Project->Make. Если все сделали правильно, то получаем сообщение об успешной компиляции проекта:

Вот мы и научились подключать CMSIS к нашему проекту. В следующей статье мы продолжим изучение микроконтроллеров STM32 😉 Продолжение тут.

Ссылки:

STM32CubeF1: https://yadi.sk/d/E0BHVVrj3ZuZ9o

Пустой проект для STM32F103C8 на GitHub: https://github.com/DiMoonElec/stm32f103c8_empty_project

Все статьи цикла: http://dimoon.ru/category/obuchalka/stm32f1

Метки: , , , , , . Закладка Постоянная ссылка.

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

  1. Георг пишет:

    И снова здравствуйте. Решил всё же запустить мк по Вашим урокам, и сразу проблема
    core_cmFunc.h
    core_cmInstr.h
    Таких файлов нет в актуальной версии скачанной с сайта.
    И небольшое замечание: Вы бы хоть немного давали возможность делать шаг в сторону)) Почему б не написать, какой стартап файл нужен для Keil? ARM, IAR, gcc…
    Методом тыка подобрать можно, но это всё же время и нервы.

  2. Георг пишет:

    Второе замечание по ходу «Тыкания»: (речь про Keil, но думаю тут разница не большая)
    cm3 подключает еще файлы, которые подключают еще файлы… Проще просто дать путь к папке со всеми файлами в Drivers\CMSIS\Include

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

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