Меню Рубрики

Программирование микроконтроллеров в mac os

STM32 на MAC OS

Как то раз я понял, что для реализации моей идеи мне не обойтись одними транзисторами и самодельными RS тригерами, и пора начинать работать с микроконтроллерами.

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

Из-за простоты необходимых мне возможностей я остановился на PIC, но коллега вовремя наставил меня на путь праведный и сказал копать в сторону STM и AVR, так как себестоимость не на много больше а возможности на порядок выше.

И вскоре я приобрел отладочную плату STM32F4 Discovery kit for STM32F407

В первый день носился с ней по дому и радовался как мигают LEDы и работает гироскоп. Но пора бы начать и самому писать программы. После 30 минут гугления я понял что 95% решений описанных в интернете работают под Windows, а счастливые обладатели Linux и Mac OS гуляют лесом. Я провел 3 дня по вечерам в поисках решений и в итоге имеем полный мануал как начать программировать под STM32 под Mac OS.

Сначала необходимо поставить среду разработки. В нашем случае это будет Eclipse(Indigo R Eclipse IDE for C/C++ Developers Mac Cocoa 64-bit). Идем по ссылке Eclipse качаем и устанавливаем.

GNU ARM toolchain

Можно скачать с официального сайта http://www.gnuarm.com/files.html. Но почему то при попытке запуска arm-elf-gcc или arm-elf-g++ возникает ошибка — Bad CPU type in executable. Почему? Я ещё не разобрался. Поэтому даю ссылочку на мой fork репозитория arm.

Давайте его выкачаем — git clone github.com/jsnyder/arm-eabi-toolchain.git
Теперь надо поставить все необходимые пакеты — brew install mpfr gmp libmpc texinfo
Далее идем выкачанную директорию — cd arm-eabi-toolchain
И выполняем:
mkdir -p $HOME/arm-cs-tools/bin
export PATH=$HOME/arm-cs-tools/bin:$PATH
CC=clang make cross-binutils cross-gcc cross-g++ cross-newlib
make cross-gdb
export PATH=$HOME/arm-cs-tools/bin:$PATH
make clean

ST-LINK

Идем сюда качаем и устанавливаем как написано в README. Тут можно почитать по дебагер ST-LINK.

Настройка

Теперь начинаем все связывать воедино.
Запускаем Eclipse. Идем в Help -> Install New Software. Нажимаем ссылку Available Software Sites. Находим CDT Juno, ставим галочку и жмем OK. Теперь в поле Work with выбираем CDT Juno. В появившемся списке ищем GCC Cross Compiler, ставим галочку а потом кнопку Finish.

Теперь мы можем создать нужный нам проект.
Идем в File -> New -> C++ Project. Выбираем Executable Cross Compile Project, даем ему имя и нажимаем Finish.

Теперь у нас есть пустой проект и нужно его настроить.
Выбираем наш проект, нажимаем правой кнопкой и идем в Properties -> C/C++ Build -> Settings.
В Cross GCC Assembler -> General -> Assembler flags пишем -mthumb -mcpu=cortex-m4
В Cross GCC Compiler -> Miscellaneous -> Other flags пишем -c -mthumb -mcpu=cortex-m4
В Cross G++ Compiler -> Miscellaneous -> Other flags пишем -c -mthumb -mcpu=cortex-m4
В Cross GCC Linker -> Miscellaneous -> Linker flags пишем:
-T «$/stm32_flash.ld» -mthumb -mcpu=cortex-m4 -Wl,-Map=linker.map -Wl,-cref -Wl,—gc-sections

Теперь после компиляции получим бинарный файл в нужном виде. Для этого тут же в настройках выбираем таб Build Steps и в поле Command пишем
arm-none-eabi-objcopy -I ihex «$» «$.ihex»

Базовый проект

Здесь качаем базовый проект. В нем описано чтобы отладочная борда умела мигать светодиодами.
После того как вы скачаете и поместите все файлы в проект Eclipse. Нужно указать пути к подключаемым заголовкам. Опять же идем в Properties -> C/C++ Build -> Settings.
Тут у Cross GCC Compiler и Cross G++ Compiler в Includes добавляем
«$/inc/STM32F4xx_StdPeriph_Driver/inc>»
«$/inc/STM32F4xx_StdPeriph_Driver/src>»
«$/inc/CMSIS>»
«$/inc/STM32F4xx>»
«$/inc>»

и жмём OK.

Поехали

Вроде все. Привязывать st-link и gdb к eclipse я не стал. Поэтому покажу как все делается из консоли.

В Eclipse собираем наш проект кнопочкой Build.
После того как убедились что сборка успешная и бинарный файлик тоже есть, подключаем нашу плату через USB.

Открываем консоль (лучше iterm). В первом табе запускаем st-link. После установки он должен быть доступен глобально.

2013-12-05T22:48:22 INFO src/stlink-common.c: Loading device parameters…
2013-12-05T22:48:22 INFO src/stlink-common.c: Device connected is: F4 device, id 0x10016413
2013-12-05T22:48:22 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
Chip ID is 00000413, Core ID is 2ba01477.
Target voltage is 2879 mV.
Listening at *:4242.

Мы видим как определяется устройство и вешается обработчик на порт 4242.

В соседней вкладке запускаем ранее установленный arm-none-eabi-gdb

GNU gdb (32-bit ARM EABI Toolchain JBS-2013.05-23-v2013.05-1-gd66a29f) 7.4.50.20120716-cvs
Copyright © 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type «show copying»
and «show warranty» for details.
This GDB was configured as «—host=x86_64-apple-darwin12.5.0 —target=arm-none-eabi».
For bug reporting instructions, please see:
.
(gdb)

Все отлично. Теперь необходимо подключиться к нашему девайсу. Нужно выполнить команду target remote :4242

(gdb) target remote :4242
Remote debugging using :4242
0x08000b70 in ?? ()

В соседней вкладке где запущен st-link мы дожны увидеть инфу о подключении GDB

KARL — should read back as 0x03, not 60 02 00 00
GDB connected.

Ну и осталось послследнее. Нужно накатить нашу новую прошивку.
Идем во вкладку с GDB и выполняем команду load

(gdb) load путь_к_бинарнику_.ihex
Loading section .sec1, size 0xc10 lma 0x8000000
Start address 0x8000b70, load size 3088
Transfer rate: 3 KB/sec, 3088 bytes/write.

А в соседней вкладке отладчика будет видно что все успешно накатилось

2013-12-05T22:56:04 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134217728 (0x8000000)
EraseFlash — Sector:0x0 Size:0x4000
Flash page at addr: 0x08000000 erased
2013-12-05T22:56:05 INFO src/stlink-common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2013-12-05T22:56:05 INFO src/stlink-common.c: Starting Flash write for F2/F4
2013-12-05T22:56:05 INFO src/stlink-common.c: Successfully loaded flash loader in sram
size: 16384
2013-12-05T22:56:05 INFO src/stlink-common.c: Starting verification of write complete
2013-12-05T22:56:05 INFO src/stlink-common.c: Flash written and verified! jolly good!

Чтобы посмотреть на результат, в gdb выполните команду ‘c’ (continue). Плата должна замигать как новогодняя ёлка.

Всё о чем я писал не имеет 100% понимания с моей стороны. Но это отличная отправная точка для начинающих.
Надеюсь эта статья поможет кому-нибудь.

Источник

AVR под Mac OS X — это просто!

Всё течёт — всё меняется.

Казалось бы совсем не давно наличие самостоятельно собранного PC считалось нормой высоких технологий, а постоянный «апгрейд» доставлял игровое удовольствие — как процесс творчества. Да и чувствовалась какая-то законченность, так как если не PC — то что? В то прекрасное время, как правило, все PC имели настоящие COM и LPT порты, что упрощало «до нельзя» изучение и освоение AVR. Чем, собственно многие и баловались. Ну как не побаловаться? PC — вот он под рукой, купил AVR-ку «за не дорого» и шей её сколько душе угодно, «скрутив» один единственный шнурок :))

Но, как известно — «всё течёт, всё меняется», и стала появляться достойная (в аппаратном смысле) техника, которая не шумит, собрана «по белому», работает по 24 часа в сутки годами и не виснет, и не греется. И стала находить она своё распространение среди честного люда. И стал чаще возникать вопрос перед честным людом как на сим коне ещё и свои AVR-прихоти реализовывать, учитывая то, что аппаратных COM и LPT портов нет. Да и система несколько отличается — Mac OS X как-никак 🙂 Не ставить же ради AVR дополнительно ОС Windows?

Вот и решил автор облегчить начинающим жизнь, поделившись своим опытом. Описание действительно и будет полезно для обладателей iMac, Mac Mini под управлением Mac OS X (Snow Leopard).

Необходимое ПО.

Итак. Mac OS кроме графического интерфейса имеет прекрасную Unix-like оболочку. Люди, которые раньше сталкивались с Linux, Unix и прочими *nix системами, будут прекрасно себя чувствовать, используя наработки всего *nix мира, которые прекрасно живут и здесь. Да и для тех, кто не сталкивался с *nix системами — ничего страшного. Так как из всей мощи коммандной строки, нам, вобщем-то, необходимо будет всего-то: запускать комманду компиляции, да и утилиту прошивки AVR устройст. Проще говоря, всё у нас сведётся к двум коммандам: make и make flash 🙂

Итак. Нам нужно всего два предмета: компилятор нашего софта и утилита программирования AVR-устройств. Благо, что и здесь добрые люди о нас позаботились, портировав известный всем avr-gcc пакет на Mac OS, да ещё и упростив процедуру установки. Всё, что нам понадобится — так это посетить страницу загрузки проекта CrossPack for AVR: www.obdev.at/products/crosspack/download.html скачать последнюю редакцию пакета и установить одним кликом 🙂 Не плохо почитать ReadMe.rtf возле установщика.

Установили. В результате установки мы получили и компилятор avr-gcc и средство прошивки avrdude.

Теперь открываем программу «Терминал» (если Терминал был открыт, желательно открыть новое окно, чтобы появились новые переменные окружения). Заходим в любимый каталог, где мы собираемся творить свои поделки, например это будет рабочий стол. Для этого в «Терминале», в коммандной строке пишем:
cd

Теперь мы в каталоге рабочего стола. Создадим здесь Demo проект, для чего введём:
avr-project Demo

В результате имеем на рабочем столе папку Demo с демонстрационным проектом внутри. Заходим любыми удобными средствами внутрь папки Demo и видим Demo.xcodeproj (для любителей Xcode) и папку firmware (для нас). Заходим в firmware и видим два файла:

  1. Main.c — собственно сама программа для AVR.
  2. Makefile — а это самый нужный файл, к которому нужно очень внимательно отнестись в самом начале настройки. Так как в нём мы укажем для какого процессора компилировать программу, параметры прошивания устройства и т. д. Это сделаем внимательно один раз и потом просто будем компилировать и шить всё что хотим «лёгким движением руки».

Откроем любым текстовым редактором Makefile.

Обратим внимание на параметр DEVICE — здесь мы указываем процессор, для которого компилируется программа. Параметр CLOCK — частота, на которой работает процессор. PROGRAMMER — это набор параметров для прошивки утилитой avrdude, о которой мы поговорим позже. Ну и FUSES — самый опасный параметр, требующий особой внимательности, так как при комманде make fuses — он устанавливает fuse на микроконтроллере. Чем это чревато при не правильных установках — думаю тебе уже известно.

Если мы прямо сейчас введём комманду «make», то получим скомпилированную прошивку для МК, который указан в параметрах DEVICE и CLOCK файла Makefile. Прошивка и вспомогательные файлы будут лежать в текущем каталоге. Процесс компиляции сопровождается комментариями компилятора и указаниями на ошибки (если таковые имеются).

Итак, программно мы уже готовы к проектам AVR. Осталось подыскать подходящий программатор (аппаратный разумеется). Какие же нам подойдут программаторы? Чтобы узнать вводим комманду:
avrdude -c ?

Теперь ты видишь просто огромный список поддерживаемых устройств-программаторов. Запоминаем/распечатываем и идём на радиобазар (опыт показал, что радиобазар — самый быстрый способ как приобрести, так и вернуть/обменять программатор))

Программатор.

Чтобы не мудрствовать лукаво, исходим из того, что он дожен быть наиболее стандартным. Главное: при покупке ОБЯЗАТЕЛЬНО оговаривай с продавцом безпроблемный возврат, если вдруг тебе что-то в нём не подойдёт. Не важно насколько программатор стандартный и должен правильно работать, если у тебя не получится его «завести», то какая разница по какой причине? Поэтому перед покупкой с продавцом договорился о возврате «если тебе по любой причине не подойдёт», он — кивнул головой, пришёл домой — подключил, проверил, работает — ОК. Если помучался, не смог заставить работать — вернулся на следующий день — забрал деньги. От того, как эти деньги вернул продавец, станет сразу понятно: иметь с ним долгосрочные отношения дальше или нет. Купил другой программатор и т.д.

Итак я приобрёл самый простой, первый попавшийся USB-программатор за $20-$25 который гордо нёс надпись, что он STK500v2 совместимый (кому интересно: and-tech.pl/programator-avrprog-usb-v2/ ). Но и это не важно, так как смотрим список поддерживаемых устройств утилитой avrdude и выбираем, что нашей душе угодно.

Принёс его домой, воткнул, у меня сразу появилось устройство: /dev/tty.usbmodemavrdope1

Итак я изменил в Makefile параметр PROGRAMMER:
PROGRAMMER = -c stk500v2 -p m16 -P /dev/tty.usbmodemavrdope1
где -c stk500v2 это тип программатора; -p m16 это тип МК (ATMega16A); -P /dev/tty.usbmodemavrdope1 это адрес устройства программатора.

Так же установил значения FUSES, однако реально FUSES на МК менял отдельным скриптом — так спокойнее было 🙂

Разумеется, что строчки с коммандой exit стоят для того, чтобы не было случайного запуска скрипта и требовалось особой осознанности того, кто желает поменять фьюзы на МК.

Теперь мы и аппаратно подкованы. Можем создавать свой проект в новом каталоге, копируем туда наш Makefile, делаем необходимые изменения в Makefile (МК, частота, порт программатора, фьюзы-если необходимы), а далее всё просто. В Main.c пишем свою программу для МК. В «Терминале» в нашем каталоге вводим комманду «make» — наблюдаем процесс компиляции и возможные ошибки/предупреждения. Если всё ок, вводим «make flash» -наблюдаем процесс прошивки МК. Если в Makefile установили правильно и осознанно параметр FUSES, то можно запустить «make fuses» и программатор установит фьюзы на твоём МК.

Достаточное ПО.

Разумеется, удовлетворив необходимые условия для AVR творчества, мы подходим к достаточным условиям. А именно: первое с чем сталкивается начинающий программист — так это поиск толкового текстового редактора. Автор уважает труд других людей и предпочитает не нарушать права «писателей ПО». Поэтому поиск вёлся в русле свободного ПО. Фаворитами стали абсолютно бесплатный проект Komodo Edit ( www.activestate.com/komodo-edit ) и условно бесплатный Sublime Text 2 ( www.sublimetext.com/ ). Условная бесплатность у последнего очень оригинальная. Производитель указывает на то, что ты можешь скачать и пользоваться ею бесплатно. Со временем, тебе таки нужно её приобрести, НО по времени ты никак не ограничен. Что же по удобству, так именно Sublime Text 2 меня очень порадовал. На нём я и остановился.

В моих проектах я люблю общаться с МК по RS232. Это удобно и для отладки процессов, и для изменения параметров процессов «на ходу», поэтому многим может понадобиться ещё один COM порт. Для этого я взял самый простой и дешёвый USB-COM шнурок с pl2303 на борту. Не стоит пугаться, практически все Noname (дешевые и безимянные) переходники и шнурки на этой микросхемке. Качаем нечто типа драйвера под этот чип ( sourceforge.net/projects/osx-pl2303/files/ ), устанавливаем, подключаем шнурок и у нас появляется устройство типа /dev/tty.PL2303-00001004

Осталось найти достойный и бесплатный терминал, который бы общался с RS232. И такой был найден. CoolTerm ( freeware.the-meiers.org/ )

Небольшой Видео-пример по теме статьи в котором мы редактируем, компилируем, прошиваем, настраиваем терминал и общаемся с МК:

Описанные в статье условия оказались для меня достаточными для удобного и простого создания AVR проектов на Mac OS X! Причём нативно и без каких-либо эммуляций. В следующей части, на примере одного из моих проектов, я покажу как это всё работает «в живую». Как программатор шьёт и питает схему, как через подключенный USB-RS232 шнурок мы тут же «общаемся» с МК, изменяя параметры работы схемы или снимая статистику.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Программе mac os x необходимо исправить вашу библиотеку
  • Программа создания слайд шоу для mac os
  • Программа создания печатей и штампов mac os
  • Программа сканер для mac os
  • Программа редактирования фото для mac os