Pull to refresh
88
0
Вадим Дерябкин @Vadimatorikda

Инженер-программист

Send message
после запуска не дает корректно работать с портом JTAG_B отладчику.

Не дает работать с обоими портами. И JTAG_A и JTAG_B.
Выбираем режим 010 — после перезагрузки «процессор пытается начать выполнять программу из внешней памяти, установленной на внешней системной шине». Тут я думаю имеется в виду скорее внешнее ПЗУ чем ОЗУ, то есть это режим не микроконтроллера, а микропроцессора. Так как там ничего нет, JTAG порт остается рабочим.

Хммммм… Я только неделю разбираюсь с данным контроллером. Вы поставили меня в тупик. Скорее всего, вы правы. Прошу простить мою ошибку.
Он через JTAG порт загружает в ОЗУ с адреса 0x20000000 размером 0x0800 «algorithm for download». Загрузчик запускается в ОЗУ и делает то, что мы его попросили в настройках — например «Erase full chip» с адреса 0x08000000, то есть очищаем внутреннее ПЗУ.

Тоже, честно сказать, не знаю. В низкоуровневой отладке не разбирался.
Как отлаживаться, загружая прошивку в ОЗУ — не знаю. Видел упоминания, что есть такая возможность. Думаю, это будет полезно многим.
Сам делал на этом МК загрузку отдельных модулей программы в ОЗУ из ПЗУ после старта. Keil позволяет делать это достаточно легко. Это, в частности, необходимо если мы захотим использовать часть ПЗУ для хранения пользовательских данных.

У меня по плану стоят еще 4 статьи на тему периферии. После этого я хочу подробнее разобраться как раз таки с памятью и ее разделами.
Спасибо за ваш вопрос. Теперь я знаю, о чем будет 5-я статья после этой.
Не могу понять значение «круче». Когда мы переставляем перемычке в режим 010, то выполнение программы при отладке происходит из ОЗУ. Так как в настройках мы указали адреса Flash, то нажав на Debag, контроллер очищает все ячейки памяти Flash (тоже указали в настройках), прошивает нашей программой, переставляет указатель на начало ОЗУ и начинает «выполнение программы». Так как мы ничего в ОЗУ не писали, то у нас там будут нули. Таким образом, мы получаем программу из кучи нулей и перепрошивку Flash. Отладка Flash, как я понял, в режиме 010, не возможна. Как вариант, изменить значения адреса в настройках. Чтобы программа грузилась не во Flash, а в ОЗУ. Это бы значительно увеличило ресурс контроллера. В нашем контроллере приличное количество ОЗУ. Так что, чисто теоретически, это возможно. Попробую сам сделать это. Напишу в одной из следующих статей.
Тем, кто делает паузы через «нужное количество» nop, честно говоря, хочется руки по отрывать. Тут используются таймеры

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

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

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

Заменил код. Спасибо. В будущем буду выкладывать в png.
Про RTX спасибо. Буду изучать. Но сначала разберу всю периферию без ОС. Раньше пытался подружиться с FreeRTOS, но после недели безуспешных попыток передать двоичный симафор — сдался. Написал свою мини ОС в десяток другой строк и этого хватило.
SysTick->LOAD |= ...;
выглядит странно, не находите?

Ошибка. Спасибо, исправил.
Строго говоря, SysTick — это часть ядра Cortex M3, поэтому работа с ним в разных контроллерах на этом ядре практически идентична.
Полезнее было бы рассмотреть работу с родной периферией миландра в каком-нибудь более-менее реалистичном сценарии. Чтение ADC через DMA, например.

Я знаю. Он нужен для следующего урока, посвященного системам тактирования МК. Для наглядности.
По-хорошему, вам даже не обязательно было трогать регистры; в файле core_cm3.h уже есть готовая функция для его настройки — SysTick_Config.

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

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

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

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

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

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

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

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

Лично для меня это была самая большая проблема. Плата пролежала на столе 2 недели. Каждый день я смотрел на нее и хотел начать, но мысль о том, что пришлось бы потратить несколько часов на настройку — отпугивала до последнего.
На диске море информации по другим продуктам компании. Как мне показалось, по всей их продукции… + демонстрационный видеоролик с предприятия.
image
Примеры (конкретно к этой плате) только под keil. Да и драйвера на официальном сайте лишь под него. Но в папке есть пример настройки под IAR. Если я правильно понял. Не занимался этим. Мне keil ближе. Я перепробовал много различных сред и остановился на нем. Мне очень понравилась возможность напрямую писать в периферию. Так как изначально писал код под STM32 на ассемблере.
Прошу простить… Просто подобные разъемы вижу ОЧЕНЬ не часто. Поэтому для меня это в новинку. Буду осваивать.
Вы можете обратиться к ответственному лицу и поинтересоваться. У меня если и будет потребность в данных МК, то я буду заказывать небольшими партиями. Или в группах ВК. Там есть и самодельные платы под данные МК.
емнип, миландр выпускается отнюдь не у нас, а за бугром.

Чет прочел, и приуныл...
Там одни BNC-разъемы стоят долларов 5, а панелька под TQFP — так и вовсе может на сотню долларов потянуть.

Вот это для меня новость. Когда смотрел на фото платы на сайте и не думал, что эти компоненты стоят так дорого. Вообще считал цену платы завышенной. В одной группе ВК продавалась эта плата. Сейчас тему уже не смог найти.
Кстати, спасибо. Я теперь хоть знаю, как эти разъемы называются… Не приходилось работать ни с чем подобным ранее.
Набор мне был прислан абсолютно бесплатно. После того, как я описал, что школьник и на данный момент уже имею не малые, по своему возрасту, успехи (хотя разработки и не назвать сложными с точки зрения профессионала данной области). Не платил даже за пересылку. Доставили собственной почтой.
12 ...
12

Information

Rating
Does not participate
Location
Красноярск, Красноярский край, Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Embedded Software Engineer
Lead
From 250,000 ₽
C++
STM32
Linux
Circuitry
Python
Assembler
Programming microcontrollers
Embedded system
Software development
Object-oriented design