STM32 на MAC OS

от автора

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

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

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

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

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

IDE

Сначала необходимо поставить среду разработки. В нашем случае это будет 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 https://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 "${ProjDirPath}/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 "${ProjName}" "${ProjName}.ihex"

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

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

и жмём OK.

Поехали

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

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

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

parikmaher say: st-util

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

parikmaher say: 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 <gnu.org/licenses/gpl.html>
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:
<github.com/jsnyder/arm-eabi-toolchain>.
(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% понимания с моей стороны. Но это отличная отправная точка для начинающих.
Надеюсь эта статья поможет кому-нибудь.

ссылка на оригинал статьи http://habrahabr.ru/post/205028/


Комментарии

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

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