STM Урок 53. System Workbench. Создаём новый проект



Урок 53

System Workbench
Создаём новый проект

 

Сегодня мы продолжим работу с бесплатной средой программирования System Workbench for STM32.

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

Для примера возьмём плату STM32F767-Nucleo. С данной платой мы уже знакомы из обзора.

Ну что ж, начнём!

Запустим MS Cube, создадим проект, выбрав наш микроконтроллер (нажмите на картинку для увеличения размера)

 

image00_0500

 

В RCC выбираем вот такую опцию

 

image02

 

А в SYS вот такие

 

image01

 

TIM1 выбран ввиду того, что что на Systick будет ругаться генератор кода, если мы будем использовать FreeRTOS.

Мигать мы будем сразу десятью светодиодами, как нельзя кстати оказалась под рукой светодиодная матрица. Для удобства подключения мы будем использовать порты в разъёме, расположенные рядом с общим проводом GND. Не забываем ни в коем случае про токоограничивающие резисторы. У меня на 680 ом

 

image04

 

Включим данные ножки на выход

 

image03

 

 

Перейдём в Clock Configuration, подключим там резонатор и включим всё на максимум (нажмите на картинку для увеличения размера)

 

image06_0500

 

Зайдём в Project -> Settings и настроим наш будущий генерируемый проект, немного добавив значение стека и кучи

 

image05

 

У вас будет, соответственно, другой путь. Нажмём «ОК».

Сгенерируем проект и закроем диалог, так как вход в проект в случае использования WB (я так буду в дальнейшем для экономии времени и места называть System WorkBench) невозможен

 

image08

 

Запустим System Workbench. Щёлкнем правой кнопкой мыши в левом окне и выберем пункт «Import»

 

image07

 

Выделим «Existing Project into Workspace» и нажмём «Next»

 

image11

 

 

В «Select root Directory» через обзор выберем папку со вновь созданным проектом. Проект должен будет появиться в списке и пометиться галкой. Жмём «Finish»

 

image09

 

Откроем слева дерево проекта, найдём там файл main.c и поставим туда фокус ввода (кликнем мышкой, чтобы установился курсор). Это помогает компилятору в случае наличия в дереве проектов в дереве проектов простым способом понять, что данный проект для него является текущим и ему работать именно с ним.

Попробуем скомпилировать проект. Для этого выберем в меню Project -> Build Project. Если проект нормально соберётся, то мы увидим внизу вот такую картину

 

image10

 

 Если мы увидим ошибку в виде ругательства на FPU, то у нас скорей всего не обновлён Workbench. В этом случае лучше ничего не править и не выдумывать, а просто его обновить через пункт меню «Help -> Check for Updates».

Теперь попробуем зайти в отладку. Первый раз всё-таки лучше запускать исполнение именно так. Если будут проблемы, то надо удалить в свойствах проекта все конфигурации отладки. Если появится диалог с выбором программатора, то нужно будет его выбрать

 

image12

 

Ну а дальше всё, как на прошлом занятии.

Теперь в main.h для удобства добавим макросы для наших светодиодов. Я вставлю из заранее заготовленного файла macro.txt

 

/* USER CODE BEGIN Includes */

#define LED01 GPIO_PIN_5

#define LED02 GPIO_PIN_6

#define LED03 GPIO_PIN_7

#define LED04 GPIO_PIN_14

#define LED05 GPIO_PIN_15

#define LED06 GPIO_PIN_12

#define LED07 GPIO_PIN_13

#define LED08 GPIO_PIN_9

#define LED09 GPIO_PIN_11

#define LED10 GPIO_PIN_14

#define LED01PORT GPIOA

#define LED02PORT GPIOA

#define LED03PORT GPIOA

#define LED04PORT GPIOD

#define LED05PORT GPIOD

#define LED06PORT GPIOF

#define LED07PORT GPIOF

#define LED08PORT GPIOE

#define LED09PORT GPIOE

#define LED10PORT GPIOF

#define LED01SET() HAL_GPIO_WritePin(LED01PORT, LED01, GPIO_PIN_SET)

#define LED02SET() HAL_GPIO_WritePin(LED02PORT, LED02, GPIO_PIN_SET)

#define LED03SET() HAL_GPIO_WritePin(LED03PORT, LED03, GPIO_PIN_SET)

#define LED04SET() HAL_GPIO_WritePin(LED04PORT, LED04, GPIO_PIN_SET)

#define LED05SET() HAL_GPIO_WritePin(LED05PORT, LED05, GPIO_PIN_SET)

#define LED06SET() HAL_GPIO_WritePin(LED06PORT, LED06, GPIO_PIN_SET)

#define LED07SET() HAL_GPIO_WritePin(LED07PORT, LED07, GPIO_PIN_SET)

#define LED08SET() HAL_GPIO_WritePin(LED08PORT, LED08, GPIO_PIN_SET)

#define LED09SET() HAL_GPIO_WritePin(LED09PORT, LED09, GPIO_PIN_SET)

#define LED10SET() HAL_GPIO_WritePin(LED10PORT, LED10, GPIO_PIN_SET)

#define LED01RESET() HAL_GPIO_WritePin(LED01PORT, LED01, GPIO_PIN_RESET)

#define LED02RESET() HAL_GPIO_WritePin(LED02PORT, LED02, GPIO_PIN_RESET)

#define LED03RESET() HAL_GPIO_WritePin(LED03PORT, LED03, GPIO_PIN_RESET)

#define LED04RESET() HAL_GPIO_WritePin(LED04PORT, LED04, GPIO_PIN_RESET)

#define LED05RESET() HAL_GPIO_WritePin(LED05PORT, LED05, GPIO_PIN_RESET)

#define LED06RESET() HAL_GPIO_WritePin(LED06PORT, LED06, GPIO_PIN_RESET)

#define LED07RESET() HAL_GPIO_WritePin(LED07PORT, LED07, GPIO_PIN_RESET)

#define LED08RESET() HAL_GPIO_WritePin(LED08PORT, LED08, GPIO_PIN_RESET)

#define LED09RESET() HAL_GPIO_WritePin(LED09PORT, LED09, GPIO_PIN_RESET)

#define LED10RESET() HAL_GPIO_WritePin(LED10PORT, LED10, GPIO_PIN_RESET)

/* USER CODE END Includes */

 

Теперь вставим код бегущих огней в бесконечный цикл из того же файла macro.txt

 

  /* USER CODE BEGIN 3 */

          LED10RESET();

          LED01SET();

          HAL_Delay(100);

          LED01RESET();

          LED02SET();

          HAL_Delay(100);

          LED02RESET();

          LED03SET();

          HAL_Delay(100);

          LED03RESET();

          LED04SET();

          HAL_Delay(100);

          LED04RESET();

          LED05SET();

          HAL_Delay(100);

          LED05RESET();

          LED06SET();

          HAL_Delay(100);

          LED06RESET();

          LED07SET();

          HAL_Delay(100);

          LED07RESET();

          LED08SET();

          HAL_Delay(100);

          LED08RESET();

          LED09SET();

          HAL_Delay(100);

          LED09RESET();

          LED10SET();

          HAL_Delay(100);

  }

  /* USER CODE END 3 */

 

Теперь можно прошивать через обычную кнопку «Run».

 

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Купить отладочную плату можно здесь STM32F767ZI-Nucleo

 

 

Смотреть ВИДЕОУРОК

STM32 System Workbench. Создаём новый проект

 

2 комментария на “STM Урок 53. System Workbench. Создаём новый проект
  1. Антон:

    Здравствуйте, в самом начале статьи возник вопрос и не отпускал до самого конца: зачем в настройках RCC в кубе, вы выбрали BYPASS Clock Source?

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

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

*