# Cube IDE для начинающих

Далее следует туториал по созданию проекта и базовым функциям IDE, а также основам программирования микроконтроллеров и, наконец, работе с простым мотором.

{% hint style="info" %}
Предполагается, что вы уже установили CubeIDE по инструкции из предыдущей статьи.
{% endhint %}

### Создание нового проекта

В среде CubeIDE выбираем **File -> New -> STM32Project**, выбираем микроконтроллер STM32G474RET6, нажимаем **Next**. В открывшемся окне задаем имя проекта, остальное – по умолчанию. Далее **Finish** и CubeIDE создаст проект и откроет окно (файл \*.ioc ) с изображением микросхемы контроллера.

<details>

<summary>Создание нового проекта из существующего</summary>

Тот же результат можно получить, если создавать новый проект, используя файл **\*.ioc** существующего проекта. В среде CubeIDE выбираем **File -> New -> STM32Project from an existing …**

</details>

## Мигание светодиодом

### Настройка микроконтроллера

Количество выводов микросхемы существенно меньше количества входов-выходов всех его периферийных модулей. Поэтому большинство выводов многофункциональны. В каждом конкретном исполнении выводы приобретают конкретные функции и должны быть правильно сконфигурированы.

Ниже приведена конфигурация для нашего случая.

<figure><img src="https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2FHSUOFMNZeJdEIAokRsys%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202023-09-27%20%D0%B2%2019.13.18.png?alt=media&#x26;token=70c71ab7-f333-4266-8c62-748bec00719d" alt="" width="493"><figcaption></figcaption></figure>

Мы будем использовать два диода, LED1 и LED2. Соответственно, ножки `PD2` и `PA5` выставляем в `GPIO Output`.

Кроме того, мы будем использовать внешнее тактирование во всех проектах, каждый раз этот этап повторять в инструкциях не будем, но надо помнить, что это обязательно настроить. **System Core** **-> RCC -> High Speed Clock -> Crystal/Ceramic Resonator**.

<figure><img src="https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2FlrXFeg3xJV7R4Ja8auxI%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202023-09-27%20%D0%B2%2019.17.26.png?alt=media&#x26;token=2be86c50-8203-4652-a866-6a8606150391" alt="" width="442"><figcaption></figcaption></figure>

После настройки выводов и параметров периферии нажимаем кнопку ![](https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2F5bIJw5f7045FiMJ12Se9%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=cfcab46f-46bc-4b52-9af6-fe8e76778e2b). Во вкладке **Project Explorer** будет создана файловая структура проекта, содержащая собственно программу в папке Src с набором файлов, из которых будем использовать только два: **main.c** и **stm32g4xx\_it.c**. Последний содержит обработчики прерываний. В папке проекта **Drivers** содержатся библиотеки, нужные для работы с используемыми в проекте модулями. Подпапка **CMSIS** содержит описание структур данных, непосредственно связанное с аппаратной реализацией микроконтроллера, включая физические адреса регистров его периферийных модулей. В принципе, этого достаточно для написания собственной программы, однако требует значительного объема программирования. Проще использовать готовые библиотеки, содержащиеся в подпапке **STM32G4xx\_HAL\_Driver**.

### Компиляция и загрузка программы в микроконтроллер

Эти две операции осуществляются соответственно с помощью кнопок ![](https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2F7cVkMElMFj6ctPjrngLT%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=ec8b6f20-9a5f-4f50-88f7-d3f14db0ad8b) и ![](https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2FvPMlWkdQHzxhUr3Rq128%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=c12c971b-3516-4e3e-8028-172508e85eb4). Уже сейчас программу можно загрузить, но пока чтто она ничего не будет делать.

### Программирование

**CubeIDE** сгенерировал нам весь необходимый базовый код. Откроем **Code -> Src -> main.c**. Можно заметить, что по всему файлу разбросаны блоки `USER CODE BEGIN / USER CODE END`. Писать код можно только внутри них! Все остальное удалиться при повторной генерации кода для проекта, что происходит при любом изменении параметров в графическом редакторе. Найдем участок:

```c
/* USER CODE BEGIN WHILE */
  while (1)
  {
/* USER CODE END WHILE */
```

И добавим туда следующее:

```c
/* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_Delay(1000);
    HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
/* USER CODE END WHILE */
```

Все! Если залить этот код, то диод будет мигать с периодом в секунду.
