Необходимый софт

Так уж сложилось, что на моем компьютере всегда была установлена Windows, поэтому весь софт который мы будем использовать в ходе изучения микроконтроллеров STM32 предназначен для винды. Кстати у STM32 есть еще одно преимущество перед другими популярными контроллерами (типа pic или avr), для STM32 нет особой проблемы с софтом под линукс (об этом подробнее в другой раз).  Весь софт который нам понадобится можно поделить на три группы: 

  • Тот в котором мы пишем текст программы
  • Тот при помощи которого мы компилируем программу
  • Тот который записывает скомпилированную программу в контроллер

Это означает что у суровых челябинских металлургов есть возможность писать программы хоть в блокноте, потом делать make файлы, компилировать всё это дело и прошивать. Но мы пойдем читерским путём, заюзаем софт который будет делать всю грязную работёнку за нас, ведь на самых первых порах, получение результата гораздо важнее глубокого понимания принципов работы. Выбор IDE дело ответственное, среди трёх кандидатов (IAR, Eclipse и CooCox) я выбрал последнего по ряду причин: он бесплатный, легкий в настройке, есть поддержка ST-LINK (того который в STM32 Discovery стоит), удобный редактор кода и отладчик, интерфейс похож на эклипс который многие видели и юзали. От слов переходим к делу - скачаем, установим и настроим софт.

Заходим на страничку CooCox'а и скачиваем последнюю версию. На данный момент это версия 1.4.1. CooCox сам по себе не умеет компилировать код который в нем написали. Для компиляции он запускает внешний компилятор который тоже нужно скачать. Существует более новая версия этого компилятора, но у меня возникли некоторые сложности с ней, не запускалась отладка. Поэтому я рекомендую использовать именно ту версию на которую дал ссылку я. Последнее что нам потребуется загрузить это небольшая утилитка от STM. Называется она STM32 ST-LINK Utility и служит для того чтоб зашивать программы в контроллер. Юзать мы её скорее всего не будем, мы устанавливаем её ради драйверов на отладчик (ST-LINK) который встроен в нашу STM32 Discovery. Без этих драйверов мы не сможем отлаживать, прошивать, стирать память итд. Для скачивания заходим на страничку и переходим на вкладку Design Support, снизу будет ссылка на скачивание STM32 ST-LINK utility. Жмем и качаем. На этой же страничке есть отдельно драйвера для ST-LINK но я не пробовал их ставить отдельно, но по идее должно работать. Теперь когда все скачалось можно перейти к установке. Первым делом ставим CooCox, ни каких нюансов и тонкостей там нет. Следуем указаниям мастера установки, жмем везде далее. После этого распакуем компилятор. Распаковывать желательно в папку с коротким именем, без пробелов и русских букв. Просто на всякий случай. Например, у меня он лежит в папке C:\CooCox\arm-2011.03-coocox\ т.е. вместе с кокосом. Теперь приступим к настройке, к счастью она небольшая, всё работает как говорится "из коробки". Первым делом нужно сказать CooCox'у где у нас лежит компилятор который он должен использовать. Для этого выбираем в меню: Project -> Select Toolchain path. Указываем папку bin лежащую в папке с компилятором.  У меня это папка C:\CooCox\arm-2011.03-coocox\bin см. рисунок ниже:

На этом наши настройки окончены, надеюсь вы не расстроились из-за такого не большого их количества :) Сейчас мы попробуем просто прошить в контроллер простейшую программу и получить первый результат пусть и без особого понимания как оно работает. Запускаем CooCox и создаем новый проект. Для этого нажимаем меню---> новый проект. Откроется небольшой мастер при помощи которого будет создан некоторый шаблон содержащий минимально необходимый код. На первом шаге мастер спросит у нас кто выпустил наш контроллер, мы должны выбрать ST. 

На следующем шаге у нас спросят для какого контроллера мы будем писать код. На отладочной плате STM32 Discovery установлен микроконтроллер STM32F100RB. Его то мы и выбираем: 

Остался последний шаг - выбор библиотек которые можно подключить к нашему проекту. Тут есть много разного: библиотеки для работы с портами ввода/вывода, различной периферией (таймеры, SPI, DAC и т.д.). Библиотека представляет собой некий набор функций предназначенных для упрощения жизни программисту. Достаточно поставить одну галочку GPIO, как еще три поставится автоматически. Это говорит о том что между библиотеками есть зависимости. Итак, ставим галку:

Нам будет предложено сохранить новый проект на диске. В следующем окне выбираем название проекта и директорию для него. Русские пути и названия файлов лучше не использовать:

После этого мастер создаст некоторый "пустой" проект. Пустой он условно, рекомендую ознакомится со структурой папок и их содержимым. Нас интересует один файл main.c в котором мы будем писать наш код. Точнее сейчас мы просто вставим уже написанный и попробуем его скомпилировать и прошить. Для этого, заменяем всё содержимое файла main.c этим кодом:

#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>
 
void Delay(void) {
volatile uint32_t i;
    for (i=0; i != 0x80000; i++);
}
 
int main(void) {
    GPIO_InitTypeDef PORT;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
    PORT.GPIO_Pin = (GPIO_Pin_9 | GPIO_Pin_8);
    PORT.GPIO_Mode = GPIO_Mode_Out_PP;
    PORT.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init( GPIOC , &PORT);
    for(;;) {
        GPIOC->ODR |= (GPIO_Pin_9 | GPIO_Pin_8);
        Delay();
        GPIOC->ODR &= ~(GPIO_Pin_9 | GPIO_Pin_8);
        Delay();
    }
    return 0;
}; 

После этого программу нужно скомпилировать, для этого нажимаем project -> build. В результате мы должны получить сообщение об успешной компиляции (BUILD SUCCESSFUL). Если всё прошло гладко, то можно попробовать прошить контроллер. Для этого нужно настроить CooCox для работы с программатором ST-LINK. Выбираем в меню Debug -> Debug Сonfiguration и в открывшемся окне настраиваем все так же как на рисунке ниже: 

Теперь все готово к прошивке. Жмем Flash -> Program download. На STM32 Discovery начнет мигать второй красный светодиод (первый все время горит). Через некоторое время контроллер прошьется и мы увидим что зелёный и синий светодиод одновременно замигали. Это говорит о том, что прошивка завершена успешно. Теперь можно сказать, что микроконтроллерный "Hello World" успешно написан. Внимание! Если вместо сообщения об успешной прошивке вы видите "Error: Connect failed, check config and cable connection", то нужно просто заменить файл c:\CooCox\CoIDE\bin\STLinkUSBDriver.dll на этот и все заработает. В следующей статье мы начнем подробнее разбираться что же мы тут понаписали. Ну а для первого раза достаточно этого :) 

Скачать весь нужный софт