Программирование микроконтроллеров 1986ВЕ9x компании Миландр. Контрольные вопросы для самопроверки. Предназначено для студентов технических высших учебных заведений очной и заочной формы обучения, аспирантов, инженерно-технических работников
233 В таблице П.3 приведены способы вызова функций среды Keil µVision с помощью определенного сочетания клавиш. Таблица П.3 – Горячие клавиши среды Keil µVision Клавиши Назначение Сборка и отладка проекта F7 Построить проект Alt + F7 Открыть окно со свойствами проекта F5 Запустить программу или продолжить выполнение после точки останова Ctrl + F5 Запустить / остановить отладку программы F9 Поставить / убрать точку останова Ctrl + Shift + F9 Удалить все точки останова F10 Выполнить оператор без захода внутрь функции F11 Выполнить оператор с заходом внутрь функции Ctrl + F10 Выполнить код до выхода из функции Ctrl + F11 Выполнить код до курсора Форматирование и редактирование кода Tab Увеличить отступ перед выделенным кодом Shift + Tab Уменьшить отступ перед выделенным кодом Ctrl + Shift + U Перевести выделенный код в верхний регистр Ctrl + U Перевести выделенный код в нижний регистр Ctrl + L Вырезать строку, на которой находиться курсор Ctrl + Del Удаление до конца слова Ctrl + Backspace Удаление до начала слова Поиск текста Ctrl + F Открыть окно поиска Ctrl + H Открыть окно замены Ctrl + F3 Поиск вниз слова, на котором стоит курсор Ctrl + Shift + F3 Поиск вверх слова, на котором стоит курсор Ctrl + I Быстрый поиск, текст для поиска вводится внизу главного окна Навигация по коду Ctrl + G Перейти на определённый номер строки в коде Ctrl + Tab Переход между открытыми вкладками Ctrl + F2 Поставить закладку F2 Перейти к следующей закладке Shift + F2 Перейти к предыдущей закладке Ctrl + Shift + F2 Убрать все закладки
234 Приложение 2 Пример оформления отчета по выполненной работе Программирование микроконтроллеров Отчет по лабораторной работе № 1 по теме «Отладочная плата для микроконтроллера K1986ВЕ92QI и среда программирования Keil µVision» « » 20 г. Москва, 2016 Оценка: подпись преподавателя Выполнил: студент гр. САУ-31 Петров П.П. Проверил: к.т.н., доцент Иванов И.И.
235 Отчет по лабораторной работе № 1 Отладочная плата для микроконтроллера K1986ВЕ92QI и среда программирования Keil µVision Цель работы: знакомство с демонстрационно-отладочной платой для микроконтроллера K1986ВЕ92QI; получение навыков работы в среде Keil µVision; получение представления о структуре проекта на языке Си. Оборудование: отладочный комплект для микроконтроллера K1986ВЕ92QI;программатор-отладчик MT-Link;персональный компьютер. Программное обеспечение: операционная система Windows 7;среда программирования Keil μVision MDK-ARM 5.20;драйвер программатора MT- Link;примеры кода программ. Техническое задание 1) Обеспечить частоту мигания светодиодов, расположенных на отладочной плате, равной 0,2 Гц и 3 Гц соответственно. 2) Вывести на жидкокристаллический индикатор бегущую строку со словом «Байкал». Теоретические сведения Микроконтроллер – программируемое вычислительное устройство, обладающее набором периферийных устройств и применяемое для решения задач управления в технических системах. Отладочная плата предназначена для ознакомления с возможностями микроконтроллера и отладки программного обеспечения для него. Питание платы осуществляется от сети переменного тока 220 В, 50 Гц с помощью внешнего блока питания. Также возможно питание платы от USB-интерфейса. Для отображения буквенно-цифровой и графической информации на плате расположен жидкокристаллический индикатор размером 128х64. Для загрузки программ, написанных с помощью персонального компьютера, во флеш-память микроконтроллера используется программатор
236 MT-Link. Программатор подключается к компьютеру с помощью USBкабеля. На плате предусмотрено два разъема для подключения программатора (JTAG-A и JTAG-B). Для подключения отладочной платы к компьютеру необходимо выполнить следующие действия: 1. Соединить программатор и USB-кабель между собой. 2. Подключить шлейф программатора к разъему JTAG-B, расположенному на отладочной плате. 3. Установить каждый из трех переключателей выбора режима загрузки в положение «0», что соответствует использованию интерфейса JTAG-B при загрузке и отладке. 4. Подключить USB-кабель программатора в свободный USB-порт компьютера. Убедиться, что светодиод программатора горит монотонно. Если светодиод мигает, то это значит, что нет связи между компьютером и программатором ввиду отсутствия на компьютере требуемого драйвера. 5. Установить перемычку «POWER_SEL» в положение «EXT_DC», что позволить питать плату от сети. При другом положении перемычки организуется питание со стороны USB-интерфейса. 6. Включить блок питания в сетевую розетку и подключите шнур питания к соответствующему разъему на плате. На плате должен загореться красный светодиод «POWER 5V». Если в микроконтроллере уже содержится программа, то она начнет выполняться. Интегрированная среда программирования Keil µVision предназначена для написания и отладки программ для микроконтроллеров семейства ARM32 с помощью языков Си, С++ и ассемблера. В рамках нашей работы будем использовать лишь язык Си. Программа для микроконтроллера именуется программным проектом. Проект представляет собой достаточно сложную совокупность файлов, каталогов и настроек. Во-первых, проект состоит из модулей. Модуль на языке Си, как правило, состоит из двух файлов: собственно модуль – файл с расширением *.с и заголовочный файл с расширением *.h. В модуле содержатся исходные коды функций и объявления глобальных переменных,
237 а в заголовке – прототипы (предварительные описания) функций и глобальных переменных. Подключив заголовочный файл директивой #include к другому модулю, можно задействовать в одном модуле функции и переменные другого модуля. Во-вторых, проект состоит из совокупности различных файлов, размещенных в определенной структуре каталогов на диске. В этих каталогах находятся непосредственно все файлы проекта, а также файлы библиотек, подключенных к проекту. В-третьих, каждый проект имеет ряд настроек: программируемое устройство, тактовая частота ядра, подключаемые библиотеки, программная оптимизация, параметры программора и многие другие. Перед загрузкой программы в микроконтроллер проект необходимо построить. Под построением понимается компиляция всех модулей, входящих в состав проекта, их ассемблирование и компоновку. Если в процессе построения возникнут ошибки, то сведения о них будут отображены в соответствующем окне среды. Программа не может быть загружена в микроконтроллер до тех пор, пока все ошибки не будут устранены. Ход выполнения работы Первая часть технического задания выполнялась на основе проекта Lab1_1. Проект был настроен согласно методическим рекомендациям: в качестве целевого устройства был установлен микроконтроллер MDR32F9Q2I; установлена стартовая тактовая частота ядра микроконтроллера равной 8 МГц; включено использование операционной системы RTX; задано использование первого уровня программной оптимизации; в качестве программатора выбран J-LINK / J-TRACE Cortex со следующими параметрами: порт программирования – SW; рабочая частота – 1 МГц; стирание всей области памяти перед программированием; активированы программирование, проверка и запуск программы.
238 Далее программный проект был построен без каких-либо ошибок и предупреждений со стороны среды Keil. При первой попытке загрузки программы в микроконтроллер произошла ошибка, связанная с отсутствием связи программатора и среды программирования. Причиной явился неправильный выбор режима загрузки микроконтроллера с помощью переключателей на отладочной плате, вызванный нарушением инструкции по подключению отладочной платы к компьютеру. После устранения неполадки программа была успешно загружена в память микроконтроллера. Для выполнения задания был исследован модуль проекта led.c и его заголовок led.h. Анализ кода модуля led.c позволил установить, что мигание светодиодов осуществляется с помощью задач U_LED_Task0_Function и U_LED_Task1_Function . Они имеют идентичную структуру: __task void U_LED_Task0_Function (void) { while(1) { U_LED_Toggle (U_LED_0_PIN); os_dly_wait (500); } } Данная задача представляет собой бесконечный цикл while. Внутри цикла находится функция U_LED_Toggle, описываемая в этом же модуле led.c: void U_LED_Toggle (uint32_t Pins) { uint32_t data = PORT_ReadInputData (U_LED_PORT); PORT_Write (U_LED_PORT, data ^= Pins); } Суть функции U_LED_Toggle состоит в следующем: объявляется переменная data типа uint32_t (беззнаковая, целая, 32-битная);
239 переменной присваивается значение, считываемое с помощью библиотечной функции PORT_ReadInputData с порта U_LED_PORT; значение переменной инвертируется и записывается в порт U_LED_PORT с помощью библиотечной функции PORT_Write. Таким образом, постоянно происходит смена состояния светодиода на противоположное ввиду бесконечного цикла. Задержка смены состояния задается с помощью функции os_dly_wait . Аргументом функции служит количество тактов ядра. При данных настройках тактирования 1 такт равен 1 миллисекунде. Из вышеизложенного очевидно, что для получения требуемых частот мигания светодиодов следует найти соответствующие им значения задержек. Частота – это параметр периодических сигналов. Она показывает, сколько периодов такого сигнала умещается в одной секунде, и определяется формулой (1): ?????? = 1 ?????? , (1) где T – период сигнала. Изменение управляющего сигнала светодиода можно представить графиком, изображенным на рисунке 1. Рисунок 1 – Управляющий сигнал светодиода
240 Из рисунка 1 очевидно, что задержка смены состояния светодиода должна быть в два раза меньше периода управляющего сигнала. Из формулы (1) находим требуемые значения периодов для заданных частот: ?????? 0 = 1 ?????? 0 = 1 0,2 Гц = 5 с, ?????? 1 = 1 ?????? 1 = 1 3 Гц ≈ 0,33 с. Тогда искомые задержки равны 2,5 и 0,16 секунд или 2500 и 160 тактов соответственно: __task void U_LED_Task0_Function (void) { while(1) { U_LED_Toggle (U_LED_0_PIN); os_dly_wait (2500); } } __task void U_LED_Task1_Function (void) { while(1) { U_LED_Toggle (U_LED_1_PIN); os_dly_wait (160); } } Наиболее достоверный способ проверки правильности полученных результатов – это измерение сигнала с помощью осциллографа. Однако использование этого прибора, видимо, выходит за рамки данной работы, поэтому единственным вариантом проверки становится визуальная оценка частоты мигания. По такой оценке фактическая частота вполне соответствует требуемой.
241 Вторая часть технического задания выполнялась на основе проекта Lab1_2. Данный проект, как и предыдущий, был настроен согласно методическим рекомендациям. Для выполнения задания был исследован модуль проекта lcd.c и заголовок mlt_font.h. Все параметры бегущей строки находятся в модуле lcd.c. Вывод бегущей строки организован в виде задачи U_LCD_Task_Function: __task void U_LCD_Task_Function (void) { uint32_t k = 0; const char s[] = "\xC1\xE5\xE3\xF3\xF9\xE0\xFF \xF1\xF2\xF0\xEE\xEA\xE0"; while(1) { os_dly_wait (1000); U_MLT_Scroll_String (s, 4, k++); } } Бег строки осуществляется с помощью функции U_MLT_Scroll_String в бесконечном цикле while и основан на использовании таймера/счетчика. Данная функция имеет три аргумента: s – содержание строки; 4 – положение строки по высоте на индикаторе; k++ – увеличение показания счетчика на единицу. Функция os_dly_wait в цикле фактически задает скорость бега строки. Для выполнения технического задания необходимо изменить параметр s , определяющий содержание строки. Латинские буквы, цифры и некоторые знаки могут записываться в содержание напрямую, однако для вывода кириллических букв нужно использовать кодировку. Такая кодировка расположена в файле mlt_font.h. Закодированный символ представляет собой число в шестнадцатеричном формате и начинается с символов «\x». В соответствии с содержанием файла
242 mlt_font.h для вывода слова «Байкал» необходимо присвоить параметру s значение «\xC1\xE0\xE9\xEA\xE0\xEB»: __task void U_LCD_Task_Function (void) { uint32_t k = 0; const char s[] = " \xC1\xE0\xE9\xEA\xE0\xEB "; while(1) { os_dly_wait (1000); U_MLT_Scroll_String (s, 4, k++); } } После загрузки программы нетрудно убедиться, что по индикатору теперь перемещается слова «Байкал». Заключение В ходе работы были получены базовые навыки работы с микроконтроллерами, в том числе подключение отладочной платы, запуск среды программирования, настройка, корректировка и отладка программного проекта; изучена структура программного кода для микроконтроллеров на примере двух проектов. Единственное затруднение при работе с оборудованием было связано с неполным следованием инструкции по подключению. Первая часть работы посвящена программному управлению частотой мигания двух светодиодов, находящихся на отладочной плате. Решением задачи стало изменение задержки при переключении состояния светодиодов на противоположное. Вторая часть заключалась в выводе бегущей строки на жидкокристаллический индикатор. Для решения поставленной задачи потребовалось изменить аргумент функции, отвечающей за вывод строки, с использованием файла с кодировкой кириллических символов. Результаты, полученные в ходе работы, полностью соответствуют техническому заданию.