1 Министерство образования и науки Российской Федерации ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ(ТУСУР) А.В.Пуговкин, И.А.Куан, Н.К. Ахметов, А.В. Бойченко Методическое пособие по программированию микроконтроллеров Учебно-методическое пособие Томск 2016
2 Оглавление
3 1.Описание микроконтроллеров 1.1.Общие сведения Микроконтро́ллер (англ. MicroControllerUnit, MCU) — микросхема, предназначенная для управления электроннымиустройствами. Типичный микроконтроллер сочетает на одном кристалле функции процессора и периферийных устройств, содержит ОЗУ и (или) ПЗУ. По сути, это однокристальный компьютер, способный выполнять относительно простые задачи. Отличается от микропроцессора интегрированными в микросхему устройствами ввода-вывода, таймерами и другими периферийными устройствами. При проектировании микроконтроллеров приходится соблюдать компромисс между размерами и стоимостью с одной стороны и гибкостью, и производительностью с другой. Для разных приложений оптимальное соотношение этих и других параметров может различаться очень сильно. Поэтому существует огромное количество типов микроконтроллеров, отличающихся архитектурой процессорного модуля, размером и типом встроенной памяти, набором периферийных устройств, типом корпуса и т. д. В отличие от обычных компьютерных микропроцессоров, в микроконтроллерах часто используется гарвардская архитектура памяти, то есть раздельное хранение данных и команд в ОЗУ и ПЗУсоответственно. Кроме ОЗУ, микроконтроллер может иметь встроенную энергонезависимую память для хранения программы и данных. Многие модели контроллеров вообще не имеют шин для подключения внешней памяти. Наиболее дешёвые типы памяти допускают лишь однократную запись, либо хранимая программа записывается в кристалл на этапе изготовления (конфигурацией набора технологических масок). Такие устройства подходят для массового производства в тех случаях, когда программа контроллера не будет обновляться. Другие модификации контроллеров обладают 4 возможностью многократной перезаписи программы в энергонезависимой памяти. Неполный список периферийных устройств, которые могут использоваться в микроконтроллерах, включает в себя: универсальные цифровые порты, которые можно настраивать как на ввод, так и на вывод; различные интерфейсы ввода-вывода, такие, как UART, I²C, SPI, CAN, USB, IEEE 1394, Ethernet; аналого-цифровые и цифро-аналоговые преобразователи; компараторы; широтно-импульсные модуляторы (ШИМ-контроллер); таймеры; контроллерыбесколлекторных двигателей, в том числе шаговых; контроллеры дисплеев и клавиатур; радиочастотные приемники и передатчики; массивы встроенной флеш-памяти; встроенные тактовый генератор и сторожевой таймер; 5 1.2. Описание микроконтроллера 1986ВЕ92У Разработка Центра Проектирования российской компании ЗАО "ПКК Миландр" – 32-разрядный RISC микроконтроллер. Микроконтроллеры серии 1986ВЕ9x, К1986ВЕ9х и К1986ВЕ92QI, К1986ВЕ92QC (далее 1986ВЕ9x), построенные на базе высокопроизводительного процессорного RISC ядра ARM Cortex-M3, содержат встроенную 128 Кбайт Flash-память программ и 32 Кбайта ОЗУ. Микроконтроллеры работают на тактовой частоте до 80 МГц. Периферия микроконтроллера включает контроллер USB интерфейса со встроенным аналоговым приемопередатчиком со скоростями передачи 12 Мбит/с (FullSpeed) и 1.5 Мбит/с (LowSpeed), стандартные интерфейсы UART, SPI и I2C, контроллер внешней системной шины, что позволяет работать с внешними микросхемами статического ОЗУ и ПЗУ, NAND Flash-памятью и другими внешними устройствами. Микроконтроллеры содержат три 16-разрядных таймера с 4 каналами схем захвата и ШИМ с функциями формирования «мертвой зоны» и аппаратной блокировки, а также системный 24-х разрядный таймер и два сторожевых таймера. Кроме того, в состав микроконтроллеров входят: два 12-разрядных высокоскоростных (до 0,5М выборок в сек) АЦП с возможностью оцифровки информации от 16 внешних каналов и от встроенных датчиков температуры и опорного напряжения; два 12-разрядных ЦАП; встроенный компаратор с тремя входами и внутренней шкалой напряжений.
6 Таблица 1.1 - Основные характеристики микроконтроллеров серии 1986ВЕ9х Таблица 1.2 - Сравнение микроконтроллеров STMи Миландр Stm32f0 1986ВЕ92У Корпус Н18.64-1В, LQFP64 UFQFN32, LQFP32, LQFP48,LQFP64 Ядро ARM Cortex-M0 ARM Cortex-M3 ПЗУ До 64кбайт Flash 128 Кбайт Flash ОЗУ 8кбайт 32 кбайт Питание 2...3.6В 2.2...3.6В Частота 48МГц 80 МГц Температура -40°С ….+105°С - 60°С...+125°С Коммуникационные интерфейсы I2C, USART, SPI, I2S,HDMI I2C, USART, SPI, CAN,HDMI
7 Рисунок 1.1 – Структурная блок-схема микроконтроллера 1986ВЕ9х
8 2.Демонстрационно-отладочная плата 1986EvBrd_64. Техническое описание. 2.1.Общие положения. Демонстрационно-отладочная плата 1986EvBrd_64 (далее 1986EvBrd_64) предназначена для: демонстрации функционирования и оценки производительности микроконтроллера 1986ВЕ92У и его основных периферийных модулей; демонстрации функционирования интерфейсных микросхем CAN и COM (RS-232) интерфейсов; отладки собственных проектов с применением установленных на плате блоков; программирования памяти программ микроконтроллеров 1986ВЕ92У. Для демонстрации функционирования, 1986EvBrd_64 подключается к: к COM порту персонального компьютера; к CAN или COM (RS-232) интерфейсу дополнительного внешнего устройства, например, аналогичной демонстрационно-отладочной плате 1986EvBrd_64; к источнику питания +5В. Для программирования памяти программ микроконтроллеров 1986ВЕ92У применяется внешний внутрисхемный программатор ULINK2 (Keil) или JEM-ARM-V2(Phyton). Питание 1986EvBrd_64 осуществляется от адаптера постоянного тока напряжением +5 вольт или от шины USB. Комплектация: печатная плата 1986EvBrd_64; образец микроконтроллера 1986ВЕ92У; нуль-модемный кабель для COM (RS-232) интерфейса; кабель USB-A/USB-B; 9 блок питания для отладочной платы диск с программным обеспечением, документацией, схемотехническими файлами и исходными кодами программ. 2.2. Состав платы Рисунок 2.1– Внешний вид демонстрационно-отладочной платы Установленные на плату компоненты показаны Рисунок 2.2, их описание содержится в Таблица 2.1.
10 Рисунок 2.2– Компоненты платы Таблица 2.1 - Описание компонентов платы 1986EvBrd_64 № на Рисунок 2.2 Описание компонентов платы 1986EvBrd_64 1 Контактирующее устройство для микроконтроллера 1986ВЕ92У. Микроконтроллер должен быть установлен в спутник-держатель. 2 Разъем Х27 портов A,E,F микроконтроллера. 3 Разъем карты памяти microSD. 4 Переключатели выбора режима загрузки. 5 Разъем USB-B.
11 № на Рисунок 2.2 Описание компонентов платы 1986EvBrd_64 6 Подстроечный резистор на 7-м канале АЦП. 7 Разъем BNC внешнего сигнала на 7-м канале АЦП. 8 Разъем BNC внешнего сигнала на 1-м входе компаратора 9 Разъем BNC выхода ЦАП1 10 Разъем Audio 3.5мм выхода ЦАП1 через звуковой усилитель 11 Батарея 3.0В 12 ЖК индикатор 128х64 13 Кнопка WAKEUP 14 Кнопки UP, DOWN, LEFT, RIGHT, SELECT 15 Кнопка RESET. 16 Разъем питания 5В. 17 Фильтр питания 18 Разъем RS-232. 19 Разъем CAN. 20 Приемо-передатчик RS-232 5559ИН4. 21 Приемо-передатчик CAN 5559ИН14. 22 Разъем отладки JTAG-B. 23 Набор светодиодов на порте C. 24 Разъем отладки JTAG-А. 25 Разъем Х26 портов B,C,D микроконтроллера. Таблица 2.2- Подключение портов микроконтроллера к разъемам Х26, Х27 Контакт Вывод МК/питание Х26 Х27 1,2 GND GND
12 Контакт Вывод МК/питание Х26 Х27 3,4 +3,3V +3,3V 5 PD0 PA6 6 PD1 PA7 7 PD2 PA4 8 PD3 PA5 9 PD4 PA2 10 PD5 PA3 11 PD6 PA0 12 - PA1 13 PB0 - 14 PB1 - 15 PB2 PE1 16 PB3 PE3 17 PB4 - 18 PB5 - 19 PB6 PF0 20 PB7 PF1 21 PB8 PF2 22 PB9 PF3 23 PB10 PF4 24 PC0 PF5 25 PC1 PF6 26 PC2 - 27,28 +5V +5V 29,30 GND GND Назначение установленных на плате конфигурационных перемычек:
13 POWER_SEL – выбор источника питания для платы между разъемом USB и внешним источником питания. SLEW RATE – выбор скорости передачи данных интерфейса CAN. CAN LOAD – выбор нагрузки линии CAN. ADC_INP_SEL – выбор источника сигнала для 7-го канала АЦП между подстроечным резистором “TRIM” и BNC разъемом “ADC”. COMP_INP_SEL – выбор источника сигнала на 1-м входе компаратора между BNC разъемом “COMP_INP” и выходом ЦАП1. DAC_OUT_SEL – выбор назначения сигнала с выхода ЦАП1 между BNC разъемом “DAC_OUT” и звуковым усилителем. Назначение установленных на плате переключателей и клавиш: SW1, SW2 – переключатели выбора режима работы. Таблица 2.3– Режимы работы SW2 SW1 Режим работы 0 0 Режим микроконтроллера, код исполняется из Flash памяти начиная с адреса 0х0800_0000. 0 1 Режим микроконтроллера, код исполняется из Flash памяти начиная с адреса 0х0800_0000, отладка через разъем JTAG_A. 1 0 Режим микропроцессора, код исполняется из внешней памяти начиная с адреса 0х1000_0000. 1 1 Режим микропроцессора, код исполняется из внешней памяти начиная с адреса 0х1000_0000, отладка через разъем JTAG_B. UP, DOWN, LEFT, RIGHT, SELECT – программируемые пользователем клавиши. RESET – сигнал аппаратного сброса МК.
14 WAKEUP – сигнал внешнего выхода из режима Standby.
15 3. Описание среды разработки Для программирования микроконтроллеров используется среда разработки KeiluVision. Немецкая фирма Keil разрабатывает и поставляет среды разработки для платформ: ARM, 8085, 251, C166, JTAG-отладчики и отладочные платы для них. Следует отметить, что компания Keil является официальным партнером ARM, а сама Keil-MDK является совместной разработкой Keil и ARM (https://www.arm.com). Так ядро IDE (компилятор, линковщик, ассемблер и ряд утилит) собственная разработка ARM, от Keil-а только оболочка (µVision IDE) и отладчик.
16 4. Установка и настройка KeiluVision 4.1. Установка В папке «Материалы для лабораторных работ» запустить файл «MDK520.EXE» (Рисунок 4.1). Рисунок 4.1 Рисунок 4.2 – Процесс установки
17 Рисунок 4.3 – Процесс установки После установки, запускаем Keil. При первом запуске запустится PackInstaller (Рисунок 4.4). Рисунок 4.4 - PackInstaller
18 Теперь добавим пакет поддержки контроллеров Миландр.Пакет находитсяв папке «Материалы для лабораторных работ» файл «mdr_spl_v1.4.1.rar». В PackInstaller жмем File ->Import и выбираем необходимый нам пакет (Рисунок 4.5). Рисунок 4.5 – Добавление пакета в PackInstaller После установки пакета во вкладке Devices должен появиться раздел Milandr, а во вкладке Packs раздел Keil::MDR1986ВЕхх.
19 Рисунок 4.6 – Результат добавления пакета Закрываем PackInstaller и запускаем Keil.
20 4.2. Программатор Для отладки, тестирования и программирования внутренней памяти микроконтроллеров необходим программатор-отладчик. Нами будет использоваться программатор MT-Link. Он является аналогом известного программатора J-Link. Программатор подключается к компьютеру с помощью USB-кабеля и использует интерфейсы для внутрисхемной отладки SWD – SerialWireDebug или JTAG. На плате предусмотрено два разъема для подключения программатора (JTAG-A и JTAG-B). где 1 – кабель USB; 2 - шлейф программатора; 3-программатор MT-Link. Рисунок 4.7 – Программатор MT-Link Установим драйвера программатора J-Link(MT-Link), запустив файлы «Setup_JLinkARM_V468a» и «MT-Link», которые находится в папке «Материалы для лабораторных работ». Программатор MT-Link и USB-кабель соедините междусобой. Подключите шлейф программатора к разъему JTAG-A, расположенному на плате.
21 Установите переключатели в положения: Таблица 4.1 – Положения переключателей SW1 SW2 SW3 1 0 0 Рисунок 4.8 – Подключение платы Подключаем MT-Link к компьютеру, в диспетчере устройств должно отобразиться устройство J-Linkdriver в разделе «Контроллеры USB» (Рисунок 4.9). Рисунок 4.9
22 4.3. Настройка Keil и запуск демонстрационного проекта Далее необходимо скопировать файл «MDR32F9x.FLM», который находится в папке «Материалы для лабораторных работ», в папку «Flash» где установлен KeiluVision (по умолчанию путь «C:\Keil_v5\ARM\Flash»). Запустим демонстрационную программу EV1986BE2Test.uvproj,которая находится в папке «Материалы для лабораторных работ->TestProgs». Переходимв Project -> «Options for Target» (Рисунок4.10). Рисунок 4.10 ВовкладкеDeviceнеобходимовыбратьпроцессорARMCortex-M3: Milandr>Milandr->Cortex-M3->MDR1986BE92. Рисунок 4.11 – Выбор процессора
23 Во вкладке Debug выбираем(устанавливаем) следующие параметры: -Use: J-LINK/J-TRACE Cortex - Load Application at Startup - RuntoMain(). Послечего (далее) нажмемкнопку «Settings». Рисунок 4.12 – Установка параметров во вкладке Debug В списке «PORT» нужно сменить JTAG на SW и выбрать частоту в списке рядом в 1MHz.
24 Рисунок 4.13 – Настройка J-Link Переходим во вкладку «FlashDownload» (Рисунок 4.14). Там ставим галочку «EraseFullChip»и затем нажмите кнопку Add. Рисунок 4.14 Из списка выбираем нужный микроконтроллер. Затем нажмите кнопку Add (Рисунок 4.15).
25 Рисунок 4.15 После добавления микроконтроллера он отражается в окне ProgrammingAlgorithm. Нажмите кнопку ОК (Рисунок 4.16). Рисунок 4.16 Теперь среда разработки KeiluVision готова для разработки и отладки приложений на микроконтроллере.
26 Теперь мы можем запустить демонстрационный проект. Для этого в главном меню выбираем Project->BuildTarget. Рисунок 4.17 – Построение проекта При успешной компиляции, в левом нижнем окне BuildOutput появится надпись «0 Error(s), 0 Warnings». Рисунок 4.18 – Окно BuildOutput Теперь необходимо загрузить программу в микроконтроллер выбрав Flash->Download. Рисунок 4.19 – Загрузка проекта
27 В результате успешной загрузкина LEDдисплее вы увидите следующее сообщение.Управляя клавишами, в меню можно включить различные тесты. Выберите тест светодиодов, установив курсор напротив LEDSнажмите кнопку SELECT. В результате светодиоды на порте Cзагораются. Рисунок 4.20 – Результат исполнения демонстрационного проекта
28 4.4. Создание нового проекта в среде KeiluVision ЗапуститесредуKeiluVision5, в строке главного менювыберите: Project ->NewuVisionProject… Создайте папку для проекта. Примечание: путь до папки с проектом не должен содержать кириллицы.
29 После создания нового проекта в появившемся окне выбора микроконтроллера во вкладке Device необходимо выбрать процессор ARM Cortex-M3: Milandr->Milandr->Cortex-M3->MDR1986BE92. После выбора микроконтроллера появляется окно с выбором библиотек. Нажмите «Ок», все необходимые библиотекидобавим в ручную, взяв их из демонстрационного проекта. В результате у нас получилось дерево проекта. Для того чтобы создать необходимые подкатегории. Для этого по самой верхней папке жмем правой кнопкой мыши и выбираем «ManageProjectitems…»
30 В разделе«Groups» создадим несколько папок для различных видов файлов: User– для пользовательских данных; LCD - для драйверов LCD, библиотека работы с LCD, который установлен на плате. Flash- для кода работы с Flash, здесь хранится библиотека для работы с Flashконтроллера. Libs–для библиотек CMSIS и SPL.
31 Структура проекта выглядит следующим образом: Далее необходим добавить все необходимые файлы из демонстрационного проекта «Материалы для лабораторных работ->TestProgs». Скопировать нужно выделенные файлы. Файл main.cдобавить в папку User.
32 Далее необходимо добавить файлы библиотеки в проект. Для этого нажимаем правой кнопкой по нужной папке в дереве проекта и выбираем «AddExistingFilestoGroup ‘Имя группы’…». В открывшемся окне нужно выбрать тип файлов «Allfiles (*.*)». После чего выбрать все необходимые файлы. Необходимо добавить: Впапку User -> «User ->main.c». Впапку Flash -> «flash ->MilFlash.c». Впапку LCD -> «mlt ->mlt_lcd.c».
33 ВпапкуLibs -> «Libraries\1986BE9x_StdPeriph_Driver\src ->всефайлы .c». ВпапкуLibs -> «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm -> startup_1986be9x.s». В этом файле прописаны все «вектора переходов». Иначе говоря, по любому прерыванию (к примеру, нажатие кнопки) контроллер возвращается к этой таблице и смотрит, куда ему перейти, чтобы выполнять код дальше. ВпапкуLibs-> «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm -> system_1986BE9x.c». В результате проект примет следующий вид: Далее необходимо очистить файл main.c. Удаляем все, кроме оболочки функции main и #include файлов. Должно остаться так:
34 Около самого верхнего #include файла стоит крестик - keil не видит данный файл. Для того, чтобы исправить это, необходимо указать путь к этому файлу. Для этого жмем Alt+F7. В открывшемся окне переходим во вкладку C/C++. Для того, чтобы исправить это, нужно нажать галочку около надписи «C99 Mode». Это даст возможность писать на более совершенном стандарте языка Си, чем это можно было делать изначально. Далее следует нажать на прямоугольник с «…» внутри. Справа около строчки с подписью «IncludePaths». В открывшемся окне нажимаем на иконку с прямоугольником, слева от крестика. Это создаст пустую строку. В правом углу созданной строчки жмем на «…». После чего указываем нужную папку, в которой лежат интересующие 35 нас файлы. После этого жмем «ОК». Папка будет добавлена. Необходимо добавить все эти пути. Жмем «ОК» и переходим в файл main.c. Теперь осталось лишь в настройках настроить J-LINK (см. выше).
36
перейти в каталог файлов
|