66666

[i] Начало работы с платами MDR1215LGI-Micro и MDR1219LGI-Micro

Дата последнего изменения: 28.08.2026 14:32:55


1. Особенности работы

Диапазон напряжения питания микроконтроллеров MDR1215LGI и MDR1219LGI в предельно-допустимом режиме работы составляет от 1,8 до 3,6 В. Максимально допустимое напряжение высокого уровня на входах GPIO ограничено текущим напряжением питания и не должно превышать верхнюю границу этого же диапазона, то есть 3,6 В.
На платах установлен конденсатор по питанию микроконтроллера и сам микроконтроллер. Также предусмотрены посадочные места для монтажа вилок PLS.

Распиновка платы MDR1215LGI-Micro
Распиновка платы MDR1219LGI-Micro

Программирование микроконтроллера выполняется через интерфейс JTAG. Поддерживаются следующие программаторы:
  • SEGGER J-Link
  • Программаторы на базе микросхемы FT2232H
  • I-Jet (только при работе в среде IAR for RISC-V)
(см. [i] Совместимость микроконтроллеров со средами разработки и программаторами)

Для подключения программатора к интерфейсу JTAG микроконтроллера необходимо соединить выводы программатора с соответствующими выводами микроконтроллера, как приведено в таблицах 1 и 2.

Таблица 1 – Расположение выводов интерфейса JTAG микроконтроллера MDR1215LGI
Обозначение вывода программатора Номер вывода микроконтроллера
 TMS  1
 TCK  2
 TDI  3
 GND  4
 TDO  7
 VDD  8

Таблица 2 – Расположение выводов интерфейса JTAG микроконтроллера MDR1219LGI
Обозначение вывода программатора Номер вывода микроконтроллера
 TDI  3
 VDD  5
 TCK  6
 TMS  7
 TDO  8
 GND  9


Подключение программатора должно выполняться согласно пункту 28.3 «Подключение адаптера JTAG к микросхеме» спецификации ТСКЯ.431296.033СП на микросхемы MDR1215LGI, MDR1219LGI, которая прикреплена в конце статьи. При подключении отладчиком к микросхеме по JTAG выводы микросхемы в функции JTAG должны быть стандартно доопределены до высокого уровня внешними резисторами доопределения от 4,7 кОм до 10 кОм с учетом того, чтобы эти подтяжки не влияли на работу системы.

Пример подключения программатора к микроконтроллеру MDR1215LGI приведен на рисунке 1.

Рисунок 1 – Подключение программатора к микроконтроллеру MDR1215LGI

Пример подключения программатора к микроконтроллеру MDR1219LGI приведен на рисунке 2.

Рисунок 2 – Подключение программатора к микроконтроллеру MDR1219LGI

2. Создание проекта

Микроконтроллеры MDR1215LGI и MDR1219LGI во многом идентичны микроконтроллеру MDR1206FI, поэтому библиотечные файлы, примеры и шаблоны проектов для микроконтроллера MDR1206FI подойдут и для микроконтроллеров MDR1215LGI, MDR1219LGI при учете особенностей, описанных далее.

Информация из статей [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IDE Eclipse, [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IAR EW for RISC-V и [i] Создание проекта для МК MDR1206FI, MDR1206AFI, К1986ВК025 в Visual Studio Code касательно микросхем MDR1206FI по части установки ПО и настройки проекта также актуальна для MDR1215LGI и MDR1219LGI.

Основные отличия относительно MDR1206FI, на которые стоит обратить внимание:

  • Загрузочная программа для микросхем MDR1206(A)FI к микросхемам MDR1215LGI и MDR1219LGI не применима. Для этих микросхем необходимо использовать отдельную загрузочную программу

  • В загрузочной программе для микроконтроллера MDR1215LGI, некоторые выводы GPIO, не выведенные в корпусе, настраиваются как технологические. Перенастраивать данные технологические выводы GPIO нельзя, что необходимо предусмотреть в основном ПО. В качестве технологического вывода выступает, например, PD11, настраиваемый как цифровой выход в функции MODE=00 с состоянием высокого уровня

  • Важно: следует использовать только те выводы, которые разведены в данном корпусе: для MDR1215LGI это PA[9:6], PD5, PD7, для MDR1219LGI это PA0, PA3, PA[11:5]. Неиспользуемые в микросхеме MDR1215LGI выводы GPIO должны маскироваться, а настройку других портов производить не допускается. Например, вывод PD12 микросхемы MDR1215LGI подключен к питанию, вывод PC3 подключен к земле, и их настройка на выход может привести к выходу микросхемы из строя. Помимо этого, разварка кристалла может изменяться (без изменения доступного функционала) для повышения надежности. 

  • Ограничение на использование только разведенных в корпусе выводов применимо и для специальных выводов, таких как SW (настройка данного функционал в BKP не приведет к выводу микросхемы из строя, но не имеет смысла. Помимо этого, значения WAKEUP3-WAKEUP1 всегда равны 0). 

  • Вывод nRESET доопределен до высокого уровня внутри корпуса. Из-за крайне ограниченного количества выводов GPIO в загрузочной программе отсутствует выбор режима загрузки. При запуске загрузочная программа после необходимых настроек передает управление в основную Flash-память. То есть записываемое программное обеспечение начинает работу сразу при подаче питания и, если каким-то образом нарушается доступ по JTAG (например, переопределение функций выводов GPIO, совмещенных с JTAG, или неправильно настроенное тактирование (см. [i] МК не определяется по интерфейсу JTAG/SWD. Восстановление работы МК), то восстановить доступ к JTAG будет или крайне затруднительно, или невозможно. Поэтому для предосторожности в основной программе нужно первыми инструкциями ввести задержку и внимательно настраивать выводы GPIO.

  • Выводы PA3, PA5, PA7 и SAR_AIN1 в микроконтроллере MDR1219LGI объединены внутри корпуса. Это накладывает ограничение на их использование. Если один из выводов PA3, PA5, PA7 настроен как выход, остальные два обязательно должны работать в режиме входа. Использование двух и более из этих выводов одновременно в режиме выхода может привести к короткому замыканию и выходу микросхемы из строя, например, если на один вывод подана логическая единица, а на другой – логический ноль. Также при настройке любого из этих выводов на выход измеряемое АЦП напряжение будет определяться уровнем, формируемым данным выводом GPIO.

Ниже приведены примеры кода проектов для MDR1215LGI и MDR1219LGI (версия SPL 1.5.0 от 01.07.2025). Оба примера реализуют переключение состояния двух выводов. В исходном коде номера выводов заданы определениями GPIO_PIN_1 и GPIO_PIN_2, а GPIO_PORT и GPIO_PORT_CLK определяют используемый порт GPIO и его тактирование соответственно.

Пример кода проекта для MDR1215LGI.
/* Includes ------------------------------------------------------------------*/
#include "MDR32VF0xI_config.h"
#include "MDR32VF0xI_rst_clk.h"
#include "MDR32VF0xI_port.h"

/* Private define ------------------------------------------------------------*/
#define GPIO_PORT MDR_PORTD
#define GPIO_PORT_CLK RST_CLK_PCLK_PORTD
#define GPIO_PIN_1 PORT_PIN_5
#define GPIO_PIN_2 PORT_PIN_7

/* Private variables ---------------------------------------------------------*/
PORT_InitTypeDef PORT_InitStructure;

void Delay(uint32_t Ticks) {
for (uint32_t i = 0; i < Ticks; i++) { __NOP(); }
}

int main(void)

{
    RST_CLK_DeInit();
    for (uint32_t i = 0; i < 100000; i++) {}
    RST_CLK_HCLK_ClkSelection(RST_CLK_CPU_HCLK_CLK_SRC_HSI);
    RST_CLK_PCLKCmd(GPIO_PORT_CLK, ENABLE);
    PORT_StructInit(&PORT_InitStructure);


    PORT_InitStructure.PORT_Pin = (GPIO_PIN_1 | GPIO_PIN_2);
    PORT_InitStructure.PORT_Direction = PORT_DIRECTION_OUTPUT;
    PORT_InitStructure.PORT_Function = PORT_FUNCTION_PORT;
    PORT_InitStructure.PORT_Mode = PORT_MODE_DIGITAL;
    PORT_InitStructure.PORT_Power = PORT_POWER_NOMINAL_UPTO_2mA;
    PORT_Init(GPIO_PORT, &PORT_InitStructure);
    PORT_SetBits(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));

    while (1) {
        Delay(100);
        PORT_ToggleBit(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));
    }
}


Осциллограмма сигналов, снятых с выводов PD5 и PD7 микроконтроллера MDR1215LGI во время выполнения приведённого примера, представлена на рисунке 3.

Рисунок 3 – Осциллограмма сигналов на выводах PD5 и PD7 микроконтроллера MDR1215LGI при выполнении программы переключения состояний GPIO

Пример кода проекта для MDR1219LGI.
Данный пример полностью аналогичен предыдущему, за исключением использования выводов PA10 и PA11 вместо PD5 и PD7.
/* Includes ------------------------------------------------------------------*/
#include "MDR32VF0xI_config.h"
#include "MDR32VF0xI_rst_clk.h"
#include "MDR32VF0xI_port.h"

/* Private define ------------------------------------------------------------*/
#define GPIO_PORT MDR_PORTA
#define GPIO_PORT_CLK RST_CLK_PCLK_PORTA
#define GPIO_PIN_1 PORT_PIN_10
#define GPIO_PIN_2 PORT_PIN_11

/* Private variables ---------------------------------------------------------*/
PORT_InitTypeDef PORT_InitStructure;

void Delay(uint32_t Ticks) {
for (uint32_t i = 0; i < Ticks; i++) { __NOP(); }
}

int main(void) {
    RST_CLK_DeInit();
    for (uint32_t i = 0; i < 100000; i++) {}
    RST_CLK_HCLK_ClkSelection(RST_CLK_CPU_HCLK_CLK_SRC_HSI);
    RST_CLK_PCLKCmd(GPIO_PORT_CLK, ENABLE);
    PORT_StructInit(&PORT_InitStructure);

    PORT_InitStructure.PORT_Pin = (GPIO_PIN_1 | GPIO_PIN_2);
    PORT_InitStructure.PORT_Direction = PORT_DIRECTION_OUTPUT;
    PORT_InitStructure.PORT_Function = PORT_FUNCTION_PORT;
    PORT_InitStructure.PORT_Mode = PORT_MODE_DIGITAL;
    PORT_InitStructure.PORT_Power = PORT_POWER_NOMINAL_UPTO_2mA;
    PORT_Init(GPIO_PORT, &PORT_InitStructure);
    PORT_SetBits(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));

    while (1) {
        Delay(100);
        PORT_ToggleBit(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));
    }
}


3. Использование выводов GPIO, совмещенных с JTAG

При разрешенной работе порта JTAG количество доступных для использования выводов GPIO у микросхем MDR1215LGI ограничено двумя выводами, а у MDR1219LGI - тремя. Отключение JTAG позволяет освободить еще 4 вывода. Аппаратное отключение JTAG осуществляется с помощью сброса в 0 бита JTAG_ON в регистре BKP_LDO батарейного домена. Для записи в данный бит предварительно необходимо разрешить тактирование блока BKP в регистре PER2_CLOCK контроллера тактовой частоты и записать ключ 0x8555AAA1 в регистр BKP_WPR батарейного домена. После отключения JTAG выводы, совмещенные с JTAG, можно настраивать в требуемую функцию. 

Но важно понимать, что отключение JTAG программой, исполняемой из Flash-памяти, может привести к полной потере возможности подключения отладчика в дальнейшем. Поэтому перед отключением JTAG для возможности подключения к микроконтроллеру отладчиком в начале основной программы необходимо выставить задержку (например, 1 секунду), чтобы был временной промежуток между подачей питания и отключением JTAG.

Сохранить статью в PDF

Документация

Программное обеспечение

Software pack для Keil MDK 5 + Standard Peripherals Library
Software pack для Keil MDK 5 + Standard Peripherals Library
Была ли статья полезной?