STM32. 2. Первый проект
Первой задачей после установки IDE, в качестве которой выбрали Keil, будет создание проекта, конфигурирование его и написание первой программы – «Hello World», т.е. помигаем светодиодом.
STM32 it’s work
Внимание!
Все описанные действия приводятся для демонстрационной платы STM32vlDiscovery и установленному на ней микроконтроллеру STM32F100RB. Для других плат и контроллеров ниже описанное справедливо, но требуются поправки на используемый контроллер.
Подключаем демоплату, которую находит система, и запускаем среду.
И создаём новый проект: Project->New uVision Project
Создаём папку под новый проект и сохраняем его туда. Далее выбираем используемый нами камень (тот, что установлен на нашей Discovery) STMicroelectronics->STM32F100RB
Среда поддерживает множество ARM’ов от различных производителей. В правом окошке можно прочитать краткую информацию по выбранному камушку.
Далее соглашаемся с созданием инициализирующего файла и перед нами открыт созданный наш голый проект, которые ещё конфигурировать и конфигурировать.
Теперь переименовываем каталоги в проекте для удобства навигации и создадим исполняемый файл.
Добавить каталог «Add Group», добавить файл «Add New Item to Group» в меню по правому клику на каталогах проекта.
Следующим шагом будет подключения библиотек CMSIS и Standard Peripheral Library, наш контроллер относиться к семейству STM32F10x. Скачать библиотеку можно с официального сайта ST Microelectronics:
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890
Ссылка на момент написания статьи. К сожалению их сайт в течение последнего времени несколько раз менял свой дизайн и пути, и если он снова обновиться найти данную библиотеку можно будет по запросу «STM32F10x standard peripheral library».
Разархивируем содержимое паки Libraries из архива в папку нашего проекта и добавляем ключевые файлы через меню «Add Existing Files to Group» в наш проект:
Библиотеки CMSIS:
CMSIS\CM3\CoreSupport\core_cm3.c
CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
Из библиотеки работы с периферией нужны для проекта следующие файлы:
STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c
STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c
Ещё из архива нам понадобится скопировать 3 файла из каталога Project в папку STM32F10x_StdPeriph_Driver нашего проекта:
Project\STM32F10x_StdPeriph_Template\stm32f10x_it.h
Project\STM32F10x_StdPeriph_Template\stm32f10x_it.с
Project\STM32F10x_StdPeriph_Template\stm32f10x_conf.h
Из которых
STM32F10x_StdPeriph_Template\stm32f10x_it.с
добавим к проекту.
Далее заходим в меню проекта, через меню «Option for Target» или по Alt+F7, и начинаем его конфигурировать под наши нужды
В открывшимся окне переходим на вкладку «Output», где разрешаем создание HEX файлов в нашем проекте:
На вкладке C/C++ в поле «Define» раздела «Preprocessor Symbols» прописываем:
STM32F10X_MD_VL, USE_STDPERIPH_DRIVER
Где:
STM32F10X_MD_VL – мы указываем, к какой линейке принадлежит используемый контроллер;
USE_STDPERIPH_DRIVER – что будем применять стандартную библиотеку периферии.
Так же прописываем все пути ко всем файлам проекта в строке «Include Paths», для этого щелкаем по кнопке «…».
Теперь настроим работу со встроенным в Discovery программатором-отладчиком ST-Link. Для этого на вкладках «Debug» и «Utilites» выбираем «ST-Link Debugger».
На первой вкладке переключаемся на «Use» в правом верхнем углу и выбираем из списка:
На второй вкладке убираем галочку с «Use Debug Driver» и выбираем в разморозившемся выпадающем списке:
Переходим к настройки программатора по кнопке «Setting». Первым делом в новом открывшемся окне в разделе «Debug Adapter» переключаем «Port» с «JTAG» на «SW».
А на вкладке «Flash Download» нужно добавить используемый контроллер. Жмём на «Add», в появившемся окне выбираем «STM32F10x Med-density Flash».
Теперь мы можем открыть основной файл проекта «main.c», и приступить к написанию нашей программы:
#include "stm32f10x.h" GPIO_InitTypeDef GPIO_InitStructure; void init() // инициализация { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; // использовать выводы PC8 и PC9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // на выход GPIO_Init(GPIOC, &GPIO_InitStructure); } void delay(unsigned long p) // задержка { unsigned long i; for(i=0;i<p ;i++); } int main(void) { init(); GPIO_SetBits(GPIOC, GPIO_Pin_9); // включить зеленый светодиод, подключенный к PC9 while(1) // в бесконечном цикле крутиться программа { GPIO_SetBits(GPIOC, GPIO_Pin_8); // включить синий светодиод, подключенный к Led PC8 delay(2000000); GPIO_ResetBits(GPIOC, GPIO_Pin_8);// погасить синий светодиод, подключенный к Led PC8 delay(2000000); } }
И он, наконец, сможет скомпилироваться порект, для этого нажимаем F7.
Ход успешной компиляции:
Теперь можно залить проект в контроллер. Для этого можно воспользоваться главным меню Flash->Download или нажать ту же кнопку на панели инструментов.
Наблюдаем за успешным ходом прошивки:
После завершения прошивки нажимаем «Reset» на плате и наблюдаем за горением зеленого и миганием синего светодиода. Это означает, что вся работа (проделанная в 20 шагов) проделана правильно, контроллер прошит и работает.
Alex_EXE | 08.08.2013 | STM32 |
Serg пишет 09.08.2013 в 11:51 #
Здравствуйте!
Расскажите пожалуйста, будет ли это цикл статей от простого к сложному или же просто пара статей о светодиодах?
Alex_EXE пишет 10.08.2013 в 01:57 #
Думаю сделать цикл статей, но что выйдет, увидим.
Сергей пишет 05.10.2013 в 00:23 #
привет. не подскажешь что это за предупреждение ?
http://diymicro.ru/wp-content/uploads/2013/10/Безымянный.jpg
Alex_EXE пишет 05.10.2013 в 01:11 #
Добавь пустую строку в конце кода.
Сергей пишет 05.10.2013 в 01:41 #
помогло, просто слов нет
Okzim пишет 24.01.2014 в 11:06 #
Статья очень интересная.
Возник только один вопрос будет у вас статья по STM8 ?
STM8S103F стоит 1$ .И паять ее легче ,чем STM32.
Alex_EXE пишет 27.01.2014 в 00:54 #
STM8 изучать самостоятельно не собираюсь и соответственно писать о нём не буду. На ту нишу у меня есть пики, хоть они и подороже, но они уже освоены. STM32 это уже другой уровень — ARM, как 8-ми битников начало переставать хватать начал переходить на более высокую ступень.
Почему STM32 — доступность и растущая популярность, соответственно много наработок, почему пики — так сложилось.
Алексей пишет 21.03.2016 в 21:45 #
спасибо большое! все получилось с первого раза! только вот у меня микроконтроллер был STM32F030F4P6. Там названия регистров отличаются, там разобраться легко, что да как. Библиотека вся хорошо читаемая.
Александр пишет 15.09.2018 в 16:45 #
Почему то Keil вначале не предлагает создать инициализирующий файл. Версия Keil 5 uVision
Alex_EXE пишет 23.09.2018 в 23:50 #
По Keil подсказать нечего не могу, т.к. на нем дальше hello world и ещё пары вещей, описанных на сайте, не ущел. Перешел на CoCoox.
Александр пишет 29.09.2018 в 20:10 #
А где CoCoox скачать? Официальный сайт не открывается.
Alex_EXE пишет 22.10.2018 в 01:35 #
4 октября отправил Вам письмо с дистрибутивом на указанную почту.