STM32. 2. Первый проект

STM32. 1. Вступление

Первой задачей после установки IDE, в качестве которой выбрали Keil, будет создание проекта, конфигурирование его и написание первой программы – «Hello World», т.е. помигаем светодиодом.

STM32vlDiscovery STM32 it’s work

STM32 it’s work

Внимание!
Все описанные действия приводятся для демонстрационной платы STM32vlDiscovery и установленному на ней микроконтроллеру STM32F100RB. Для других плат и контроллеров ниже описанное справедливо, но требуются поправки на используемый контроллер.

Подключаем демоплату, которую находит система, и запускаем среду.

Запуск Keil

И создаём новый проект: 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 файлов в нашем проекте:

Разрешаем создание 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» в правом верхнем углу и выбираем из списка:

Выбираем «ST-Link Debugger» в качестве программатора-отладчика

На второй вкладке убираем галочку с «Use Debug Driver» и выбираем в разморозившемся выпадающем списке:

Выбираем «ST-Link Debugger» в качестве программатора-отладчика

Переходим к настройки программатора по кнопке «Setting». Первым делом в новом открывшемся окне в разделе «Debug Adapter» переключаем «Port» с «JTAG» на «SW».

Переключаем «Port» с «JTAG» на «SW»

А на вкладке «Flash Download» нужно добавить используемый контроллер. Жмём на «Add», в появившемся окне выбираем «STM32F10x Med-density Flash».

На вкладке «Flash Download» добавляем используемый контроллер

Теперь мы можем открыть основной файл проекта «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 шагов) проделана правильно, контроллер прошит и работает.

STM32. 3. Порты ввода-вывода (GPIO)

12 комментариев »

Alex_EXE | 08.08.2013 | STM32 |

12 комментариев на « STM32. 2. Первый проект»

  1. Serg пишет 09.08.2013 в 11:51 #

    Здравствуйте!
    Расскажите пожалуйста, будет ли это цикл статей от простого к сложному или же просто пара статей о светодиодах?

  2. Alex_EXE пишет 10.08.2013 в 01:57 #

    Думаю сделать цикл статей, но что выйдет, увидим.

  3. Сергей пишет 05.10.2013 в 00:23 #

    привет. не подскажешь что это за предупреждение ?
    http://diymicro.ru/wp-content/uploads/2013/10/Безымянный.jpg

  4. Alex_EXE пишет 05.10.2013 в 01:11 #

    Добавь пустую строку в конце кода.

  5. Сергей пишет 05.10.2013 в 01:41 #

    помогло, просто слов нет

  6. Okzim пишет 24.01.2014 в 11:06 #

    Статья очень интересная.
    Возник только один вопрос будет у вас статья по STM8 ?
    STM8S103F стоит 1$ .И паять ее легче ,чем STM32.

  7. Alex_EXE пишет 27.01.2014 в 00:54 #

    STM8 изучать самостоятельно не собираюсь и соответственно писать о нём не буду. На ту нишу у меня есть пики, хоть они и подороже, но они уже освоены. STM32 это уже другой уровень — ARM, как 8-ми битников начало переставать хватать начал переходить на более высокую ступень.
    Почему STM32 — доступность и растущая популярность, соответственно много наработок, почему пики — так сложилось.

  8. Алексей пишет 21.03.2016 в 21:45 #

    спасибо большое! все получилось с первого раза! только вот у меня микроконтроллер был STM32F030F4P6. Там названия регистров отличаются, там разобраться легко, что да как. Библиотека вся хорошо читаемая.

  9. Александр пишет 15.09.2018 в 16:45 #

    Почему то Keil вначале не предлагает создать инициализирующий файл. Версия Keil 5 uVision

  10. Alex_EXE пишет 23.09.2018 в 23:50 #

    По Keil подсказать нечего не могу, т.к. на нем дальше hello world и ещё пары вещей, описанных на сайте, не ущел. Перешел на CoCoox.

  11. Александр пишет 29.09.2018 в 20:10 #

    А где CoCoox скачать? Официальный сайт не открывается.

  12. Alex_EXE пишет 22.10.2018 в 01:35 #

    4 октября отправил Вам письмо с дистрибутивом на указанную почту.

Комментарии RSS

Оставьте отзыв