Электроника и программирование

Первый запуск MIK32 в PlatformIO. Мигание светодиодом

Обновлено 12.04.2025

Рассмотрим процесс программирования в среде Visual Studio Code (далее - VS Code) с расширением PlatformIO. Как и в предыдущей статье, рассмотрим работу с тремя программаторами:

1 Программатор BlueProg.

2 Программатор OpenOCD на FT2232 c 20-контактным кабелем JTAG.

3 Программатор J-Link.

После установки VS Code нужно повторить шаги, описанные здесь в разделе "Установка распаковкой архива".

Затем скачаем пример проекта Blink отсюда, переименуем папку, например, в mik32_test, и добавим в VS Code, нажав File->Add Folder to Workspace...

Открытие проекта

Из панели Explorer откроем файл main.c:

Открытие файла main.c

Заменим код файла main.c кодом из предыдущей статьи:

#include <mik32_memory_map.h>
#include <pad_config.h>
#include <gpio.h>
#include <power_manager.h>
#include <wakeup.h>

/*
* Данный пример демонстрирует работу с GPIO и PAD_CONFIG.
* В примере настраивается вывод, который подключенный к светодиоду, в режим GPIO.
* Функция ledButton, которая считывает состояние кнопки и зажигает светодиод.
*
*/

#define PIN_LED 9	// Светодиод управляется выводом PORT_0_9
#define PIN_BUTTON 10	// Кнопка управляет сигналом на выводе PORT_0_10

void InitClock()
{
	PM->CLK_APB_P_SET |= PM_CLOCK_APB_P_GPIO_0_M; // Включение тактирования GPIO
	PM->CLK_APB_M_SET |= PM_CLOCK_APB_M_PAD_CONFIG_M | PM_CLOCK_APB_M_PM_M;// Включение тактирования блока для смены режима выводов
}

void ledBlink()
{
	for (volatile int i = 0; i < 100000; i++); // Задержка
	GPIO_0->OUTPUT ^= 1 << PIN_LED; // Установка сигнала вывода 9 порта 0 в противоположный уровень
}

void ledButton()
{
	if ((GPIO_0->STATE & (1 << PIN_BUTTON))==0) // Когда кнопка нажата, на выводе микроконтроллера PIN_BUTTON низкий уровень
	{
		GPIO_0->OUTPUT |= 1 << PIN_LED; // Установка сигнала вывода 9 порта 0 в высокий уровень
	}
}

int main()
{
	InitClock(); // Включение тактирования GPIO


	PAD_CONFIG->PORT_0_CFG &= ~(0b11 << (2 * PIN_LED));	// Установка вывода 9 порта 0 в режим GPIO
	PAD_CONFIG->PORT_0_CFG &= ~(0b11 << (2 * PIN_BUTTON)); // Установка вывода 10 порта 0 в режим GPIO

	GPIO_0->DIRECTION_OUT = 1 << PIN_LED;	// Установка направления вывода 9 порта 0 на выход
	GPIO_0->DIRECTION_IN = 1 << PIN_BUTTON; // Установка направления вывода 10 порта 0 на вход

	while (1)
	{
		ledBlink(); /* Светодиод мигает */
		ledButton(); /* Светодиод зажигается при нажатой кнопке */
	}
}

Далее настраиваем среду PlatformIO для работы с нужным программатором:

Необходимо установить драйвер программатора с помощью программы Zadig. Для этого после запуска программы нужно нажать Options -> List All Devices, выбрать в выпадающем списке устройство с названием BlueProg-JTAG (Interface 0), и установить для него драйвер WinUSB:

Интерфейс приложения Zadig

Копируем файл {username}/.platformio/packages/tool-mik32-uploader/openocd-scripts/interface/start-link.cfg в эту же папку, и переименовываем его в BlueProg.cfg:

Копирование файла start-link.cfg

Теперь в блокноте заменяем текст в файле BlueProg.cfg на следующий:

# SPDX-License-Identifier: MIT

adapter driver ftdi
ftdi vid_pid 0x16c0 0x05dc
ftdi channel 0

transport select jtag
ftdi layout_signal nTRST -data 0x0010
ftdi layout_signal LED -data 0x0020
ftdi layout_signal nSRST -noe 0x0040

В файле platformio.ini впишем запуск программы из памяти RAM и программатор BlueProg:

Файл platformio.ini

Необходимо установить драйвер программатора с помощью программы Zadig. Для этого после запуска программы нужно нажать Options -> List All Devices, выбрать в выпадающем списке устройство с названием USB <-> Serial Converter (Interface 1), и установить для него драйвер WinUSB:

Интерфейс приложения Zadig

В файле platformio.ini впишем запуск программы из памяти RAM и программатор mikron-link, в котором также применяется FT2232:

Файл platformio.ini

На этом настройка программатора завершена!

Необходимо установить драйвер программатора с помощью программы Zadig. Для этого после запуска программы нужно нажать Options -> List All Devices, выбрать в выпадающем списке устройство с названием BULK interface (Interface 2), и установить для него драйвер WinUSB:

Интерфейс приложения Zadig

В файле platformio.ini впишем запуск программы из памяти RAM и программатор J-Link:

Файл platformio.ini

Собираем проект, нажав Build на вкладке PLATFORMIO:

Собираем проект

На отладочной плате для запуска из RAM перемычка на соединителе "BOOT MODE" должна быть установлена в соответствующее положение. После изменения положения перемычки подаём питание на плату, либо нажимаем кнопку Reset, если питание уже подано.

И наконец, прошиваем плату, нажав Upload на вкладке PLATFORMIO:

Загружаем прошивку в плату

После этого, как и в предыдущей статье, светодиод USER LED на плате начинает мигать, а при зажатой кнопке USER BTN светится постоянно.

Теперь для перехода в режим отладки можно нажать Run->Start Debugging или F5.

Как видим, код программы для MIK32 IDE и PlatformIO в VS Code полностью одинаков, поэтому выбор среды программирования сводится к личным предпочтениям к той или иной среде. В дальнейших статьях программирование будет вестись в MIK32 IDE, но код также будет работать и в PlatformIO.

Наверх Оглавление Следующая статья