22 марта 2012 г.

Настройка Keil uVision для работы с STM32 Value Line Discovery

Если у вас появилось желание освоить ARM-процессоры, то плата STM32 Value Line Discovery может послужить отличным стартом для этого. Сред разработки для этой железки, как платных, так и бесплатных, предостаточно. Компания Keil предлагает свое решение для разработки, которое называется uVision, с ним мы и познакомимся сегодня.
Настройка среды порой требует, на взгляд новичка, неочевидных шагов, и "быстрый старт" может превратиться в очень долгий. Чтобы избежать этого, пройдемся от самого начала, когда у нас нет ничего, кроме платы, до момента запуска программы на процессоре.

Качаем тулзы

Собственно, Keil uVision4 качается отсюда после заполнения анкеты. Можете писать, что хотите, годной проверки на валидность там нет. Если хотите правды, то в конце выбирайте "I am using devices from:" - ST, "Which ARM architectures are you using?" - Cortex-M3. Тыкайте Submit и качайте MDK423.EXE (примерно 450 Мб), устанавливайте его. Если нет желания заполнять анкету, дистрибутив можно найти на всяких файлопомойках и торрентах.

Также потребуется скачать библиотеку CMSIS и драйвер для периферии. Все необходимое заботливо упаковано и качается отсюда(примерно 22 Мб).

Reference manual для процессора можно взять здесь, а всякие вспомогательные мануалы - здесь в разделе design support.

Подготавливаем папку для проекта

Создаем папку для проекта. У меня это будет C:\devel\my_project. В нее сразу же надо скопировать несколько файлов из архива с библиотеками, который мы скачали ранее:

  • \Libraries\CMSIS\CM3\CoreSupport\core_cm3.c
  • \Libraries\CMSIS\CM3\CoreSupport\core_cm3.h
  • \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h
  • \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
  • \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h

Создаем проект

Запускаем uVision, жмем Project -> New uVision Project:


Заходим в папку my_project, вписываем название проекта my_project, жмем Сохранить. Открывается окно выбора модели кристалла. Выбираем STMicroelectronics и STM32F100RB (это название написано на самом кристалле, который стоит в плате):


Жмем ОК, программа спросит, копировать ли стартовый код в папку проекта, говорим Да. Слева появится дерево проекта:


Создадим файл main.c, в котором потом будем писать код. Жмем File->New, появляется пустое тело файла. Пишем в нем код, который ничего не делает и сохраняем под именем main.c:


Теперь добавляем к дереву проекта нужные файлы. Для этого жмем на Source Group 1 правой клавишей мыши и выбираем Add Files to Group 'Source Group 1':


Выбираем все три файла, нажимаем Add, потом Close. Видим, что файлы добавились в дерево:


Настраиваем препроцессор и дебаггер

Жмем правой кнопкой мыши на Target 1, выбираем Options for target 'Target 1':


Переключаемся на вкладку C/C++, в Preprocessor Symbols указываем STM32F10X_MD_VL, в Include Paths пишем ..\inc;:


Переключаемся на вкладку Debug, отмечаем правый radio-button Use:, выбираем из выпадающего списка ST-Link Debugger, жмем Settings, выбираем SWD:


Переходим во вкладку Utilities, выбираем из выпадающего списка ST-Link Debugger:


Жмем ОК, настройка завершена.

Собираем проект и заливаем его в процессор

Для сборки проекта нажимаем кнопку Rebuild:


И следим, чтобы не вылезли ошибки в Build Output внизу. Правильный вывод вот такой:


 Для заливки программы в процессор жмем кнопку Download:


Теперь код как бы в процессоре, но выполняться он не будет - он ждет отладки. Для отладки нажимаем кнопку Start/Stop debug session:

uVision предупредит вас о максимальном размере кода, после этого перейдет в режим отладки и откроет новое поле. При этом на плате загорается красный светодиод LD1. Нажимаем еще раз на кнопку Start/Stop debug session, программа uVision возвращается к своему изначальному виду, а прошивка процессора начинает работать.

Эпилог

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

Написать программу, которая будет моргать лампочками по-своему - отдельная задача, с которой мы потом разберемся. Главное - быстрый старт с STM32 Discovery будет действительно быстрым, когда вы знаете как подружить Keil uVision с платой.