ARM — это сложно…?

После моей недавней статьи на хабре про рвущие все по цене армы было высказано много мнений, что ARM-у нужна 4-6-слойная плата, ну уж 2 то как минимум, и куча обвязки.

Я решил попробовать доказать, что это далеко от истины, и сделал платку, проще которой трудно: 1 сторонняя, 1 обязательный конденсатор (до стабилизатора не обязательно), 1 резистор, один стабилизатор 3.3V, и наконец младший STM32 : STM32F100C4T6B - 16кб флеш, 4кб SRAM, 48 ног, Cortex-M3(!!!) с DMA, дебагом на лету, 32*32+32->32 за 1 такт и всеми прочими радостями за 28 рублей.


Программируется/дебажится это через китайский J-LINK за 24$, но весь JTAG-разъем я не распаивал: 5 контактов на плате захватывают только 2 необходимых контакта SWD(serial wire debug), и контакт определения напряжения питания JLINK-ом (используемые контакты от кабеля программирования подкрашены справа, чтобы такая схема работала нужно чтобы была общая земля у компьютера и платы - проще всего это получить питая схему от USB). Аппноут настоятельно рекомендует по отдельному конденсатору на каждую ногу питания - однако я шумов по питанию на самых дальних ногах питания выше 50-100мВ не увидел вплоть до 2нс диапазона не смотря на то, что использую всего 1, так что жить можно, особенно учитывая что чувствительное ядро питается от внутреннего стабилизатора (впрочем, нужно учитывать что дороги питания у меня несколько толще чем обычно используют). Но конечно нужно помнить, что это скорее proof-of-concept, для "боевых" применений делать придется как положено с 5-ю конденсаторами.

Изготавливается лутом - дороги 0.25-0.3 мм, что не смертельно, хотя и требует немного сноровки (в конце концев, это не 0.1мм). Опознается, шьётся и даже дебажиться кейлом без проблем :-) Себестоимость такой платки получается меньше 100 рублей (напомню, ARM этот стоит 28 рублей в розницу в терраэлектронике).

Схема и разводка для Eagle - прилагается. Впрочем, не ругайтесь за кривой символ МК - рисовал как умел - по прежнему ищу полную библиотеку STM32 чипов.



В рабочем состоянии выглядит так. Неотмытый флюс конечно сразу бросается в глаза - он был нужен чтобы не коротили ножки :все покрывается жидким флюсом вроде ЛТИ-120 и греется - припой автомагически растягивается по ногам, и коротких замыканий нет. ЛТИ-120 ток особо не проводит, так что практического смысла отмывать для "домашней" платы нет, а спирта всегда жалко :-)

Еще раз подчеркну - все это вполне реально делается дома, утюгом и обычным паяльником (с регулируемой температурой, а не 200Вт-ным конечно). 4-х слойной платы не нужно, паяльной станции с феном не нужно.

Для программирования качаем демо-версию IDE keil (дебагер/компилятор/редактор) - для мелких мк работает без ограничений (но прямой ссылки дать не могу, ищите). Тестовую программу берем готовую тут, и остается только заменить код в main() (и поменять файл с настройками через wizard чтобы нога PA1 была выходом и работал мк от внутреннего генератора - см. вкладку "Configuration WIzard внизу при редактировании вайла с настройками"):
int main (void) {
  unsigned int hash = 0;
  int i = 0;
  stm32_Init (); // STM32 setup
  while (1) {
    for(i=0;i<50000;i++)
      hash=(hash*hash+1234567)/hash+hash+87654321; 
    GPIOA->ODR = (GPIOA->ODR & (~2)) | ((hash&256)?2:0);
  } // end while
} // end main
Настраиваем JLink: Ставим для него драйвера, затем в Keil: Flash->Configure Flash Tools. На вкладке Utilities выбираем JLINK, и жмем Settings. На вкладке Flash Download добавляем Programming algorithm "STM32F10x Low-density Flash".

Теперь билдим проект, и в меню выполняем Flash->Download, перезагружаем плату - и... оно работает. И кстати не отходя от кассы можно дебагером остановить программу, поставить брекпоинты, посмотреть переменные - все как в лучших домах


Вы все еще покупаете 8-и битные AVR-рки по 200 рублей? Тогда ARM идет к вам!

RSS@BarsMonster3@14.by