Особенности выбора и установки STM32F4 тулчейна на MacOS X 10.7.5
Только что прошёл эти грабельки и пишу с двоякой целью. Во-первых самому со временем не забыть, а во-вторых — сократить время возни идущим тем же путём.
По ряду причин даже не стал смотреть YAGARTO, CooIDE под mac нет, поэтому выбрал путь Eclipse CDT + GRNUARM + arm-none-eabi тулчейн. Достойных внимания тулчейнов на этот момент два — Mentor Graphics CodeBench Lite (бывший Sourcery G++ Lite) и summon-arm-toolchain. Охотно ограничился бы первым, но не устроил по двум соображениям:
hardware FPU поддерживается только в коммерческих версиях, в lite только програмная эмуляция
UPDATE: речь идёт о том, что в условиях несовместимости (разные способы передачи параметров float point) форматов hard FP EABI и soft FP EABI Sourcery G++ Lite поставляется только с библиотеками формата soft FP EABI. Библиотеки формата hard FP EABI есть только в коммерческих версиях. См. ссылки внизу статьи.- они переименовали префикс arm-none-eabi в arm-none-linux-gnueabi и это «поломало» работу gnuarm
Кроме того, под MacOS X его тоже нужно собирать из сорцов. Итого… Поскольку небыло ни малейшего желания тратить время на исправление «несовршенства мира вообще» (например: добавить hard FPU или пофиксить GNUARM), рассмотрел второй вариант.
Вариант summon-arm-toolchain оказался достаточно интересным. Он не только знает STM32F4, но и имеет поддержку hardware FPU. Когда-то такая поддержка шла отдельным патчем в отдельном репозитории (от Mike Smith, репозитория больше нет), но некоторое время назад это было смержено в основной репозиторий. Кроме этого, код строится на основе Linaro GCC, что даёт дополнительные фиксы и оптимизации.
В README самого репозитория указан способ установки, дополнительные параметры и предварительные требования. Прежде всего понадобятся ports. Это набор opensource пакетов и утилиты управления ими, примерно как во FreeBSD (не сильно отличается от линуксов, но на фрю похоже больше всего). Далее нужно установить указанные в README пакеты.
Поскольку пакеты уже были сборку запустил следующей строкой:
Библиотека libstm32 имеет opensource альтернативу в виде libopenstm32, но, например, для Open-BLDC нужны обе. Вторая собирается по-умолчанию, поэтому просто заказал первую явно. Второй параметр указывает корень установки портов.
Стоит обратить внимание, что без него при конфигурировании вылетают ошибки такого рода:
Далее всё успешно собралось и следующая ошибка возникла уже на этапе установки:
Засада оказалась в ошибке пайтоновских setuptools из маковских портов. Пришлось поставить модуль yaml способом, описанным вот тут:
После этого всё успешно встало в каталог $HOME/sat. По умолчанию оно ставится туда, но параметрами можно потребовать, чтобы оно встало system-wide.
Источник
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 «$
Теперь после компиляции получим бинарный файл в нужном виде. Для этого тут же в настройках выбираем таб Build Steps и в поле Command пишем
arm-none-eabi-objcopy -I ihex «$
Базовый проект
Здесь качаем базовый проект. В нем описано чтобы отладочная борда умела мигать светодиодами.
После того как вы скачаете и поместите все файлы в проект Eclipse. Нужно указать пути к подключаемым заголовкам. Опять же идем в Properties -> C/C++ Build -> Settings.
Тут у Cross GCC Compiler и Cross G++ Compiler в Includes добавляем
«$
«$
«$
«$
«$
и жмём 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% понимания с моей стороны. Но это отличная отправная точка для начинающих.
Надеюсь эта статья поможет кому-нибудь.
Источник
csukuangfj / stm32-macos.md
STM32 MacOS X Environment Setup
Table of Contents
1. Install JDK 8
- Java SE Development Kit 8u191
- https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-macosx-x64.dmg
- double click to install
2. Install Eclipse
Option 1: GNU MCU Eclipse IDE for C/C++ Developers
- https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases
- 20190101-2023-gnumcueclipse-4.5.1-2018-12-R-macosx.cocoa.x86_64.tar.gz
- unzip and move to the folder Applications
- start eclipse, menu, help, install new software, work with, select «cdt», check «CDT main features», next, finish, restart eclipse.
- start eclipse, menu, help, install new software, work with, select «»
3. Cross Compile Toolchain (arm-none-eabi-*))
Option 1: GNU MCU Eclipse ARM Embedded GCC
- refer to https://gnu-mcu-eclipse.github.io/toolchain/arm/install/
- Go to the GitHub release page, https://github.com/gnu-mcu-eclipse/arm-none-eabi-gcc/releases
- gnu-mcu-eclipse-arm-none-eabi-gcc-8.2.1-1.1-20190102-1122-macos.tgz
we have $HOME/opt/gnu-mcu-eclipse .
Option 2: GNU ARM Embedded Toolchain
- https://developer.arm.com/open-source/gnu-toolchain/gnu-rm
- click downloads
- gcc-arm-none-eabi-8-2018-q4-major-mac.tar.bz2
- https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-mac.tar.bz2?revision=1041bf49-06d4-4174-866f-0e5259fa9d8d?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Mac%20OS%20X,8-2018-q4-major
4. Install STLink
- GNU MCU Eclipse OpenOCD
- https://github.com/gnu-mcu-eclipse/openocd/releases
- gnu-mcu-eclipse-openocd-0.10.0-10-20181020-0522-macos.tgz
- unzip to $HOME/opt
It should output
We get an updated stm32f7x.dap to avoid the following error
6. Install STM32CubeMX
- https://www.st.com/en/development-tools/stm32cubemx.html
- click «Get Software» to download it
When it starts, an popup windows says:
Error: Old ST-LINK firmware version. Upgrade ST-LINK firmware.
- Go to https://www.st.com/en/development-tools/stsw-link007.html
- Download en.stsw-link007.zip
Open «STM32CubeProgrammer», it should display no error messages.
Inside /Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin , we can find STM32_Programmer_CLI , which is the commandline tool.
- Generate a Makefile project from CubeMx. Select the specified board.
-
Press the black reset button.
Or use CubeProgrammer to upload the binary:
- Open STM32CubeProgrammer
- Click Connect
- Select «Erase & Programming»
- For the file path, select «/path/to/xxxx.bin»
- For the start address, use the default value «0x08000000»
- Check «Run after programming»
- Click the button «Start Programming»
Or use the following command
- Clock Configuration, HCLK (MHz) —> 216 MHz (for STM32F746 Nucleon-144 board)
- Pinout & Configuration
- Computing: CRC, activated
- Right panel «Pinout view»: PD9 (select USART3_RX ), PD8(USART3_TX)
- Connectivity: select USART3, mode (select Asynchronous). Leave others to their defaults, i.e., baudrate is 115200, 8bits, no parity check.
- Generate Code
After uploading the binary to the board. On macOS, do the following:
- brew install minicom
- ls /dev/tty.usbmodem1423 , it may be tty.usbmodelxxxx , replace xxxx in the following command
- minicom -D /dev/tty.usbmodem1423
- it should print the message sent from the board
- Note that the metakey in iterm2 is ESC . Press ESC + Z ot invoke the help window.
- ESC + Z , then press X to exit minicom
To redirect printf , do the following:
Copy syscalls.c from $HOME/STM32Cube/Repository/STM32Cube_FW_F7_V1.14.0/Projects/STM32F769I_EVAL/Examples/UART/UART_Printf/SW4STM32 to the project
add the following function to main.c
then compile the project. printf should be redirected to the console!
Источник