- PVSM.RU - https://www.pvsm.ru -
В прошлой статье [1] я поделился личными впечатлениями о полученном мною наборе и запрограммировал контроллер демонстрацонным проектом с помощью MT-LINK (так же был предоставлен). Теперь, когда мы детально рассмотрели весь комплект, настало время начать его осваивать.
Для нетерпеливых — итог.
Для начала следует создать чистый проект. Можно конечно использовать демонстрационный проект как основу, но проект с номером «2» так и не запустился, а в проекте «3» почему-то в меню выбора контроллера чистый лист. Это меня как-то насторожило. Проекта с номером «1» нет в принципе.









В открывшемся окне нужно выбрать тип файлов «All files (*.*)». После чего выбрать 1 или выделить несколько файлов.

Добавить нужно:
Итогом должно стать такое дерево.




Жмем «ОК» и переходим в файл main.c.
Вставим в функцию main бесконечный цикл с увеличением счетчика на 1. Теперь наш файл должен выглядеть так.

Не забываем о том, что в конце каждого файла должна быть пустая строка. Keil считает это как предупреждение, которое частенько действует на нервы. Конечно компилироваться будет, но сам факт предупреждения – настораживает.
На этом настройка закончена. Мы можем перекомпилировать наш проект нажав F7. Если все прошло хорошо, ты мы увидим это.

Теперь осталось лишь в настройках настроить J-LINK и можно заливать. О том, как его настраивать – было подробно рассказано в предыдущей статье.
Кстати. J-LINK видит чип и без подключения дополнительного питания, а так же позволяет отлаживать чип. Так что внешнее питание не особо нужно. При переходах по строкам кода видно, как мелькает подцветка экрана.
Пробежавшись по оглавлению документации, я не увидел ничего про тактирование переферии, поэтому сразу же принялся настраивать ее. Вспоминая обо всех ужасах SPL в плане настройки портов ввода-вывода в STM32, мысль об использовании библиотек, шедших в комплекте, отпала сразу же. Да и не хорошо это, вот так сразу, не успев поиграться с регистрами, прятаться за библиотеками, в которых, кстати, не исключены ошибки.
Для начала поймем, какой именно порт нам нужно настроить. В «Отладочная плата 1986ВЕ92У, К1986ВЕ92QI (MDR32F9Q2I)Печатная плата 1986EvBrd_LQFP64» есть файл 1986EvBrd_64_Rev2.pdf, в котором приведена схема платы. На ней мы можем увидеть, что 2 светодиода подключены к пинам PC0 и PC1. Отлично. Не придется мучиться со смещением.

Очень понравилось, что у Миландра вся информация о линейке чипов в одном документе. В STM32 очень путался в документах… Взглянем на схему порта ввода-вывода. Чем-то отдаленно напоминает схему порта у STM32. Не увидев ничего, что бы бросилось в глаза, идем настраивать регистры.

Так как я не знал, как именно Миландр назвал свои порты, я полез в библиотеку настройки портов. Там увидел следующее.

Ну и чуть выше.

Убедившись, что адрес порта C совпадает с адресом в датащите, я создал новую функцию в файле main.c (Обязательно выше функции main! Иначе придется описывать прототипы функции в .h файле. А это лишние пока что заморочки.).
Начинаю писать PORTC-> (по привычке), зажимаю ctrl+пробел и вижу следующее.

Вот это уже знакомая картина. Очень обрадовался. Далее начал смотреть, какие регистры нужно изменить.

Нам нужен светодиод на порту «0», так что можем записать: PORTC->RXTX |= 1;
Этим мы переводим 0-й бит порта в 1. Тем самым зажигая диод на порту 0. Но перед его включением стоит его настроить…
Так что данное действие выполняем в последнюю очередь, а перед.

У нас выход, так что: PORTC->OE |= 1;

Оставляем без изменений, так как по умолчанию везде нули.

А вот тут нам нужен цифровой: PORTC->ANALOG |= 1;

Подтяжка нам не нужна, так что, пропускаем.

Ну и это нам тоже не надо…

А вот тут нам нужно выбрать скорость. По умолчанию – все. Выбираем медленный фронт. Для светодиода его вполне хватит: PORTC->PWR |= 1;

Ну и последний регистр. Вообще неведомая для меня ранее вещь. С этим еще предстоит разобраться.
Ну вот, с настройкой мы закончили. НО, если мы сейчас зашьем этот код, то у нас ничего не заработает. Я долго пытался понять, в чем проблема, пока еще раз внимательно не прочитал про систему тактирования. В разделе о портах нет ни слова о тактировании. Зато есть отдельная глава, в которой написано, как и что нужно тактировать. Зашел туда и увидел следующее.

Нам нужны порты. Это вполне подходит под описание «периферийные блоки». Ищем этот регистр и вот.

Оставалось только понять, как в keil называется этот регистр. Так как в библиотеках толком ничего не нашел, то пошел подбором. В итоге выяснилось, что он именуется RST_CLK. Ну а дальше нам нужно лишь записать «1» в нужный блок.
RST_CLK->PER_CLOCK |=(1<<23);
На «PER_CLOCK» вышел случайно. Когда написал «RST_CLK» нажал ctrl+пробел и после появления списка, «p». После выбрал подходящий вариант.
В итоге получился такой код.

Код компилируется и мы получаем.

Сейчас стоит расставить комментарии по коду, но на русском этого сделать не получается. Выходят непонятные символы, для того, чтобы можно было писать русский комментарии, нужно зайти Edit -> Configuration.

И там сменить кодировку, как показано на рисунке. После чего нажать «ОК».

Теперь напишем код, который будет с помощью цикла мигать светодиодом.

Зашиваем и радуемся! Скорость взята по опыту мигания светодиодом на STM32. Светодиод мигает с частотой примерно раз в секунду.
Все. Вроде бы ничего не упустил. Советую этот проект сразу же заархивировать. Чтобы потом использовать как заготовку.
Еще раз напоминаю. В настройках проекта есть одна ссылка к директории проекта относительно «C:». Так что проект будет работать лишь по тому же пути, что и в статье. Вы легко можете сменить путь и свободно пользоваться.
Автор: Vadimatorikda
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/mikrokontrollery/88370
Ссылки в тексте:
[1] В прошлой статье: http://habrahabr.ru/post/255199/
[2] Проект прилагаю к статье: https://cloud.mail.ru/public/3YHfALw7t6sc/%D0%9A%20%D1%83%D1%80%D0%BE%D0%BA%D0%B0%D0%BC.
[3] Источник: http://habrahabr.ru/post/255323/
Нажмите здесь для печати.