Мы начинаем написание цикла статей по разработке под микроконтроллеры (далее МК) фирмы Миландр, а более конкретно - под микроконтроллер К1986ВЕ92QI, являющихся одним из самых дешевых и производительных в линейке данной фирмы.
В качестве платы для разработки и отладки мы будем использовать плату LDM-K1986BE92QI. Для изучения микроконтроллера придется затратить человеко-месяцы труда, в сравнении с которыми стоимость платы невелика.
В качестве среды разработки мы будем использовать Keil. По состоянию на 2024 год сайт недоступен для российских пользователей, но пытливый ум всегда найдет возможность.
Ниже будет представлена последовательность действий, в виде алгоритма, для начала работы с микроконтроллером К1986ВЕ92QI фирмы Миландр.
1) Заходим на страницу производителя и продавца отладочной платы LDM-K1986BE92QI и на закладке «Документация» скачиваем все файлы:
1.1) Руководство по эксплуатации отладочной платы LDM-K1986BE92QI;
1.2) Схема отладочной платы LDM-K1986BE92QI;
1.3) Спецификация микроконтроллеров серии 1986ВЕ9х и К1986ВЕ9х;
1.4) USB-UART загрузчик. Данная программа позволит программировать отладочную плату LDM-K1986BE92QI без внешнего программатора, а также может быть полезна если вы завесили ПО микроконтроллера так, что порты JTAG или SWD недоступны (да это возможно если писать в их пины не нули, смотрим второй абзац пункта 16 спецификации микроконтроллеров серии 1986ВЕ9х и К1986ВЕ9х;
1.5) Драйвер USB-UART, нужен для определения подключенного USB-A отладочной платы LDM-K1986BE92QI-H как COM-порта в ОС Windows;
1.6) Примеры проектов от производителя МК;
1.7) Полезное ПО от AntonAS Milandr_PLLv2.2 содержит кодогенераторы периферии для микроконтроллера Миландр MDR32F9Q2I (K1986BE92QI). Мне не удалось спокойно открыть современными браузерами без проблем приложенные файлы, ругалось на безопасность. Для меня решением проблемы стало запуск данных файлов с отключенной безопасностью браузера Google Chrome, который я использую. Для этого нужно разместить в распакованном архиве, рядом с *.html файлами, bat файл со следующим содержимым и запускать через это bat файл:
start chrome "%~dp0index.HTML" --user-data-dir="%%~fQ" --disable-web-security
1.8) Конвертер BMP to HEX array позволяющий из bmp файла размером 64х128 пикселов создать код масива на языке Си для вывода картинки на ЖКИ индикатор MT-12864J-2FLB-3V0, размещенный на отладочной плате. Со страницы индикатора также нужно скачать файлы. Данный конвертер мне показался «недостаточно хорош» и я написал свой конвертер с блэкджеком и плюшками, где изображение 128х64 размещается горизонтально и может быть не однобитовым и не монохромным. Также есть регулировка «контрастности» (выбор порога черный-белый пиксел) для не монохромных изображений.
2) Скачать и установить IDE Keil
2.1) Скачать и установить пакет «Software pack для Keil MDK 5 для МК К1986ВЕ92QI, К1986ВЕ1QI, К1901ВЦ1QI»
3) Создаем проект Keil
3.1) Запускаем Keil и создаем проект через меню 'Project->new uVision Project'. В появившемся диалоговом окне "Create New Project", в соответствии с рисунком 1, создаем папку и задаем имя для проекта, например test.
Рисунок 1. Диалоговое окно создания проекта Keil.
3.2) В появившемся диалоговом окне "Select Device for Target 'Target 1'...", в соответствии с рисунком 2, выбираем наш МК MDR32F9Q2I
Рисунок 2. Диалоговое окно выбора МК..
3.3) В появившемся диалоговом окне "Manage Run-Time Enviroment", в соответствии с рисунком 3, раскрываем вкладки слева "CMSIS" и "Device" и ставим галочки справа в пунктах "CMSIS-CORE for Cortex-M..." и "System Startup for MDR32F9Q2I".
Рисунок 3. Выбор используемых модулей в проекте Keil.
3.4) Откроется IDE с проектом. В соответствии с рисунком 4, раскрыть узел "Target 1" и выделив дочерний узел "Source Group 1" правым кликом мышки выбрать в контекстном меню "Add New Item to Group 'Source Group 1'..."
Рисунок 4. Добавление файла проект Keil.
3.5) В появившемся диалоговом окне, в соответствии с рисунком 5, выбрать тип файла "C File (.c)" и в поле "Name", задать имя файла, например main.
Рисунок 5. Добавление файла на языке Си в проект Keil.
3.6) В созданный файл вставляем содержимое минимального проекта
#include "MDR32F9Q2I.h"
#define PIN_LED 0 // Номер вывода светодиода
int main (void){
MDR_RST_CLK->PER_CLOCK |= (1 << 22); // Разрешение тактирования порта B (п.14.7.8)
// Инициализация вывода 0, порта B (PORTB_0) как выхода. К выводу подключен светодиод VD5.
MDR_PORTB->OE |= (1 << PIN_LED); // PORTB_0 - выход (п.16.1.2). Обязательно устанавливать в 1.
MDR_PORTB->ANALOG |= ((1 << PIN_LED)); // Режим работы PORTB_0 - цифровой (п.16.1.4) Обязательно устанавливать в 1.
MDR_PORTB->PWR |= (1 << PIN_LED * 2); // Включить передачик PORTB_0. Скорость фронта вывода - медленный (п.16.1.7). Обязательно устанавливать в 1, 2 или 3.
while(1){
for(int i = 0; i < 100000; i++){} // Задержка
MDR_PORTB->RXTX ^= (1 << PIN_LED); // Инвертировать значение 0-го бита порта B (п.16.1.1)
}
}
3.7) Компилируем проект через меню "Project->Build Target F7" или нажатием горячей клавиши F7. И вот первый результат! Проект должен собраться, возможно с кучей предупреждений которые мы уберем в дальнейшем.
4) Настраиваем Keil:
4.1) Для нормального отображения русских комментариев в тексте - в меню Edit -> Configuration -> Закладка "Editor" -> Encoding установить "Encode in UTF-8 without signature" или "Russian Windows-1251". Минус кодировки UTF-8 в том, что русские символы в коде будут двухбайтовые и это может затруднить разработку, а минус CP1251 в том, что русские символы в коде, в редакторе подчеркиваются как ошибочные. В общем, у меня установлена кодировка CP1251;
4.2) Для отображения комментарии в тексте с двойным слешем // без предупреждений и использования современного стиля и синтаксиса написания кода, в меню Project -> Options for Target 'Target 1'... (Alt+F7) -> Закладка "C/C++(AC6)" ->Language C установить "с11";
4.3) Для автоматического запуска контроллера после прошивки, без необходимости нажатия кнопки Reset на плате - в меню Project -> Options for Target 'Target 1'... (Alt+F7) -> Закладка "Debug" -> Кнопка "Settings" -> Закладка "Flash Download" -> Reset and Run установить галку;
4.4) Для программирования микроконтроллера Миландр программатором ST-Link, как это делаю я, необходимо в меню Project -> Options for Target 'Target 1'... (Alt+F7) -> Закладка "Debug" в выпадающем списке возле кнопки "Settings" установить "ST-Link Debugger";
4.5) Если при прошивке МК Keil будет выдавать ошибку "Error: Flash Download failed - Target DLL has been cancelled", проблема описана и решена по ссылке. Нужно скачать dll и заменить исходную C:\Keil_v5\ARM\STLink\ST-LINKIII-KEIL_SWO.dll;
4.6) Если необходимо будет при компиляции генерировать hex файл в меню Project -> Options for Target 'Target 1'... (Alt+F7) -> Закладка "Output" установить галку "Create HEX File";
4.7) Если при прошивке МК Keil будет выдавать предупреждения о старой версии ST-LINK - в меню Project -> Options for Target 'Target 1'... (Alt+F7) -> Закладка "Debug" -> Кнопка "Settings" -> Check version on start снять галку.