ARM. Учебный Курс. Подключение контроллера и демоплата

Выбор контроллера
Контроллеров на ядре ARM Cortex множество. И мне пришлось поломать голову чтобы выбрать и взять за основу. В народ уверенно идут две линейки это LPC1xxx от NXP и STM32 от ST. Остальные дорогие и/или труднодоставаемые, либо в неадекватных для домашнего применения корпусах. Решил если брать, то из этой серии. Но какую именно? В результате поковырял и те и другие.

И вот мои соображения:

NXP
Берут низкой ценой. Реально многие из них продаются рублей по 50-80р за микруху. И это в розницу! Может это, конечно, маркетинговая акция и скоро все изменится. Но ситуация такая есть. С другой стороны, у NXP три линейки процов. LPC1000, LPC1300, LPC1700 (про LPC2xxx речь не идет, там ARM7 TDMI ядро).

  • LPC1000 закастрированные донельзя (но дешевые). Там от всех вкусняшек ARM ядра только таймер да 32 разряда. Корпуса от 33 до 48 выводов. Есть даже PLCC, но обычно LQFP.
  • LPC1300 уже интересней, но тоже нет ряда полезных фич вроде DMA или быстрого доступа к портам. Корпус от также от 33 до 48 выводов. Самый адекватный LQFP.
  • LPC1700 уже как в лучших домах есть полный фарш, но камни там с 80ю и более ногами. И куда их такие здоровые?

Причем все три линейки весьма сильно отличаются друг от друга. Т.е. код с LPC1300 копипастой хрен перетащишь на LPC1700. Будут отличаться и имена регистров, и способы доступа к периферии. По разному будет выполняться конфигурация портов. В общем, хочешь перелезть на линейку послабже изучай даташит с нуля. Конечно библиотека CMSIS сильно все сглаживает, но тем не менее от лишнего чтения доков не избавляет. Ну и документация у NXP тот еще аббадон. Давно я такой каши не видел. Бррр

STM
Стоят дороже. Пока самый дешевый STM32F103C8T6 видел за 150р штука. Где найдете дешевле свистните. Но зато у них одна линейка F10x и один даташит на всех. Более того, ходят слухи, что периферия очень похожа и на STM8, так что при случае параллельно раскурим и эти камни 🙂

Процессоры в линейке отличаются только количеством ног и наличием на борту тяжелой периферии вроде USB/Ethernet/CAN. Причем в том же STM32F103C8T6 есть уже и DMA и полноценный BitBanding и все это в корпусе LQFP48 т.е. вполне компактный и паяемый в домашних условиях. Сами камни внутри выглядят более продумаными чтоль. Нет зоопарка периферии на разных линейках. Хорошо расписанные библиотеки CMSIS (о том что это такое расскажу попозже). Т.е. изучил его один раз и можешь уже смело программировать хоть 36 ногих козявок, хоть 100 выводных монстров. Плюс очень многие выводы у STM32F103 имеют 5V Tollerance т.е. их можно смело заводить на пятивольтовую периферию.

В общем, мне STM32 понравился больше. Хотя от применения LPC я не отказываюсь, но подробно на них останавливаться не буду, в лучшем случае вскользь упоминать.

Отладочные средства
Ковырять ARM процессоры гораздо сложней чем всем уже привычные AVR. Там где у AVR два три параметра конфигурации у ARM обычно полтора два десятка разных крутилок и подстроек, да еще разбросанные по разным регистрам и битам. Это очень круто, можно очень тонко оттюнинговать контроллер точно под свою задачу, но мозг опухает мгновенно. Особенно если до этого с контроллерами дела не имел и нет интуитивного понимания где что искать в даташите. Если многие новички в четырех FUSE битах путаются, то что говорить про тактовый генератор STM32? Кто видел Reference Manual раздел Clock Source поймет о чем я 🙂 .

Я тут недавно наступил на грабли в STM32. Пытаюсь диодиком помигать, а оно не мигает. Уже все проверил, порт настроил. Проштудировал раздел портов вдоль и поперек. Все в отладчике вроде бы работает, в симуляции Keil uVision мигает, а в железе ни в какую. Глюк жтага? Но так без него тоже не мигает. Только после вдумчивого раскуривания примеров и чуть ли не побуквенного чтения даташитов увидел маленькую отсылку в совершенно другой раздел в раздел настройки тактового генератора, где было сказано, что периферия от тактового генератора по дефолту отключена и надо бы ее включить. Включил заработало. Вот шайтан!

В общем, тыкаться там вслепую дохлый номер. Потратишь кучу времени и нервов. Куда проще отлаживать видя, что программа у тебя выполняется, команды проходят, биты ставятся. Чем гадать где у тебя косяк в железе, софте, настройках, программаторе или везде одновременно. Благо все Cortex контроллеры на борту имеют встроенный отладочный интерфейс. Нужен только адаптер. И тут у нас раздолье.

Во первых полно предложений от производителей. Вроде LPC Expreso всяких. Стоят копейки. Та же LPC Expresso продается в районе 800рублей. Есть что то похожее и для STM. Но вот незадача, хитрые производители делают так, что их отладчики можно юзать только с их контроллерами.

Т.е. тот же LPCLink можно подключить только к контроллерам LPC1xxx и работать только из среды CodeRed которая хоть и удобная (т.к. на базе Eclipse), но по функционалу сильно проигрывает Keil uVision.

В общем, побаловался я с Экспресской и забросил в дальний ящик. Погуглил и нашел один интересный открытый проект CoLinkEx. Поддерживает SWD и JTAG режимы. Отлично интегрируется с Keil, а также имеет свою бесплатную среду CoIDE с кучей примеров под разные камни.


тык крупнее

У CooCox есть и еще ряд интересных примочек. Например подобие операционной системы, а также всякие надстройки и примочки. В общем, есть что поковырять.

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

По России почта первого класса носится вполне быстро. От Челябинска до Нижнего Тагила 3 дня. До Москвы 6-10 дней.
Можно найти и в инете, у китайцев. На том же сайте CooCox.com этот отладчик продается за 30 чтоль баксов. Только ехать будет заметно дольше.

Еще есть упрощенный вариант отладчика CoLink работающий только по протоколу JTAG и использующего возможности bitbang микросхемы FTDI. Для его реализации нужна лишь FT2232 и простейшая обвязка из логики и пары транзисторов. Я из этой самой обвязки я и соорудил вот такой вот модуль:

Просто добавь FTDI! Его можно поставить либо на демоплату Pinboard II:

Либо на отдельный модуль FTDI который является не чем иным, как выдранным из Pinboard II узлом с FT2232 и парой дополнительных деталек:

Получившийся в результате JTAG отладчик прекрасно работает со средой Keil, IAR или CoIDE. Очень надежный и крайне стабильно себя ведет. С хорошим откликом. Один минус не поддерживает SWD режим, так что какую нибудь LPC1343 им не поотлаживаешь. Тут нужен уже CoLinkEX или что то из той же оперы.

Маркировка линейки STM32
Возьмем, к примеру STM32F103C8T6

  • STM32 эт понятно 🙂
  • F103 серия контроллеров на Cortex M3 (есть еще 101,102,105,107)
  • C число ног (T=36,С=48, R=64, V=100)
  • 8 размер флеша (8 = 64Kb, B=128Kb)
  • T тип корпуса (H=BGA, T=LQFP, U=VFQFPN)
  • 6 температурный диапазон (6 =-4080, 7=-40105)

Необходимая документация:

  • STM32F103x8 Даташит. Там нифига интересного нет. Только распиновка конкретного чипа, да энергопотребление.
  • RM0008 Reference manual полное описание периферии всей линейки F10x. Без него никуда, вся инфа лежит тут.
  • AN2586 STM32F10xxx hardware development описание подключения.
  • AN2867 Oscillator design guide описание подключения кварцевых резонаторов и всякие точные рассчеты соглассующих элементов для идеальной работы в любых условиях.

Подключение STM32F103C8T6
Игры с любым микроконтроллером обычно начинаются с подключения. Демоплата удобна для работы и изучения периферии, но нам же в реальные устройства их вкорячивать! Поэтому поглядим на включение.

Я под это дело развел небольшую макетную плату. Не могу сказать, что это верх совершенства, но вполне функционально. Потом сделаю что нибудь получше. Это так, на первое время:


Зазырить в полный рост

  • Загоняется питание на все выводы.
  • Все земли сажаем не землю.
  • Сброс подтягиваем к питанию. Сбрасываем прижимом на землю.
  • Выводы Boot1 и Boot0 выводим на джамперы. Ими задается режим работы бутлоадера.
  • Выводы отладки (JTDI/JTDO/JTCK/nREST) сажаем на колодку к JTAG адаптеру. Туда же заводим и nReset.
  • Кварцы я подключал по Hardware Reference через резистор в 100 Ом. Но в даташите указано подключение без резистора. Так что тут решайте сами. Думаю будет работать в обоих случаях. К выводам IN_OSC/OUT_OSC подключается основной квар. К выводам IN_OSC32/OUT_OSC32 часовой кварц на 32768 Гц. Часовой кварц не обязателен, но пригодится для часов реального времени.
  • Вывод VBAT это для батарейного питания. Его можно через диоды развести на батарейку, а можно и просто питание туда подать если батарейка не нужна.
  • Аппаратный USB подключается через резисторы в 33 Ом. Но на практике прокатывает и 68 Ом. Ставил их за неимением других. Никаких проблем, в отличии от капризного V-USB.

Проект с отладочной платкой:

Платка вполне делается лазерным утюгом, толщина дорожек 0.20.4мм Если вас это не пугает дерзайте. Там правда есть парочка мелких ошибок. Например, резисторы заехали под кварц, поэтому кварц либо запаивать снизу, либо передвинуть резистор. Мне же пришлось кварц немного вывесить. Впрочем иначе его и не пропаять. Металлизации то у нас нема 🙂 Также рекомендую дорожки от потенциометра перебросить на Bottom. Иначе их неудобно под корпусом потенциометра пропаивать.

У меня получилось вот такая вот штуковина.

Вот фотка запаяного проца крупным планом. Все вполне паяется и ничего страшного :))))

Архив с проектом схемы в формате Eagle CAD 5
А также в архиве лежит моя библиотечка с STM32F103C8 где расписана вся периферия, а точками отмечены выводы с поддержкой толерантности к 5 вольтам.

▌Pinboard II
Также мной был разработан вот такой вот сменный модуль для демоплаты Pinboard II

На борту тот же самый STM32F103C8T6, а отлаживается все через поставленную на Pinboard плашку с обвязкой CoLink, только шлейфик накинуть. Cхема модуля похожа на схему самодельной демоплатки, разве что интерфейсы все остались на базовой плате.

  • Подробное описание модуля STM32F103C8T6 и отладчика CoLink
  • Быстрый старт
  • Схемотехника модуля (Eagle CAD)

В следующий раз дам краткий ликбез по ядру и созданию проектов, а также библиотеке CMSIS

5 1 голос

Оцените статью!

guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии