Первый самостоятельный проект в KEIL

Первый Самостоятельный Вылет — это для лётчиков! Первый Самостоятельный Проект — это для эмбеддеров ! 🙂
Несмотря на ажиотаж относительно Кортексов, особенно STM-овских, я думаю, что ядро ARM7TDMI ещё долго будет сосуществовать со всеми остальными. Для нас (я имею в виду страны бывшего Советского Союза) во многом этому будет способствовать наличие русскоязычной литературы (вернее назвать переводов) по данному семейству. В частности в интернете имеется неплохие книги товарищей Мартина, Редькина и др. Моё изучение микроконтроллеров ARM началось с книги уже упомянутого Тревора Мартина «Микроконтроллеры ARM7. Семейство LPC2000 компании Philips». Это позволило вникнуть в основы. Ну а далее — изучение даташитов, юзер/программ/референс — мануалов и опыт, накопленный ранее.
Имеется у меня макетка с LPC2148 на борту, и именно её я использую в данной статье в качестве подопытного микроконтроллерного модуля. Процесс освоения нового семейства контроллеров практически всегда рассматривается эмбеддерами на опыте ранее изученного семейства. Поэтому я вовсю буду использовать свои наработки и опыт для AVR контроллеров фирмы ATMEL . В качестве IDE я выбрал Keil от MDK. Выбор могу обосновать хорошими отзывами на форумах и бесплатной демоверсией с ограничением кода до 32кБ. Если у Вас ещё нет — скачайте демоверсию Keil , и установите на компьютер самым обычным способом. В качестве программатора-отладчика я использую JetLink8. Для него также необходимо скачать и установить драйвера. Сразу оговорюсь — при установке Keil следите, чтобы путь к его папкам, в том числе и с Вашими будущими проектами не проходил через названия с кириллицей («Мои документы» и пр.) — имена должны быть только латинским шрифтом.
Макет для исследований состоит из непосредственно платы с LPC2148, программатора-отладчика J-link8, соединительных проводов и, в качестве  светодиода использован индикатор питания платы микроконтроллерного модуля ATtiny2313.
Серый кабель USB на модуле LPC2148 — для питания этого модуля, чёрный кабель USB — подключение J-link8.
Первоначально я хотел назвать статью «Основы работы в Keil«, но, подумав, изменил название.  Потому как про начало работы в Кейле написано немало, однако почти все они на основе уже готовых примеров, которые идут в библиотеках вместе с дистрибутивом. Безусловно, это в какой-то мере это правильно, но ведь именно созданный полностью своими руками, пусть даже самый простой проектик, принесёт гораздо больше пользы, чем готовый из папки «Examples». Чтобы не нарушать традицию пусть это будет «Hello, world» в микроконтроллерном исполнении, т.е. моргание светодиодом. В Кейле открываем «Project» -> «New uVision Progect». Откроется окно Create New Project. В нём стандартно нужно набрать название проекта и выбрать папку его сохранения. Я назвал проект LPC2148_pr и сохранил его в папку My_project. После сохранения Кейл предложит выбрать микроконтроллер для проекта.
 Для меня это LPC2148.
После выбора кристалла будет предложено добавить в проект файл startup.s — добавляем. Это файл инициализации контроллера, о нём хорошо написано во многих источниках, в частности у DI HALTA. После указанных действий мы увидим следующую картину:
т.е. открытый, пока пустой проект, в левой части которого на вкладке Project отображаются все имеющиеся в нём файлы. Пока что там один startup.s. Теперь давайте мыслить по AVR-овски — нужен, конечно, главный исполняемый Си-шный файл. Создадим его «File» -> «New» или соответствующим значком на панели. Сохраним как main.c  (расширение указать обязательно) в папку нашего проекта. Однако, даже после сохранения в папку проекта этот Си-шный файл в сам проект ещё не добавлен. Для добавления кликаем правой клавишей мыши по папке «Source Group 1» на расположенной слева вкладке Project:
и в выпавшем окне кликаем Add Files to Group «Source Group 1». В появившемся окне браузера выбираем наш main.c и щёлкаем ADD. В результате Вы увидите слева на вкладке Project в списке файлов проекта добавленный main.c. Главный файл добавлен, но он пустой как шаманский бубен. На его наборном поле кликнем правой клавишей мыши. Верхняя срока выпавшего меню «insert ‘#include <LPC214x.H>’ » предложит добавить в этот файл заголовочный h-файл семейства микроконтроллера для которого мы делаем проект — добавляем. Это действие мы всегда делали и для AVR- писАли #include <avr/io.h> , ведь правда же? А далее я просто наберу простейшую программу, которая будет мигать светодиодом. Причём, используя привычный для себя синтаксис для Си.
После набора и проверки я скомпилировал проект. Это можно сделать нажатием на иконку, на кнопку F7 или через меню Project. В нижней части в окне Build Output видны результаты компиляции. Самое время залить прошивку в микроконтроллер, но не будем спешить — не всё ещё настроено так как надо, мы даже не создали нужный для заливки hex-файл.
Через меню Project, соответствующей иконкой или Alt-F7 откроем  вкладку Option for Target ‘Target 1’ — опции для нашего проекта. Первая закладка «Device» понятна — мы в ней выбирали используемый микроконтроллер. Во второй закладке «Target» установите частоту работы микроконтроллера, остальное можно пока не менять. В третьей закладке «Output» поставьте галку Create HEX file. В закладках «Listing», «User», «C/C++», «Asm», «Linker» пока можно ничего не менять, а оставить по умолчанию — разберёмся с тонкостями потом. В «Debug» необходимо выбрать отладку в симуляторе или с помощью аппаратных средств. Подробнее остановлюсь на последней закладке «Utilities». В ней отмечаем Use Target Driver for Flash Programming. В выпадающем списке выбираем используемый программатор (в моём случае — это J-Link/J-Trace), и нажимаем кнопку Settings — т.е. настройка программатора. В открывшемся окне ставим точку напротив функций стирания: полное стирание контроллера, стирание сектора или вообще запрет стирания — я выбрал стирание сектора. Далее ставим галки Program, Verify и Reset and Run для программирования, верификации, сброса и дальнейшего запуска после прошивки соответственно. В списке Programming Algorithm кликаем Add и в выпавшем списке выбираем алгоритм программирования для своего контроллера. В моём случае это «LPC200 IAP2 512kB Flash»
 Щёлкаем Add и два раза OK. Заново скомпилируем проект. Теперь в окне Build Output появилось сообщение о создании hex-файла.
Если программатор правильно подключён и на микроконтроллер подано питание, то загрузка исполняемого кода произойдёт  в результате нажатия иконки «Load» или через меню Flash. В случае успешной прошивки Вы увидите сообщение в окне Build Output
и мигающий светодиод — результат Вашего первого самостоятельного проекта в Keil.
 Теперь о граблях. Я всё никак не мог впереть, почему у меня не запускается микроконтроллер после успешной прошивки, ведь в окне Buil Output выскакивает положительный результат, такой же как и скриншоте вверху. Оказалось, что на вкладке «Output» окна Option for Target ‘Target 1’ нужно УБРАТЬ галку с Debug Information, а на вкладке «Linker» УСТАНОВИТЬ галку на Use Memory Layout from Target Dialog !!!
Теперь интереса ради откройте проект Blinky из папки Examples. Вы увидите в общем-то практически такой же проект. Однако группы файлов там логически разделены, присутствуют некоторые файлы, которых нет у нас в проекте (Retarget.c и rt_misc.h — я, кстати, так и понял нафиг они там нужны?) и добавлен текстовый файл с якобы документацией проекта. В будущем мы будем делать так же, а на данный момент стояла задача быстрого САМОСТОЯТЕЛЬНОГО старта. Я считаю мы её достигли!

P.S. Я не рассматривал здесь какие-то основополагающие вопросы, типа почему для сброса разряда нужно писАть единицу, или для чего нужен startup. Подразумевается, что люди, читающие эти строки имеют желание и некоторый опыт работы с контроллерами, а также могут почитать даташит, хотя бы в порядке ознакомления.

 

Запись опубликована в рубрике ARM с метками , . Добавьте в закладки постоянную ссылку.

8 комментариев: Первый самостоятельный проект в KEIL

  1. Давид говорит:

    Благодарю за доходчивый урок. Смотрел у DI HALTA как начать проект, так и потерялся в его намудрениях ).

  2. s_black говорит:

    Спасибо, Давид ! Рад был помочь )))

  3. Ольга говорит:

    Спасибо, очень понятно и легко применить. А что нужно сделать, если в списке Programming Algorithm нет нужного мне контроллера?

  4. s_black говорит:

    Уточните, пожалуйста, какого именно?

  5. magik говорит:

    Установил Keil 4. В списке микроконтроллеров нет ни LPC 4333, ни LPC 2378. Как быть? Другую версию Кейла устанавливать? Какую? Заранее благодарен.

  6. s_black говорит:

    У меня установлена версия 4.23. LPC4333 в списке тоже нет, а вот LPC2378 — имеется. Попробуйте установить версию поновей — может там будет. А может быть такой камень поддерживается только платной версией. Всего хорошего!

  7. Алексей говорит:

    Плохо, что сейчас нет нормальной среды или инструкции по ее использованию по аналогии с АРДУИНО для AVR. Т.е. конечно есть Solid-ide но не понятно как его подружитьс с j-tag программатором и STM32F103RB. Или есть где почитать ?

  8. s_black говорит:

    А разве есть подобие АРДУИНО для АРМ-контроллеров?
    Если не нравится Кейл, то можно поработать в Кокосе — информации в сети море.

Добавить комментарий

Ваш e-mail не будет опубликован.