Введение В предыдущей статье Я поделился своими личными впечатлениями от полученного комплекта и запрограммировал контроллер с помощью демо-проекта с помощью MT-LINK (также прилагается).
Теперь, когда мы подробно рассмотрели весь комплект, пришло время приступить к его освоению.
Для нетерпеливых - результат.
Создаем пустой проект в Keil 5 для K1986BE92QI.
Сначала вам нужно создать чистый проект. Можно, конечно, взять за основу демо-проект, но проект номер «2» так и не запустился, а в проекте «3» почему-то в меню выбора контроллера пустой лист. Это почему-то меня насторожило.Проекта под номером «1» нет в принципе.
- 1. Перейдите в Проект -> Новый проект uVision…
- 2. Создайте папку для проекта (в пути не должно быть русских букв), пропишите название (тоже на английском) и сохраните.
- 3. Выбираем наш контроллер.
- 4. В появившемся окне просто нажмите «Ок».
Честно говоря, мне еще ни разу не удавалось настроить проект через этот редактор так, чтобы все компилировалось с первого раза.
Всегда что-то приходилось менять.
Чаще всего оказывалось, что проще сделать это самому.
- 5. В левом верхнем углу появится дерево проекта.
Теперь нам нужно создать необходимые подкатегории.
Для этого щелкните правой кнопкой мыши верхнюю папку и выберите «Управление элементами проекта…».
- 6. В этом меню кликаем два раза левой кнопкой мыши по папке, имя которой хотим изменить и пишем то, что хотим.
Опять же, лучше на английском.
Для добавления новых папок используйте значок слева от «красного креста».
Нам понадобится как минимум 4 папки:
- 1. Для пользовательских данных (наших файлов).
- 2. Для драйверов ЖК-дисплея (входят в комплект).
- 3. За кодом для работы с Flash.
- 4. Под SMSIS и т.п.
SPL.
- 1. Для пользовательских данных (наших файлов).
- 7. После того, как вы переименовали все папки, нажмите «ОК».
Каталог должен иметь примерный вид.
- 8. Далее нам нужно получить все эти файлы.
Мы возьмем их из работающего демонстрационного проекта.
Кстати.
Только сейчас заметил, что проект написан под кейл 2. Это меня немного удивило.
Еще одним интересным фактом было то, что между демонстрационным проектом «2» и «3», судя по информации последней смены, прошло 3 месяца.
Тем более, что рабочий проект ближе к нашему времени.
Файлы мы возьмем оттуда (где взять этот демо-проект, написано в предыдущей обзорной статье).
Вам необходимо скопировать выбранные файлы.
Более того, main.c (как и любой ваш файл) лучше положить в отдельную папку.
Для этого я создал папку User и поместил туда main.c (будем его менять и основываться на нем).
- 9. Далее нам нужно добавить в проект файлы библиотеки.
Добавление происходит следующим образом.
Щелкните правой кнопкой мыши нужную папку в дереве проекта и выберите «Добавить существующие файлы в группу «Имя группы»…».
В открывшемся окне необходимо выбрать тип файла «Все файлы (*.*)».
Затем выберите 1 или выберите несколько файлов.
Вам нужно добавить:- 1. В папку Пользователь -> «Пользователь -> main.c».
Это наш самый важный файл.
Немного изменив его, мы начнем писать в нем наш код.
- 2. В папку Flash -> «flash -> MilFlash.c».
Здесь хранится библиотека для работы с Flash-контроллерами.
- 3. В папку LCD -> «mlt -> mlt_lcd.c».
Библиотека для работы с ЖК-дисплеем, которая установлена на плате.
- 4. В папку SMSIS_and_Drivers -> «Libraries\1986BE9x_StdPeriph_Driver\src -> все файлы .
c».
Здесь хранится SPL-аналог STM32. Проще говоря, это «обертки», позволяющие управлять его периферией (пинами, uart и т. д.), не вдаваясь в структуру контроллера.
- 5. В папку SMSIS_and_Drivers -> «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm -> start_1986be9x.s».
Это «загрузочный» файл.
Здесь перечислены все «векторы перехода».
Другими словами, при любом прерывании (например, нажатии кнопки) контроллер возвращается к этой таблице и смотрит, куда идти, чтобы выполнить код дальше.
- 6. В папку SMSIS_and_Drivers -> «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm -> system_1986BE9x.c».
- 1. В папку Пользователь -> «Пользователь -> main.c».
- 10. Далее нам нужно немного почистить файл main.c. Для этого щелкните по нему левой кнопкой мыши в дереве каталогов.
Удаляем все, кроме оболочки основной функции и файлов #include. Так должно остаться.
- 11. Как вы могли заметить, возле верхнего #include файла стоит крестик.
Кейл просто не видит этот файл.
Для того, чтобы это исправить, мы должны сказать ему, где взять этот файл.
Для этого нажмите Alt+F7. В открывшемся окне перейдите на вкладку C/C++.
Немного отвлечения.
В будущем я буду часто использовать методы, которые Кейл по умолчанию не понимает. Для того, чтобы это исправить, необходимо поставить галочку возле надписи «Режим C99».
Это позволит писать на более продвинутом стандарте языка C, чем это можно было сделать изначально.
Затем нажмите на прямоугольник с «…» внутри.
Справа есть строка с надписью «Включить пути».
- 12. В открывшемся окне нажмите на иконку с прямоугольником слева от крестика.
Это создаст пустую строку.
В правом углу созданной строки нажмите на «…».
Затем указываем нужную папку, в которой находятся интересующие нас файлы.
После этого нажмите «ОК».
Папка будет добавлена.
Все эти пути необходимо добавить.
Если вы заметили, все ссылки, кроме одной, относительные.
То есть они происходят из корневого каталога.
Но 1 начинается с «C:\».
Это ссылка на каталог с самим проектом.
Это также следует указать.
Нажмите «ОК» и перейдите к файлу main.c.
Давайте скомпилируем простую программу.
Давайте вставим бесконечный цикл в основную функцию и увеличим счетчик на 1. Теперь наш файл должен выглядеть так.
Не забывайте, что в конце каждого файла должна быть пустая строка.
Кейл рассматривает это как предупреждение, которое часто действует ему на нервы.
Конечно скомпилируется, но настораживает сам факт предупреждения.
На этом настройка завершена.
Мы можем перекомпилировать наш проект, нажав F7. Если все прошло хорошо, мы это увидим.
Теперь осталось только настроить J-LINK в настройках и можно загружать.
Как его настроить подробно описано в предыдущей статье.
Кстати.
J-LINK видит чип без подключения дополнительного питания, а также позволяет отладить чип.
Таким образом, внешнее питание действительно не требуется.
При перемещении по строкам кода можно увидеть, как мерцает цвет экрана.
Настройка ножки контроллера для работы со светодиодом
Просмотрев оглавление документации, я не увидел ничего о тактировании периферии, поэтому сразу приступил к его настройке.Вспомнив все ужасы SPL в плане настройки портов ввода-вывода в STM32, мысль об использовании библиотек, идущих в комплекте, отпала сразу.
И нехорошо сразу, не успев поиграться с регистрами, прятаться за библиотеками, которые, кстати, могут содержать ошибки.
Для начала давайте разберемся, какой порт нам нужно настроить.
В «Оценочной плате 1986BE92U, K1986BE92QI (MDR32F9Q2I)\Печатная плата 1986EvBrd_LQFP64» есть файл 1986EvBrd_64_Rev2.pdf, в котором показана схема платы.
На нем мы видим, что 2 светодиода подключены к контактам PC0 и PC1. Большой.
Вам не нужно беспокоиться о смещении.
Мне очень понравилось, что в Миландре вся информация о линейке чипов собрана в одном документе.
В STM32 я сильно запутался в документах.
Давайте взглянем на схему портов ввода/вывода.
Чем-то отдаленно напоминает схему порта STM32. Не видя ничего, что бросалось бы в глаза, отправляемся настраивать регистры.
Поскольку я не знал точно, как Миландер назвал свои порты, я зашел в библиотеку конфигурации портов.
Там я увидел следующее.
Ну, немного выше.
Убедившись, что адрес порта C совпадает с адресом в даташите, я создал новую функцию в файле main.c (Обязательно над основной функцией! В противном случае вам придется описывать прототипы функций в файле main.c).
.
h файл, и это пока лишняя проблема.
).
Начинаю писать PORTC-> (по привычке), зажимаю ctrl+пробел и вижу следующее.
Это уже знакомая картина.
Я был очень счастлив.
Потом я начал смотреть, какие регистры нужно изменить.
Нам нужен светодиод на порту «0», поэтому можно написать: ПОРТК-> RXTX |= 1;
Таким образом мы переводим 0-й бит порта в 1. Таким образом, зажигаем диод на порту 0. Но перед его включением стоит его настроить.
Поэтому мы выполняем это действие в последнюю очередь.
У нас есть выход, поэтому: ПОРТК-> ОЕ |= 1;
Оставляем без изменений, так как по умолчанию везде нули.
Но здесь нам нужен цифровой: ПОРТК-> АНАЛОГОВЫЙ |= 1;
Нам не нужен лифт, так что давайте пропустим его.
Ну, нам это тоже не нужно.
И здесь нам нужно выбрать скорость.
По умолчанию все.
Выбираем медленный фронт. Для светодиода вполне достаточно: ПОРТК-> ПИТАНИЕ |= 1;
Ну и последний регистр.
В общем вещь ранее мне неизвестная.
С этим еще предстоит разобраться.
Ну вот мы и закончили с настройкой.
НО, если мы сейчас зашьем этот код, то у нас ничего работать не будет. Я долго пытался понять в чем проблема, пока еще раз внимательно не прочитал про систему тактирования.
В разделе о портах нет ни слова о тактировании.
Но есть отдельная глава, в которой написано, как и что нужно тактировать.
Я зашёл туда и увидел следующее.
Нам нужны порты.
Это вполне соответствует описанию «периферийных устройств».
Ищем этот реестр и вот он.
Оставалось только понять, как этот регистр называется в кейле.
Поскольку в библиотеках я ничего толком не нашел, я пошел искать.
В результате оказалось, что он называется RST_CLK. Что ж, тогда нам просто нужно написать «1» в нужном блоке.
RST_CLK-> PER_CLOCK |=(1<<23); Я случайно наткнулся на «PER_CLOCK».
Когда я написал «RST_CLK», я нажал ctrl+space и после появления списка «p».
Тогда я выбрал подходящий вариант.
Результатом стал следующий код.
Код компилируется и мы получаем.
Русские комментарии в кейле 5
Теперь стоит оформить комментарии в коде, но на русском это сделать невозможно.
Появляются непонятные персонажи; для того, чтобы иметь возможность писать русские комментарии, вам нужно зайти в Edit -> Configuration.
И измените там кодировку, как показано на рисунке.
Затем нажмите «ОК».
Мигающий светодиод
Теперь напишем код, который будет мигать светодиодом с помощью цикла.
Давайте шить и радоваться! Скорость взята из опыта моргания светодиодом на STM32. Светодиод мигает примерно раз в секунду.
Все.
Кажется, я ничего не пропустил.
Советую немедленно заархивировать этот проект. Для дальнейшего использования в качестве заготовки.
Позвольте мне напомнить вам еще раз.
В настройках проекта есть одна ссылка на каталог проекта относительно «C:\».
Так что проект будет работать только по тому же пути, что и в статье.
Вы можете легко изменить путь и свободно использовать его.
Спасибо сгувенка для исправлений.
Теги: #микроконтроллеры #arm #cortex-m3 #K1986BE92QI #mylandr #отладка #C++
-
Камерун
19 Oct, 24 -
Три Белые Лошади
19 Oct, 24