# 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="/files/WG6A9DkfqkpNzuyGSlor" alt="" width="493"><figcaption></figcaption></figure>

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

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

<figure><img src="/files/qL2EEK84NdVhHHUa6CVy" alt="" width="442"><figcaption></figcaption></figure>

После настройки выводов и параметров периферии нажимаем кнопку ![](/files/eb6A7cmgoU0DfXTeTJtZ). Во вкладке **Project Explorer** будет создана файловая структура проекта, содержащая собственно программу в папке Src с набором файлов, из которых будем использовать только два: **main.c** и **stm32g4xx\_it.c**. Последний содержит обработчики прерываний. В папке проекта **Drivers** содержатся библиотеки, нужные для работы с используемыми в проекте модулями. Подпапка **CMSIS** содержит описание структур данных, непосредственно связанное с аппаратной реализацией микроконтроллера, включая физические адреса регистров его периферийных модулей. В принципе, этого достаточно для написания собственной программы, однако требует значительного объема программирования. Проще использовать готовые библиотеки, содержащиеся в подпапке **STM32G4xx\_HAL\_Driver**.

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

Эти две операции осуществляются соответственно с помощью кнопок ![](/files/7WkIP0AArkGecwiZ6yGS) и ![](/files/zyIEgNpl62FSFkn1o0hz). Уже сейчас программу можно загрузить, но пока чтто она ничего не будет делать.

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

**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 */
```

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://voltbro.gitbook.io/vbcores/tutorials/stm32-cube-ide/cube-ide-dlya-nachinayushikh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
