Вступление


В прошлой статье я поделился личными впечатлениями о полученном мною наборе и запрограммировал контроллер демонстрацонным проектом с помощью MT-LINK (так же был предоставлен). Теперь, когда мы детально рассмотрели весь комплект, настало время начать его осваивать.
Для нетерпеливых — итог.



Создаем пустой проект в Keil 5 для К1986ВЕ92QI.


Для начала следует создать чистый проект. Можно конечно использовать демонстрационный проект как основу, но проект с номером «2» так и не запустился, а в проекте «3» почему-то в меню выбора контроллера чистый лист. Это меня как-то насторожило. Проекта с номером «1» нет в принципе.
  • 1. Заходим в Project -> New uVision Project…



  • 2. Создаем папку для проекта (в пути не должно быть русских букв), пишем имя (так же на английском) и сохраняем.



  • 3. Выбираем наш контроллер.
  • 4. В появившемся окне просто жмем «Ок». Честно сказать, мне никогда не удавалось настроить проект через этот редактор так, чтобы все скомпилировалось с 1-го раза. Всегда приходилось что-то менять. Чаще всего оказывалось, что проще сделать самому.



  • 5. В левом верхнем углу появилось дерево проекта. Теперь нам нужно создать необходимые подкатегории. Для этого по самой верхней папке жмем правой кнопкой мыши и выбираем «Manage Project items…»



  • 6. В данном меню 2 раза нажимаем левой кнопкой мыши на папку, название которой хотим изменить и пишем то, что хотим. Опять же, лучше на английском. Для добавления новый папок служит иконка слева от «красного крестика».
    Нам понадобятся минимум 4 папки:
    • 1. Под пользовательские данные (наши файлы).
    • 2. Под драйвера LCD (те, что в комплекте).
    • 3. Для кода работы с Flash.
    • 4. Под SMSIS и подобие SPL.



  • 7. После того, как переименовали все папки, жмем «ОК». Каталог должен иметь примерный вид.



  • 8. Далее нам нужно достать все эти файлы. Брать мы их будем из рабочего демонстрационного проекта. Кстати. Только сейчас заметил, что проект был написан под keil 2. Это меня немного поразило. Еще одним интересным фактом стало то, что между демонстрационным проектом «2» и «3», судя по информации последнего изменения — прошло 3 месяца. Причем к нашему времени ближе работающий проект. Из него и будем брать файлы (где достать этот демонстрационный проект – сказано в предыдущей статье-обзоре). Скопировать нужно выделенные файлы. Причем main.c (как и любые свои файлы) лучше убрать в отдельную папку. Я для этого создал папку User и туда поместил main.c (его мы изменим и будем базироваться на нем).



  • 9. Далее нам нужно добавить файлы библиотеки в проект. Добавление происходит следующем образом. Щелкаем правой кнопкой по нужной папке в дереве проекта и выбираем «Add Existing Files to Group ‘Имя группы’…».



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



    Добавить нужно:
    • 1. В папку User -> «User -> main.c». Это наш самый главный файл. Чуть изменив его, мы начнем писать свой код именно в нем.
    • 2. В папку Flash -> «flash -> MilFlash.c». Здесь хранится библиотека для работы с Flash контроллера.
    • 3. В папку LCD -> «mlt -> mlt_lcd.c». Библиотека работы с LCD, который установлен на плате.
    • 4. В папку SMSIS_and_Drivers -> «Libraries\1986BE9x_StdPeriph_Driver\src -> все файлы .c». Тут хранится аналог SPL у STM32. Проще говоря, это «обертки», которые позволяют не вдаваясь в структуру контроллера управлять его периферией (выводы, uart и т. д.).
    • 5. В папку SMSIS_and_Drivers -> « Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm -> startup_1986be9x.s». Это файл «стартап». Тут прописаны все «вектора переходов». Иначе говоря, по любому прерыванию (к примеру, нажатие кнопки) контроллер возвращается к этой таблице и смотрит, куда ему перейти, чтобы выполнять код дальше.
    • 6. В папку SMSIS_and_Drivers -> «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm -> system_1986BE9x.c».

    Итогом должно стать такое дерево.



  • 10. Далее нам нужно немного почистить файл main.c. Для этого кликаем на него щелчком левой мыши в дереве каталога. Удаляем все, кроме оболочки функции main и #include файлов. Должно остаться так.



  • 11. Как можно было заметить, около самого верхнего #include файла стоит крестик. Keil просто не видит данного файла. Для того, чтобы исправить это, мы должны указать ему, где ему брать этот файл. Для этого жмем Alt+F7. В открывшемся окне переходим во вкладку C/C++. Маленькое отвлечение. В будущем я часто буду использовать приемы, которые keil не будет понимать по умолчанию. Для того, чтобы исправить это, нужно нажать галочку около надписи «C99 Mode». Это даст возможность писать на более совершенном стандарте языка Си, чем это можно было делать изначально. Далее следует нажать на прямоугольник с «…» внутри. Справа около строчки с подписью «Include Paths».



  • 12. В открывшемся окне нажимаем на иконку с прямоугольником, слева от крестика. Это создаст пустую строку. В правом углу созданной строчки жмем на «…». После чего указываем нужную папку, в которой лежат интересующие нас файлы. После этого жмем «ОК». Папка будет добавлена. Необходимо добавить все эти пути. Если вы заметили, то все ссылки кроме одной – относительные. То есть идут от корневого каталога. Но 1 идет начиная от «C:\». Это ссылка на сам каталог с проектом. Его тоже следует указать.



    Жмем «ОК» и переходим в файл 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». После выбрал подходящий вариант.

В итоге получился такой код.



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



Русские комментарии в keil 5


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



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



Мигаем светодиодом

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



Зашиваем и радуемся! Скорость взята по опыту мигания светодиодом на STM32. Светодиод мигает с частотой примерно раз в секунду.

Все. Вроде бы ничего не упустил. Советую этот проект сразу же заархивировать. Чтобы потом использовать как заготовку.

Проект прилагаю к статье.

Еще раз напоминаю. В настройках проекта есть одна ссылка к директории проекта относительно «C:\». Так что проект будет работать лишь по тому же пути, что и в статье. Вы легко можете сменить путь и свободно пользоваться.
Спасибо sguwenka за исправления.

Комментарии (34)


  1. shtirlitsus
    08.04.2015 21:46
    +2

    За труд, конечно, спасибо. Но судя по объёму статьи — это не для начинающих. На моей памяти самый сложный способ мигать светодиодом. Хорошая ирония «Для нетерпеливых — итог» — видео доставляет


    1. progchip666
      08.04.2015 22:11
      +6

      Мне кажется подход у товарища очень правильный.
      Его цель лучше познакомить читателей с архитектурой процессора. Понятно что на ардуинке код будет выглядеть куда проще, но для серьёзных задач такой подход не годиться. Я вообще за то чтобы перед тем как пользоваться высокоуровневыми библиотеками изучить архитектуру камня на которым работаешь. Если ты собираешься делать в дальнейшем серьёзные проекты это очень сильно поможет!


    1. IVAN2001
      10.04.2015 14:51

      А что тут сложного? Все примитивно. Это же не ардуина!
      Подробно рассмотрена настройка универсальной IDE, а сам «способ мигать» элементарный. Тем, кто делает паузы через «нужное количество» nop, честно говоря, хочется руки по отрывать. Тут используются таймеры… Дергать ногой можно было вообще в обработчике (правда за это, то же некоторые по рукам бьют), либо (что самое правильное) написать менеджер, который бы вызывался с определенной периодичностью, проверял состояние флага и выполнял инверсию (либо другие нужные действия) ноги.
      А то, что «не для начинающих» видно из названия статьи. Раз уж вы переходите с STM32 на отечественного производителя, то и про таймеры и про прерывания должны знать.


      1. Vadimatorikda Автор
        10.04.2015 15:11

        Тем, кто делает паузы через «нужное количество» nop, честно говоря, хочется руки по отрывать. Тут используются таймеры

        В следующей статье рассмотрено именно мигание с использованием SysTick. После будет с использованием таймера. А после и ОС. Потерпите. Не все сразу.
        Дергать ногой можно было вообще в обработчике (правда за это, то же некоторые по рукам бьют), либо (что самое правильное) написать менеджер, который бы вызывался с определенной периодичностью, проверял состояние флага и выполнял инверсию (либо другие нужные действия) ноги.

        В будущем будет рассмотрена связь с ОС. В которой все это будет.


        1. IVAN2001
          10.04.2015 18:02

          На всякий случай поясню, что я не пытался критиковать реализацию в статье. Она вполне соответствует поставленной задаче — продемонстрировать работу контроллера.
          Спасибо за статью и продолжайте в том же духе.


  1. progchip666
    08.04.2015 22:06
    +8

    Меня вот что интересует. Почему в то время как сегодня в стране вроде как взят курс на собственное ПО для всего и вся, военная контора ориентирует пользователей на Keil и IAR? Легальные дистрибутивы которых от них стоят очень и очень приличных денег, а главное разрабатываются в странах вероятного противника.
    Очень странный подход для настоящих джидаев.
    Может они хотят нанести максимальный урон врагу используя не лицензионные копии?
    Вообще я к продукции обоих этих фирм хорошо отношусь, но надоело пользоваться лекарствами, а покупка их софта слишком дорогое для меня удовольствие. В результате перешёл на бесплатный кокос.


    1. FishDude
      08.04.2015 22:15

      Мне кажется, что про «наиболее вероятного противника» — это не тот случай: объем памяти кристалла просто не позволит засунуть в него какого-либо зловреда.


      1. MichaelBorisov
        09.04.2015 00:47

        Сколько же там памяти? Я думаю, на зловреда хватило бы и 200-500 ассемблерных инструкций в ПЗУ и десяток ячеек ОЗУ. Многие вирусы под MS-DOS были сравнимых размеров.


      1. progchip666
        09.04.2015 02:27
        +4

        Зловреда вряд ли, но вот например эти системы проектирования в один прекрасный момент могут выйти из строя или информацию собирать…
        А если честно то это уже дело принципа. Большинство политических решений за последние полтора года обусловлено далеко не здравым смыслов. И уж если гнуть эту политику и дальше, то непонятно почему чиновники должны работать на офисных программах с открытым кодом а оборонщики, которые делают свои кристаллы использовать системы разработки своих противников, при том что существуют не плохие системы с открытым исходным кодом.
        Странно как то всё это.


        1. mva
          09.04.2015 09:02
          +1

          вот, кстати, я пока топик читал? у меня тоже возникла подобная мысль. В том числе по поводу ОС на скриншотах.

          Ну и слишком много в проекте GUI-возни и возни с IDE, при том, что и то и другое к самой теме «посвящения в работу с микроконтроллером» относится весьма и весьма относительно…

          ? кстати, пока дочитал до конца — как обычно забыл где именно встречались опечатки… ув. НЛО, если вы это читаете — запилите уже, наконец, отправку автору опечаток по Ctrl+Enter, ну пожааааалуйста!


          1. Vadimatorikda Автор
            09.04.2015 09:30
            +1

            Записывайте, пожалуйста, их где-нибудь. Я с радостью внесу правки и укажу, кем они были сделаны.

            Ну и слишком много в проекте GUI-возни и возни с IDE

            Ее больше не будет. Мы настроили Keil 5 и проект в нем. Теперь можно начать программировать. Если и будет что по настройке — то это мелочи, которые я мог упустить.
            что и то и другое к самой теме «посвящения в работу с микроконтроллером» относится весьма и весьма относительно

            Лично для меня это была самая большая проблема. Плата пролежала на столе 2 недели. Каждый день я смотрел на нее и хотел начать, но мысль о том, что пришлось бы потратить несколько часов на настройку — отпугивала до последнего.


          1. IVAN2001
            10.04.2015 14:54

            Ну с keil'ом, как раз, мало возни. Вы почитайте про запуск STM32 в eclipse под Linux…


    1. vv_kuznetsov
      09.04.2015 09:37
      +2

      У меня возникла такая же мысль. Например, чтобы мне сейчас импортозаместиться, мне нужно купить зарубежную ОС и зарубежные среды разработки. Тем самым финансово поддержать «вероятного противника». Взять «отечественную» ОС (например какой-нибудь AltLinux) и начать разрабатывать под отечественный МК нельзя. Причём для импортных МК вполне успешно можно заниматься разработкой под отечественной ОС. Теоретически даже наверное под ОС Эльбрус можно пересобрать тулчейны для разработки например для STM32 или MSP430. Но здесь сам МК нужно покупать у «вероятного противника».

      Так что получается, что в результате импортозамещения нет никакой разницы с этой точки зрения. Где-то здесь нарушена логика, т.к. логично что русский МК должен программироваться из русской ОС.

      Читал на форуме Миландра, что они не занимаются разработкой инструментальных средств под Linux, но «интересуются данным направлением». Интересно, кто-нибудь здесь знает как у них обстоят дела с этим направлением сейчас?


      1. Gorthauer87
        09.04.2015 09:56
        +2

        А в чем собственно проблема? Ядро там, как я понял, cortex-m3, который хорошо поддерживается в gcc, нужно только startup файл переписать и накатать ld скрипт для секций, после чего можно с минимальным напильником собирать код из Keil'а.


      1. iliasam
        09.04.2015 10:10
        +1

        Есть пример работы с CoIDE, есть пример работы с Eclipse.


        1. IVAN2001
          10.04.2015 14:59

          Спасибо за ссылки. В комментариях к прошлой статье я спрашивал про Eclipse, но ответ был отрицательный.


      1. BaRoN
        09.04.2015 15:53

        Да думается, никто бы не возражал, если бы дела обстояли так, что все дружно перебираются на своё ПО, потому что оно полностью написано и потому что оно самое-пресамое во всём белом свете. Но пока ж нету, так что о чём тут говорить?
        Думается, можно на обычном gcc скомпилировать программу. Можно допилить какое-нибудь свободное ПО, чтобы оно составило конкуренцию ПО «вероятного противника». Можно даже внаглую не поддерживать вероятного противника рублём.

        Конечно, будет совсем неплохо, если своими силами получится сделать среду разработки лучше, чем «зарубежные аналоги». Ещё лучше — если такой средой начнут пользоваться по всему миру, потому что она хорошая. Но думается, такие вещи в одночасье не делаются.


  1. nomadmoon
    09.04.2015 07:35
    +2

    > но проект с номером «2» так и не запустился, а в проекте «3» почему-то в меню выбора контроллера чистый лист. Это меня как-то насторожило. Проекта с номером «1» нет в принципе.

    Напоминает анекдот про русского и два больших железных шара в пустой запертой комнате :)


  1. sguwenka
    09.04.2015 10:39
    +6

    1. Вся статья написана в духе «это какое-то шаманство, но делайте так — и всё заработает», особенно вот эта фраза:

    Сознательно не удаляю ту часть файлов, которую не использую, потому что некоторые важные файлы, хоть и косвенно, но ссылаются на них. Поэтому лучше скопировать все.

    Надо было разорбраться и чётко написать, почему эти файлы и где используются. Вы уж определитесь, нужные это файлы или не нужные.

    2. Магические числа, «непонятно откуда», но внезапно и удачно всплывающие имена полей структур… Больше напоминает первое знакомство человека с системой.

    3. ИМХО очень плохой подход — копировать из библиотеки отдельные файлы для использования. Надо наоборот учить людей, что лучше подключать целую готовую библиотеку, желательно предварительно слинкованную статически! И не надо будет её каждый раз компилировать вместе со всем проектом. Неиспользуемые файлы исключать из списка компиляции Keil умеет, через свойства по ПКМ на файле.

    Tutorial таким быть не должен.

    А вообще, солидарен с мнениями комментаторов, что лучше под open-source IDE изучать разработку. Тем более, более универсальные среды. Сам пишу под все МК в Eclipse, в том числе под 1986ВЕ9х.


    1. progchip666
      10.04.2015 08:50

      Не смотря на то, что в целом с вами согласен думаю не стоит судить автора так строго. Он и так копнул весьма глубоко и честно предупреждал что это его первое знакомство с прибором. Для первого знакомства он пожалуй даже слишком всё подробно описал.
      Понятно что нет смысла писать свою среду разработки, но вот помочь разработчикам с работой под Eclipse Миландр вполне мог бы. Не так много ресурсов на это требуется.


      1. sguwenka
        10.04.2015 14:35

        У меня сложилось впечатление, что сейчас наоборот — разработчики помогают Миландру с работой под Eclipse, в части адоптации библиотек под GCC.


  1. silentz
    09.04.2015 10:57
    +1

    Заинтересовал данный МК. Решил у производителя спросить как можно купить данный чип, т.к. у их партнеров в Терраэлектронике данный чип не выставлен на продажу. Оказалось что пока никак не возможно купить чип. Фабрика которая делает пластиковые корпуса пока задерживает производство. И ближайшая партия ожидается в июне-июле. Жаль. Кстати стоимость МК у официального торгового дома «Миландр ЭК» — всего 165 рублей — очень заманчиво для промпроизводителей мне кажется — вот их прайс.


    1. progchip666
      10.04.2015 09:42

      А Вас, уважаемый, не смущает дата, указанная на этом прайсе? Осень 2013 года. А так же то что в 2014 году надо было ждать пол года чтобы получить всего навсего один экземпляр из этого прайса по цене в два раза выше, да ещё долго объяснять зачем он нужен?
      Вы видно мало имели дел с нашими производителями. Я работал бренд менеджером в фирме торгующими электронными компонентами и у меня есть очень хорошие знакомые в службе продаж Ангстрема. Вы даже представить себе не можете насколько разные подходы у первых и вторых. Я ещё мы как то раз пробовали заложить в наши изделия керамические резонаторы от того же Ангстрема, которые тоже были в прайсе и по весьма хорошей цене. Кстати и качество было удовлетворительное. Не хочу даже вспоминать, что из этого вышло.
      Честно говоря я буду очень рад, если вы заложите эти контроллеры в своё изделие. Уверен что после этого на Хабре появится очень интересная статья.


  1. Vadimatorikda Автор
    09.04.2015 11:32
    +1

    1. Вся статья написана в духе «это какое-то шаманство, но делайте так — и всё заработает», особенно вот эта фраза:
    Сознательно не удаляю ту часть файлов, которую не использую, потому что некоторые важные файлы, хоть и косвенно, но ссылаются на них. Поэтому лучше скопировать все.

    Да, действительно. Звучит не очень хорошо. Исправил.
    2. Магические числа, «непонятно откуда», но внезапно и удачно всплывающие имена полей структур… Больше напоминает первое знакомство человека с системой.

    Честно сказать, про эту фичу нигде ранее не читал (ни в одном уроке, во время изучения мною STM32, об этом написано не было). Поэтому решил напомнить о ней. Посчитал, что лишним не будет.
    3. ИМХО очень плохой подход — копировать из библиотеки отдельные файлы для использования. Надо наоборот учить людей, что лучше подключать целую готовую библиотеку, желательно предварительно слинкованную статически! И не надо будет её каждый раз компилировать вместе со всем проектом. Неиспользуемые файлы исключать из списка компиляции Keil умеет, через свойства по ПКМ на файле.

    Исправил. Сообщил, что копируем всю библиотеку. Объяснил, за что отвечает каждый добавленный файл.
    желательно предварительно слинкованную статически!

    После того, как 1 раз компилируешь проект — библиотеки при последующей компиляции не изменяются.
    Tutorial таким быть не должен.

    Только начинаю писать. Просто не хочется, чтобы накопленный опыт пропал. Рад любым правкам.
    Просто так случается, что со временем забываешь, как работают собственные библиотеки… И когда-то очевидные вещи кажутся ужасно непонятными. Это одна из причин написания этой серии статей.
    А вообще, солидарен с мнениями комментаторов, что лучше под open-source IDE изучать разработку. Тем более, более универсальные среды. Сам пишу под все МК в Eclipse, в том числе под 1986ВЕ9х.

    Мне очень по душе Keil. Чем-то он пленил меня. С Eclipse так и не смог наладить контакт. Но это уже индивидуальные особенности. Keil не накладывает ограничений на обучение. 32-х киллобайт вполне хватает на то, чтобы беспрепятственно изучить контроллер и начать разрабатывать интересные вещи.


    1. Vadimatorikda Автор
      09.04.2015 11:37

      В последующих статья постараюсь излагать материал менее эмоционально, более сжато и понятно.


    1. progchip666
      10.04.2015 09:47

      Keil мне тоже очень нравится. Только в этом году от него отказался.
      Однако на сколько я помню в бесплатной версии не работает симулятор, а ведь это главная его фишка, ради которой я им и пользовался. Можно отладить большую часть программы и проверить правильность конфигурации без использования внутрисхемного отладчика, не имея даже камня на руках.
      Что касается совета всегда использовать библиотеки только в полном составе мне он кажется спорным.


      1. Vadimatorikda Автор
        10.04.2015 10:22

        Однако на сколько я помню в бесплатной версии не работает симулятор

        Не правда. Работает. И очень даже хорошо. В статье про тактирование микроконтроллера (сегодня постараюсь дописать и выложить), будет сказано об отладке.


      1. IVAN2001
        10.04.2015 15:07

        С тех пор, как попробовал Eclipse, вспоминаю IAR и Keil как страшный сон. Конечно, компилятор в IAR, а симулятор в Keil неподражаемы. Eclipse не может их заменить. Если программная часть проекта небольшая, то все ок. Но для больших проектов Eclipse гораздо удобнее.


  1. vertu77
    09.04.2015 12:00
    +1

    Здорово что стали появляться такие статьи.

    Один нюанс — надо внимательно смотреть на каком порту хотим мигать светодиодом.
    Если этот порт используется для JTAG\SW (порты F и D) — даже если пин светодиода не пересекается с пинами JTAG, после первого мигания заливка прошивки и отладка по этому порту станет невозможна.
    Чтобы такого не случилось, на форуме Миландра предлагают такой способ:

    temp = MDR_PORTD->RXTX;
    temp &= ~(31);
    temp&=~( PORT_Pin_10 );
    MDR_PORTD->RXTX=temp;

    Способ рабочий, хотя несколько некрасивый. 31 — это 0b11111, то есть надо писать нули во все пины, относящиеся к JTAG/

    Если все-таки JTAG порт умер — что делать:
    1. Тогда может пригодится другой JTAG порт. Если он не разведен на плате, можно припаяться только к ножкам SW на другом порту (меньше возни)
    2. Залить прошивку через UART (штатный загрузчик)
    3. Использовать особенности зашитой программы — успеть прошить новую заливку после подачи питания до первого мигания. В варианте автора это практически невозможно. В реальных программах часто программа запускается от внутреннего генератора, затем инициализируется внешний кварц. Если при этом используется бесконечный цикл ожидания — можно отпаять кварц и прошиться до первого мигания.

    /* Enable HSE */
    RST_CLK_HSEconfig(RST_CLK_HSE_ON); // включили генератор на кварце
    while (RST_CLK_HSEstatus() != SUCCESS) { }


    В этом примере используются функции библиотеки Миландра для своих микроконтроллеров (есть на их сайте).
    Инициализация портов с использованием этой библиотеки несколько отличается от решения автора статьи. Как пример:

    PORT_InitStructure.PORT_PULL_UP = PORT_PULL_UP_ON;
    PORT_InitStructure.PORT_PULL_DOWN = PORT_PULL_DOWN_ON;
    PORT_InitStructure.PORT_PD_SHM = PORT_PD_SHM_OFF;
    PORT_InitStructure.PORT_PD = PORT_PD_DRIVER;
    PORT_InitStructure.PORT_GFEN = PORT_GFEN_OFF;
    PORT_InitStructure.PORT_FUNC = PORT_FUNC_PORT;
    PORT_InitStructure.PORT_SPEED = PORT_SPEED_MAXFAST;
    PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
    PORT_InitStructure.PORT_OE = PORT_OE_OUT;
    PORT_InitStructure.PORT_OE = PORT_OE_OUT;
    PORT_InitStructure.PORT_Pin = PORT_Pin_10;
    PORT_Init(MDR_PORTC, &PORT_InitStructure);


    1. Vadimatorikda Автор
      09.04.2015 18:26

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


    1. lomalkin
      09.04.2015 22:09

      А разве нельзя в случае подобных проблем поменять конфигурацию BOOT0 и BOOT1 джамперами/переключателями, а потом подать питание, после чего камень запустит неизменяемый загрузчик, и прошиться в этом режиме?


      1. vertu77
        09.04.2015 23:04

        Да, это я назвал «2.Залить прошивку через UART (штатный загрузчик)».
        Для этого подойдут контакты, выведенные под JTAG (PD0-1 или PF0-1). Keil и J-Link тут уже не помогут, нужен преобразователь UART и отдельный загрузчик на компьютере (на форуме Миландра есть обсуждение).


  1. resetnow
    09.04.2015 19:52

    Документация, набранная в Word — это для сильных духом. Хоть бы шрифты sans-serif использовали, что ли. И моноширинные для кода.


    1. encyclopedist
      09.04.2015 20:04
      -1

      А скриноты — в JPEG!