Сегодня я расскажу, как подготовить рабочую среду для разработки под ARM Cortex-M3 микроконтроллеры STM32F10x. Среда должна в себя включать компилятор, редактор кода, отладчик, прошивалку микроконтроллера, а также должна быть удобна для использования. Ну и должна дружить с платами STM32VLDiscovery и STM32L-Discovery, само собой.
Коммерческие:
- Keil для ARM и ARM Development Studio 5, ARM Ltd.
- Embedded Workbench for ARM, IAR Systems
- TrueSTUDIO для STM32, Atollic
- CrossWorks for ARM, Rowley Associates
- Triton IDE, Oasis technologies Pvt. Ltd.
- Visual X-Tools, Microcross
- Embest IDE for ARM, Embest
Некоммерческие:
- CoIDE, CooCox
- Конструктор самоделкина: Eclipse + GNU ARM Eclipse Plug-in + Sourcery CodeBench Lite Edition (версия ARM EABI) + stlink
Наверняка есть ещё, ведь IDE для ARM не сделал, похоже, только ленивый. Коммерческие IDE обычно довольно хороши, и большая их часть основана на Eclipse, но у всех них есть общие недостатки: они стоят денег (вот это новость!), их бесплатные версии имеют ограничения по объёму кода, не все поддерживают плату STM32VLDiscovery, а версии для Linux почти никто не делает (есть пара 30-дневных trial-версий). А в популярной, не знаю, почему, среде Keil ещё и редактор кода, судя по его виду и удобству, написан во времена Windows 95.
У кого много денег (или начальство на работе купило IDE), и кто не собирается слезать с Windows — спокойно берите эти жлобские поделки (: и мучайтесь/радуйтесь с ними, а я, не будучи буржуем de facto, предлагаю обратить внимание на бесплатные среды разработки. Конечно же, у них тоже есть и плюсы, и минусы — о них я расскажу в первую очередь.
Конструктор самоделкина
[Eclipse] Офигенный редактор кода: подсветка синтаксиса, авто-дополнение и авто-завершение кода, всплывающие подсказки, рефакторинг (легко заменить название функции/переменной во всём проекте сразу).
[Eclipse/ARM Plugin] Интеграция с отладчиком: можно устанавливать точки останова в программе (breakpoints), выполнять программу пошагово, менять содержимое регистров и памяти, смотреть ассемблерный листинг… Всё, как положено.
[CodeBench] Сочетание компилятора GCC и отладчика GDB, а также других программ из этой сборки, даёт компактный, быстрый код и отличные возможности отладки и анализа кода.
Всё компоненты «конструктора» есть под Windows и Linux. Думаю, вполне реально собрать и для Mac OS X, если сильно захотеть.
Не заточен под какие-либо определённые семейства МК. В будущем можно будет писать хоть под полноценные процы вроде Cortex-A9.
Большой объём работы при первоначальной настройке. Большая часть статьи будет посвящена этому, но для ленивых в конце статьи ссылки на готовые сборки IDE (:
CoIDE
Судя по всему, сделана китайцами, но на удивление качественно.
Эта среда основана на Eclipse, так что имеет все плюсы оной.
Создавать проекты очень легко, пользуясь мастером — всего в несколько шагов.
Добавление новых библиотек в проект реализовано проще некуда.
Настроить свойства проекта и отладки — пару раз клацнуть мышкой.
Скачал, установил, пользуешься. Никакой возни с настройкой.
Нет версий для Linux или MacOS (пишут, для Linux что когда-нибудь сделают).
Пути к файлам в проекте забиты как абсолютные, а не относительные, так что простой перенос папки с проектом в другое место не прокатит — проект не соберётся.
Тонкие настройки Eclipse спрятаны так глубоко, что для их поиска может понадобиться помощь проктолога.
Такие дела, коллеги. Ну что ж, сделаем так: по умолчанию будем использовать «конструктор», а если у кого не заработает — ставьте CoIDE. Для обоих вариантов я опишу настройку и создание проекта.
Конструктор: покрасноглазим
Внимание: потребуются навыки более чем продвинутого пользователя. У кого их нет, ну или времени и/или желания собирать всё это — в конце статьи вас ждут ссылки на готовые сборки конструктора для Windows и Linux, можете переходить к разделу «Создание скелетного проекта» (пользователям Windows ещё нужно прочитать про установку драйвера WinUSB ниже). Остальным советую поставить на воспроизведение что-то вроде плейлиста боссовских тем из игры Painkiller или другую спокойную добрую музыку. Кто доберётся до финиша без мухляжа, получит стопицот очков опыта.
Для начала объясню, почему конструктор состоит именно из таких деталей, как написано выше:
- Чтобы в принципе разрабатывать софт для каких-либо МК, нам нужен компилятор и отладчик. Это Sourcery CodeBench Lite Edition — компилятор GCC, отладчик GDB и ещё несколько полезных утилит для работы с исполняемыми файлами.
- Наши бесценные программы нужно как-то заливать на МК, да и сам GDB ничего не знает о внутренностях конкретных МК. Проект stlink служит посредником между GDB и отладчиком ST-Link, установленным на плате STM32VLDiscovery, а также содержит утилиту для прошивки.
- Нужна приличная IDE, на дворе 2011 год, как-никак — не в Notepad/vim же код писать и отлаживать? Eclipse — отличная IDE, но настраивать её с нуля для разработки под ARM не очень весело, да и специфика тут своя, а для этого есть ARM Plugin для Eclipse.
Далее, для сборки и тестирования софта нам нужно будет работать в консоли в Unix-окружении. В Linux для этого всё изначально есть, а в Windows нужно установить MinGW с MSYS, после чего запустить MSYS.
Sourcery CodeBench Lite Edition
Итак, начнём с того, без чего процесс сборки может потерять всякий смысл — это набор софта для компиляции и отладки наших будущих программ, и это в данном случае Sourcery CodeBench Lite Edition (бывшая Sourcery G++ Lite). В нём для нас заботливо собраны (и протестированы) GCC, GDB и прочие стандартные утилиты GNU для работы с кодом и исполняемыми файлами. В принципе, всё это можно собрать и самому из исходников, но это два часа возни и ожидания на ПК средней мощности, а за нас всё сделали задаром.
Скачать CodeBench можно на сайте компании-разработчика как в виде инсталлятора (рекомендую), так и простым архивом, но если у вас Arch Linux, то можно поставить пакет из AUR:
yaourt -S aur/arm-2011-arm-none-eabi
После установки проверьте, что компилятор запускается и работает, откомпилировав незатейливый исходник на C, назвав его, скажем, x.c:
int main() { }
командой
arm-none-eabi-gcc x.c
В результате вы увидите сообщение типа:
/usr/bin/../lib/gcc/arm-none-eabi/4.5.2/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 00008018
Тут компилятор всего лишь жалуется, что не определена точка входа, ведь для МК недостаточно просто написать функцию main(), чтобы она начала выполняться. Впрочем, сейчас это неважно.
stlink
Далее нам нужно средство отладки и прошивки для нашей платы. На STM32VLDiscovery установлен отладчик ST-Link версии 1, а на STM32L-Discovery — ST-Link 2, которые поддерживаются в нескольких IDE и утилитах для прошивки МК, но, как это обычно бывает, только под Windows. Но в мире есть добрые люди! Один такой добрый человек — Fabien Le Mentec — относительно недавно при поддержке компании ST Microelectronics начал работу по поддержке ST-Link в Linux, и его проект stlink содержит GDB-сервер и утилиту для прошивки. Если кто не в курсе: отладчик GDB умеет отлаживать удалённо, подключаясь по сети (по TCP/IP) к программе-серверу, которая работает с реальным железом. Разработчик Karl Palsson допилил поддержку ST-Link v1 в своём форке, ну а я портировал этот проект под Windows, заодно поправив косяки с работой по сети и добавив поддержку рестарта при отключении клиента.
Для сборки stlink необходима библиотека libusb-1.0 с заголовочными файлами, которую в Linux можно установить из репозиториев:
# Ubuntu sudo apt-get install libusb-1.0-0-dev # Arch Linux sudo pacman -S libusb
Версию libusb-1.0.8 для Windows можно скачать с нашего сервера, установить её можно так:
tar jxvf libusb-1.0.8-windows.tar.bz2 cd libusb-1.0.8 ./configure --prefix=/mingw make make install
Если у вас ещё не установлена система контроля версий Git, то самое время её установить — скачав с официального сайта или, в Linux, через пакетный менеджер:
# Ubuntu sudo apt-get install git # Arch Linux sudo pacman -S git
Перейдите в папку, где вы хотите держать stlink (у меня это /home/burjui/devel в Linux и c:\tmp в Windows), клонируйте stlink из репозитория, перейдите в папку проекта, скомпилируйте проект и установите GDB-сервер:
# Windows cd c: mp git clone git://github.com/burjui/stlink.git -b server-restart cd stlink make CC=gcc CONFIG_WIN32=1 cp ./gdbserver/st-util.exe /mingw/bin # Linux cd /home/burjui/devel git clone git://github.com/burjui/stlink.git -b server-restart cd stlink make sudo ln -s /home/burjui/devel/stlink/gdbserver/st-util /usr/local/bin
В Linux вам ещё потребуется сделать пару действий, чтобы устройство корректно определялось:
- Нужны права на запись в устройство ST-Link для обычного пользователя:
sudo cp 49-stlinkv* /etc/udev/rules.d/ sudo udevadm control --reload-rules
Демон udevd перечитает правила из /etc/udev/rules.d/ и при подключении платы создаст в /dev файл устройства с осмысленным именем типа stlinkv1_4 и с нужными правами.
- ST-Link версии 1 использует кривую эмуляцию SCSI, чтобы притворяться флешкой, а нам это — лишняя палка в колесо. Устраняем:
sudo cp stlink_v1.modprobe.conf /etc/modprobe.d sudo modprobe -r usb-storage && sudo modprobe usb-storage
Драйвер usb-storage перезагрузился, а modprobe, прочитав /etc/modprobe.d/stlink_v1.modprobe.conf, попросила драйвер не работать с ST-Link. Драйвер на просьбу отреагирует отладочным сообщением ядра:
$ dmesg | tail -n 2 [82914.808449] usb 6-4: new full speed USB device number 4 using ohci_hcd [82914.981001] usb-storage 6-4:1.0: device ignored
А в Windows потребуется немного шаманства, чтобы установить драйвер WinUSB, необходимый для работы libusb в этой ОС. Подключите плату STM32VLDiscovery, далее скачайте программу Zadig и запустите её с правами администратора. В меню Options поставьте галочку List All Devices:
Выберите из выпадающего списка устройство USB Mass Storage Device с USB ID, равным 0483 3744 (ST-Link) или 0483 3748 (ST-Link 2), и нажмите кнопку Replace Driver:
Программа предупредит, что это опасно, но мы не боимся опасностей и жмём Yes:
Если ничего «опасного» не произойдёт, можно будет порадоваться успешной установке:
Осталось переподключить плату — и можно испытывать GDB-сервер и в Windows, и в Linux. Наберите команду:
st-util -1
Ключ «-1» указывает, что нам нужно подключить ST-Link именно версии 1. Если у вас STM32L-Discovery, на которой ST-Link 2, то этот ключ указывать не нужно. Если всё пройдёт успешно, вывод программы будет выглядеть так:
2011-11-23T18:29:57 INFO src/stlink-common.c: Loading device parameters.... 2011-11-23T18:29:57 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device 2011-11-23T18:29:57 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes 2011-11-23T18:29:57 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger Chip ID is 10016420, Core ID is 1ba01477. KARL - should read back as 0x03, not 60 02 00 00 init watchpoints Listening at *:4242...
Сервер запущен, попробуем к нему подключиться. В другом окне с консолью запустите GDB для ARM:
arm-none-eabi-gdb
В появившемся приглашении наберите команду:
target extended-remote localhost:4242 # GDB понимает и сокращения: # tar ext :4242
В GDB результат будет выглядеть так:
(gdb) target extended-remote localhost:4242 Remote debugging using localhost:4242 0x0800061c in ?? () (gdb)
В st-util:
GDB connected. -- ключевой момент! recv: qSupported:multiprocess+;qRelocInsn+ query: Supported;multiprocess+;qRelocInsn+ send: PacketSize=3fff;qXfer:memory-map:read+ recv: ! send: OK recv: Hg0 ...
Чтобы в будущем не набирать каждый раз в консоли ‘st-util -1’ для запуска GDB-сервера, советую сделать ярлык с аргументом «-1» после пути к .exe’шнику (или shell script в Linux).
Eclipse + ARM plugin
Вы ещё живы? Ничего, осталось совсем немного.
Так как ARM Plugin поддерживает Eclipse версии не старше, чем Helios (3.6.x), то её и поставим с официального сайта, взяв самую свежую версию на данный момент — 3.6.2 (Helios SR2). Нам нужна Eclipse IDE for C/C++ Developers, которая также широко известна по более короткому названию — Eclipse CDT. Качайте версию под свою ОС и распаковывайте, куда захочется. Мне захотелось в /home/burjui/apps/eclipse, например.
Запускайте Eclipse и выбирайте пункт меню Help→Install New Software… Не слишком очевидно, не правда ли? Далее действуем в соответствии с инструкциями по установке плагина, а именно жмём кнопку Add и в появившемся окне Add Repository вписываем имя плагина — например, ARM Plugin. Качаем zip-архив с плагином (нам нужна именно версия 0.5.3, более свежая требует Eclipse 3.7.x, а там поломали отладку), жмём кнопку Archive и выбираем скачанный архив, после чего жмём ОК.
Eclipse скачает с сервера информацию о доступных пакетах и покажет нам доступный к установке плагин. Ставим напротив него галочку и жмём Next:
После этого мы увидим типичное малоинформативное окно в стиле «просто нажми Next», а следом — лицензионное соглашение, с которым мы, разумеется, уже согласны — просто жмём Finish:
После этого процесс установки, наконец, начнётся:
Но посреди него нас попросят подтвердить, что мы абсолютно безбашенные и действительно хотим установить софт без цифровой подписи:
Когда установка завершится, Eclipse предложит перезапуск:
Ну вот, теперь у нас есть полноценная среда разработки для ARM.
Создаём скелетный проект
Поди, уже расслабились? Самое интересное — впереди.
Опять же, для ленивых в конце статьи есть ссылка на архив с проектом, а самые смелые могут продолжить сеанс интеллектуального мазохизма за компанию.
В Eclipse на стартовой странице выбираем Workbench, в меню выбираем пункт File→New→C Project. В появившемся окне слева выбираем ARM Cross Target Application/Empty Project, справа — Sourcery G++ Lite:
Проект я назвал так для STM32VLDiscovery, а для STM32L-Discovery я бы назвал его stm32ld_template.
STM32VLDiscovery
Для работы с этой платой скачаем библиотеку STM32F10x Standard Peripheral Library с сайта ST (копия у нас). Последняя на данный момент версия для STM32F10x — 3.5.0, так что после распаковки у нас будет папка STM32F10x_StdPeriph_Lib_V3.5.0. Создайте в папке с проектом подпапки CMSIS и StdPeripheralDriver, скопируйте в них указанные файлы и папки из STM32F10x_StdPeriph_Lib_V3.5.0:
В CMSIS:
- core_cm3.h и core_cm3.c
из Libraries/CMSIS/CM3/CoreSupport - stm32f10x.h, system_stm32f10x.c и system_stm32f10x.h
из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x - startup_stm32f10x_md_vl.s
из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7
При этом расширение имени файла нужно сменить с ‘.s’ на ‘.S’ — это нужно, чтобы Eclipse понял, что это файл с кодом на ассемблере.
В StdPeripheralDriver:
- Папки inc и src из Libraries/STM32F10x_StdPeriph_Driver
Также в CMSIS нужно создать файл stm32f10x_conf.h следующего содержания:
#ifndef STM32F10X_CONF_H_ #define STM32F10X_CONF_H_ /* ------------------- */ #ifndef USE_FULL_ASSERT #define assert_param(x) #endif /* ------------------- */ #endif
В папке с проектом создайте файл main.c с минимальным кодом бесконечного цикла:
#include <stm32f10x.h> int main() { do __NOP(); while (1); }
Туда же закиньте файл stm32f100rb.ld. Щёлкните правой кнопкой по проекту в Eclipse, и в контекстном меню нажмите Refresh — тогда Eclipse увидит новые файлы и папки и добавит их в проект.
STM32L-Discovery
Для этой платы последовательность действий такая же, только будут меняться имена папок и файлов, а местами и содержимое.
Так как на этой плате установлен микроконтроллер STM32L152RBT6, то и качать мы будем STM32L1XX Standard Peripheral Library (копия). Распаковываем архив, получаем папку STM32L1xx_StdPeriph_Lib_V1.0.0 и копируем из неё:
В CMSIS:
- core_cm3.h и core_cm3.c
из Libraries/CMSIS/CM3/CoreSupport - stm32l1xx.h, system_stm32l1xx.h и system_stm32l1xx.с
из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32L1xx - startup_stm32l1xx_md.s
из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32L1xx/startup/gcc_ride7
Не забываем сменить расширение имени файла с ‘.s’ на ‘.S’.
В StdPeripheralDriver:
- Папки inc и src из Libraries/STM32L1xx_StdPeriph_Driver
В CMSIS нужно создать файл stm32l1xx_conf.h следующего содержания:
#ifndef STM32L1XX_CONF_H_ #define STM32L1XX_CONF_H_ /* ------------------- */ #ifndef USE_FULL_ASSERT #define assert_param(x) #endif /* ------------------- */ #endif
В папке с проектом создайте файл main.c с минимальным кодом бесконечного цикла:
#include <stm32l1xx.h> int main() { do __NOP(); while (1); }
Туда же закиньте файл stm32l152rb.ld. Щёлкните правой кнопкой по проекту в Eclipse, и в контекстном меню нажмите Refresh — тогда Eclipse увидит новые файлы и папки и добавит их в проект.
Общая настройка
Настроим проект так, чтобы всё это компилировалось, заливалось на МК и отлаживалось. Выбираем в меню пункт Project→Properties, в окне в левой панели выбираем раздел C/C++ Build→Settings, справа вверху из списка Configuration выбираем пункт [ All configurations ] и начинаем шерстить по подразделам настроек.
Target Processor
Выбираем Processor — cortex-m3, ставим галочку Thumb (-mthumb).
C Compiler/Preprocessor
Добавим два определения для препроцессора языка C, которые необходимы для библиотек в StdPeripheralDriver: USE_STDPERIPH_DRIVER, а также STM32F10X_MD_VL или STM32L1XX_MD для STM32VLDiscovery и STM32L-Discovery, соответственно. Щёлкаем плюсик и вводим первое значение, второе — так же.
C Compiler/Directories
Здесь укажем, в каких папках проекта у нас лежат заголовочные файлы библиотек. Жмём плюсик и, чтобы пути к папкам считались относительно папки с проектом, жмём кнопку Workspace… и выбираем в проекте папку CMSIS:
Аналогично добавляем папку StdPeripheralDriver/inc.
C Compiler/Optimization
Здесь ставим галочки:
- Function sections (-ffunction-sections)
- Data sections (-fdata-sections)
C Linker/General
В поле Script file (-T) указываем путь к скрипту stm32f100rb.ld или stm32f152rb.ld для STM32VLDiscovery и STM32L-Discovery, соответственно — желательно, в таком же формате, как и папки в предыдущем случае, но без кавычек.
Ставим галочки:
- Do not use standart start files (-nostartfiles)
- Remove unused sections (-Xlinker —gc-sections)
Здесь всё, жмём ОК.
Протестируем сборку проекта. Выбираем в меню отладочную сборку — Project→Build Configurations→Debug, запускаем сборку — Project→Build Project.
Если после окончания сборки в нижней панели на вкладке Problems ничего не написано, значит, сборка прошла успешно.
Теперь осталось только настроить отладчик. Создаём в папке проекта файл gdb_commands_debug следующего содержания:
tar ext :4242 load Debug/stm32vld_template.elf
и ещё один похожий — gdb_commands_release:
tar ext :4242 load Release/stm32vld_template.elf
Идём в Run→Debug Configurations…, правым кликом на разделе C/C++ Application вызываем меню, в котором выбираем пункт New. Настроим созданную конфигурацию.
Раздел Main:
- Name: Debug
- C/C++ Application: Debug/stm32vld_template.elf
- Build Configuration: Debug
- Выбираем опцию Enable auto build
Раздел Debugger, вкладка Main:
- GDB debugger: arm-none-eabi-gdb
- GDB command file: gdb_commands_debug
Жмём Apply. Полученная конфигурация будет у нас отладочной: после сборки проекта в прошивке будет много «лишнего» кода, который необходим для отладки, но заметно раздувает размер прошивки.
Аналогично создаём релизную конфигурацию, при сборке которой прошивка будет содержать только необходимый код:
- Name: Release
- C/C++ Application: Release/stm32vld_template.elf
- Build Configuration: Release
- Выбираем опцию Enable auto build
- GDB debugger: arm-none-eabi-gdb
- GDB command file: gdb_commands_release
И в приведённых выше файлах, и в настройке конфигураций вместо stm32vld_template нужно написать имя проекта, если оно у вас отличается.
Ну, теперь-то с настройкой покончено! Напоследок проверим, как работает отладка. Для этого запускаем GDB-сервер (‘st-util -1’) и в меню жмём Run->Debug Configurations…, выбираем конфигурацию Debug и жмём кнопку Debug внизу окна. Сервер должен отреагировать кучей сообщений в консоли:
Eclipse же в это время попросит разрешения открыть «отладочную перспективу». Рекомендую не только согласиться, но и поставить галочку, чтобы IDE больше не спрашивала, а сразу открывала перспективу. «Перспективами» в Eclipse называются наборы настроек расположения окон: положение, стиль (отдельно или табом в родительском окне) и пр. Отладочная перспектива, возникшая перед нами, отличается наличием окон, специфичных для отладки — Breakpoints, Registers, Disassembly, Debug, Memory и пр. Перечисленные мной окна наиболее информативны и полезны для отладки. Расположение окон по умолчанию ужасно, поэтому я при первой же отладке привёл всё вот к такому виду:
Если вы дошли до этого момента, и всё заработало — честь вам и хвала. Теперь понимаете, за что просят деньги разработчики коммерческих IDE?
А вот я ещё нет. Пойму, когда:
- Будут версии для Linux.
- Когда не надо будет писать письмо, чтобы узнать цену IDE (цена будет написана большими буквами на сайте, и чтоб не более 50$).
- Когда будут поддерживаться все популярные программаторы-отладчики. Для этого всего-то нужно дописать поддержку трёх-четырёх в проект OpenOCD.
Ибо настроил я всю эту бодягу за денёк, а остальные две недели патчил stlink, писал статью и тестировал сборки, так что мне не понятно, за что тут платить бабло, если работы от силы на день, и то — без руководства (;
Но если вдруг у вас ничего не заработает даже в приготовленной мной сборке IDE, тогда следующий раздел — для вас.
CoIDE: как два пальца об асфальт
Ну, тут полная халява. Если провести аналогию с автомобилями, то CoIDE нельзя превратить в бульдозер или велосипед по выбору, зато тачка очень удобная — сел и поехал.
Идём на страничку IDE, качаем по ссылке «Download directly» внизу страницы, устанавливаем, куда душе угодно, и запускаем. При первом запуске CoIDE покажет мастер создания проекта, в котором нужно выбрать производителя нашего микроконтроллера — ST:
Далее появится список МК, в котором нужно выбрать STM32F100RB, установленный на плате STM32VLDisvovery:
Появится окно так называемого «репозитория», в котором установкой галочек можно выбирать подключаемые к проекту библиотеки. При этом учитываются зависимости между библиотеками, что не может не радовать. В следующем уроке мы будем разбирать порты ввода-вывода (GPIO) так что отметим соответствующую библиотеку. Так как мы ещё не создали ни одного проекта, CoIDE предложит нам создать новый, на что мы согласимся:
По умолчанию папка для проектов располагается в установочной папке CoIDE и называется «workspace». Вообще, это не очень хороший вариант, я бы советовал создать отдельную папку где-нибудь в «Моих документах» или ещё где, но это личное дело каждого, а я решил ничего не трогать — в своей виртуальной машине в VirtualBox я могу мусорить сколько душе угодно (:
Скелетный проект по причине, изложенной в начале статьи (про плюсы и минусы), создавать бессмысленно, так что сразу сделаем проект для следующей статьи и назовём его stm32vld_quickstart:
Вот и всё, первый проект создан, можно даже приступать к кодингу. Но приступим мы к нему в следующей статье, а пока можете глянуть на файловую структуру проекта:
- cmsis — тут лежит стандартная библиотека CMSIS, общая для всех Cortex-M3
- cmsis_boot — название странноватое, ведь там лежит не только код первичной инициализации микроконтроллера, но и пара заголовочных файлов от стандартной библиотеки STM32F10x
- stm_lib — STM32F10x Standart Peripheral Library, уже описанная при настройке Eclipse
- build.xml — настройки сборки проекта, руками туда лучше не лазить, да и CoIDE сама этот файл не открывает, а показывает окно настроек проекта.
- link.ld и memory.ld — скрипты линковщика, как stm32f100rb.ld, упоминавшийся выше, только зачем-то разделённый на два файла.
- main.c — исходный код, пока ещё девственно чистый
Слева, кроме структуры проекта, так же показывается модель МК, для которой мы пишем, и список подключенных библиотек — идеально для склеротиков вроде меня (:
Теперь нужно зайти в Debug→Debug Configuration… и установить параметры отладки/прошивки:
- Adapter: ST-Link
- Port: SWD
- Max Clock(Hz): 1M (1 МГц)
Теперь выбираем в меню Debug→Debug и CoIDE скомпилирует проект, зальёт прошивку на МК и запустит отладку:
Вот и вся настройка. Конечно, за простоту приходится платить, но в данном случае не деньгами, а минусами, перечисленными в начале статьи. Ну да ладно, зато оно работает сразу (:
Ссылки и прочее
Итак, на данный момент я сделал и протестировал три сборки IDE — для 32- и 64-битной Linux 32-битной Windows, а для 64-битной Windows будет чуть позже — нужно собрать GCC и компанию.
Среду разработки я назвал, не мудрствуя лукаво — RoboCraft ARM IDE (для краткости просто RC-ARM), версия 0.1
Впрочем, это не официальное название, оно пока просто для удобства — чтобы не писать «ну вон та первая сборка IDE, которую я слепил во второй статье» (:
- Linux: 32-bit (i686), 64-bit (x86_64)
Распаковываем, заходим в консоли в папку с IDE, в подпапку stlink и выполняем команды (все флешки и прочие mass-storage устройства должны быть размонтированы):sudo cp 49-stlinkv* /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo cp stlink_v1.modprobe.conf /etc/modprobe.d sudo modprobe -r usb-storage && sudo modprobe usb-storage
Также нужно установить libusb-1.0, 32-битную версию libncurses-5 (для GDB) и make.
Всё, отныне больше ничего для настройки делать не придётся. В папке с IDE лежат два скрипта — start-ide.sh и start-stlink.sh. Первый устанавливает переменные окружения, чтобы Eclipse увидел GCC для ARM, и запускает Eclipse, в котором уже установлен ARM Plugin. Второй запускает утилиту stlink, которая должна быть запущена всё время, пока вы пользуетесь отладкой и прошивкой. Самые хитрые могут добавить вызов второго скрипта в первый и не париться (: - Windows: 32-bit (i686)
Распаковываем и устанавливаем драйвер WinUSB по инструкции в статье. По идее, больше ничего делать не надо. В папке лежат два bat-файла, аналогичные упомянутым выше скриптам: start-ide.bat запускает Eclipse, start-stlink.bat — утилиту stlink. Библиотеку libusb-1.0 я положил в дистрибутив, т.к. в Windows нет пакетного менеджера и готового пакета для её установки. Так же включена утилита make, используемая Eclipse для сборки проектов.
Во всех сборках присутствует Java Runtime Environment 6 update 29, необходимая для работы Eclipse, и IDE подхватывает JRE автоматически.
Об ошибках в работе IDE прошу писать в соответствующую тему на форуме.
Все необходимые файлы для скелетного проекта:
Распакуйте нужный архив и настройте проект, как написано в статье, только без копирования файлов. После настройки проект соберётся и в Windows, и в Linux, при условии, что IDE настроена правильно. При смене IDE на другую версию (точнее, ARM Toolchain) могут перестать собираться уже настроенные проекты из-за того, что ARM Plugin хранит в настройках проекта пути к стандартным заголовочным файлам компилятора — в этом случае нужно удалить файлы настроек из папки с проектом (их имена начинаются с точки) и выполнить настройку заново.
Чтобы добавить проект в свой workspace, в Eclipse выберите в меню Project→Import, а в появившемся окне выбрать General→Filesystem и указать распакованную из архива папку или сам архив. Как я уже упоминал, для CoIDE скелетный проект создавать смысла нет, т.к. в CoIDE создать проект не сложнее, чем подумать об этом, ну, и с копированием проектов в ней проблемы.
Для тех, кто решил когда-нибудь потом приготовить IDE по этому рецепту, привожу список ингредиентов:
- Eclipse 3.6.2 (Helios SR2)
Это последняя стабильная версия Eclipse на данный момент. - Java Runtime Environment 6u29
По ссылке доступна самая свежая версия JRE, на данный момент это 6u29. Oracle уверяет, что последующие версии JRE будут совместимы с текущей — ну что ж, поверим на слово (как будто выбор есть). - GNU ARM Eclipse Plugin 0.5.3
Нужна именно эта версия, т.к. более поздние уже требуют Eclipse 3.7.x, а там поломали отладку. Ну или что-то я не так делал, хотя и то же самое, что для Eclipse 3.6. На всякий случай сохранил в укромном месте (: - Sourcery CodeBench Lite Edition 2011.03-42, arm-none-eabi
Пойдёт, по-хорошему, любая другая правильная сборка GCC + GDB + binutils для ARM — например, Yagarto или вообще собранная из исходников собственноручно. Лишь бы работала правильно. - stlink на GitHub, ветка server-restart
Забирать так:git clone git://github.com/burjui/stlink.git -b server-restart
Сборки:
На данный момент нужен именно мой репозиторий, а не оригинал, и именно ветка server-restart — в ней есть патчи, позволяющие утилите работать непрерывно, а не завершаться после каждого дисконнекта. В будущем, когда мои патчи попадут в основную ветку, я обновлю пост.
Сейчас утилита работает довольно медленно — прошивает всего около 500 байт в секунду, но это пока не начали работу по оптимизации. - Zadig
Там лежат все версии этой утилиты. Если кто забыл, она для установки драйвера WinUSB под Windows, чтобы библиотека libusb-1.0 имела прямой доступ к ST-Link. - MinGW + MSYS
Unix-like среда для разработки под Windows с использованием GCC.
Уфф… Вроде, всё. Ошибки, неточности, советы, вопросы принимаются. За сим откланиваюсь и лечу писать quickstart. Уж это я успею меньше, чем за две недели 😀
156 комментариев на «“STM32: Урок 1 — Настраиваем IDE”»
А как настраивать Eclipse под плату STM32L-Discovery с STM32L152RBT?
(где найти соответствующий файл линкера?)
З.Ы. И где найти пример проекта Eclipse для этого МК?
Проект берите тот же, что и в статье а рабочий скрипт я залилк нам . Просто киньте скрипт в папку и измените имя скрипта в настройках проекта. Вообще, кстати, никто не мешает создать таким образом прошивки для разных кристаллов на основе одного проекта — достаточно создать дополнительные build-конфигурации с другими скриптами в настройках.
И спасибо, что упомянули про эту плату, чуть позже обновлю пост.
Ещё уточнение, вам нужна будет библиотекаSTM32L1XX Standard Peripheral Driver .
Спасибо за помощь!
Ой, чуть не забыл — на вашей плате установлен отладчик ST-Link версии 2, так что запускать stlink нужно без аргументов, т.е. просто:
Когда у меня в распоряжении появится STM32L-Discovery, обязательно буду проверять все примеры кода на ней и в следующую сборку RC-ARM положу всё необходимое, если понадобится.
Добрый день.
У Вас получилась самая подробная статья по настройке эклипса из всех что я видел в нете. Я вот под stm32l настраивал, наверное, дня три потратил. Жаль, что Вы статью чуть раньше не написали 🙂
О да, первый раз с нуля настроить — это как мозаику из 1000 частей собрать: нужна куча времени и терпения. Кстати, а для прошивки вы какой утилитой пользуетесь, и под какой ОС?
Для прошивки в винде STMicroelectronics ST-LINK Utility 2.2 там есть как гуевая так и консольная утилита. Для отладки ST-LINK_gdbserver, который взял из Atollic TrueSTUDIO.
Из статьи не совсем понятно, какие действия необходимо выполнить под виндами, чтоб работать в эклипсе. Саму эклипс и плагин установил, а вот с остальным как-то не все понятно.
Если не понятно как настроить берите готовую сборкуrobocraft.ru/files/software/robocraft-arm-ide/0.1/robocraft-arm-ide-0.1-windows-i686.7z
Вот это мне всегда больше всего нравится. Спрашиваешь — что да как, растолкуйте, отвечают — берите готовую сборку. Я понять хочу, что и как, разобраться, откуда что берется и что для чего нужно, причинно-следственные взаимосвязи. Если статья в том числе и для начинающих — зачем к готовой ссылке отсылать.
Намного понятнее (для меня лично) было бы, если бы изложение шло в таком виде:
Для windows: качаем то-то и то-то. устанавливаем первое, второе, третье. подкручиваем/настраиваем первое, второе третье так-то и так-то. профит.
Для linux: качаем то-то и то-то, устанавливаем то-то и то-то, настраиваем то и это. профит.
А из всего вышенаписаного каменный цветок у меня как-то не получается. 🙁
настройка самого проекта в эклипсе абсолютно идентична, что под виндой, что под линухом. С чем именно возникают затруднения?
Да не то чтобы затруднения. MinGW надо ставить лишь затем, чтобы собрать Sourcery CodeBench Lite Edition и прикрутить ST-Link c GDB-сервером?
MinGW + MSYS и Git нужны для сборки stlink и libusb-1.0, а CodeBench просто ставится, и всё.Держите , библиотека libusb в комплекте.
В будущем MinGW и компания очень пригодятся для решения аналогичных задач, коль в винде своей нормальной консоли нет.
Хотя про выкладывание stlink для винды в собранном виде отдельно от IDE я как-то не подумал — моя вина.
А в сборке, которую презентовал mcsa, такого нету?
Я в сборку положил всё, что нужно для её работы под виндой, включая stlink и libusb. Я лишь забыл выложить их отдельно для пользователей Windows, у которых по умолчанию нет ни компилятора, ни утилиты make.
Т.е. скачанную сборку можно просто распаковать в директорию с установленной Eclipse, и все?
Сборка содержит вообще все необходимые программы: Eclipse с установленным GNU ARM Plugin, CodeBench, stlink.
Специально для пользователей Windows в сборке также присутствуют libusb, make и Zadig.
ВНИМАНИЕ!
Кто уже прочитал статью — перечитайте, я её обновил:
— Исправил ошибки в описании настройки проекта, а именно в описании копирования файлов из Standard Peripheral Driver.
— Добавил установку правил udev в Linux.
— Пересобрал 32-битную версию RC-ARM IDE для Linux в связи с кривой версией stlink (залил нормальную). Заменил CodeBench на самосборную версию ARM toolchain с более свежим компилятором и остальными утилитами. Кто качал — скачайте заново.
— Добавил 64-битную сборку RC-ARM IDE для Linux.
— Перезалил скелетный проект. Теперь там лежат только файлы, необходимые для проекта, а настройку проекта нужно выполнить вам.
— Добавил в нужные части статьи описание настройки IDE и проекта для платы STM32L-Discovery с микроконтроллером STM32L152RBT6: настройку проекта (копирование файлов и настройку опций компилятора и компоновщика) и ремарку относительно запуска stlink.
Присоединяюсь к коллегам! Статья супер!, жаль что только что нашёл её )) Пришлось через CoIDE учиться работать. Сейчас на Линукс буду переезжать )))
Вообщем скопировал архив, импортировал проект, попробовал собрать и получил ошибку:
У меня одного эта ошибка происходит??? Кто нибудь может подсказать ??
Какой инструментарий нужно выбирать при создании проекта ??Снимок окна
Я все выбирал, везде ошибки. В итоге решил остановиться на «Sourcery G++ Lite» (исходя из инструкции). Ошибка которая выпадает, описана выше.
Чего-то в проекте не хватает??
Вы хоть намекните, какой у вас дистрибутив.
AltLinux шестая платформа.
Хм, установите gcc-multilib. На знаю точно, как в вашем дистре называется пакет, но обычно так.
На каком дистрибутиве работаете вы??
Arch Linux x86_64
Жаль, но похоже в моём дистрибутиве официально нет утилит для разработки под ARM… Жаль…
Я про обычный gcc-multilib, не для ARM. И я вам в личку написал, прочитайте.
Специально зарегистрировался (:
Последняя КУбунта.
Мультилиб и либЮсб поставил.
Всё равно ошибка:
Памажите люби добрые! (:
А то держать виртуалку с виндой, ради одного КоКоса, несколько некомильфо…
Хм… Первый этап пройден, неправильно выбрал тип проекта.
Но компилироваться от этого не начало:
Теперь делает вид, что не находит файл /home/knkd/bin/arm-ide/arm-toolchain/bin/arm-none-eabi-gcc, хоть он именно в этом месте и находится.
Также при попытке запустить любой исполняемый файл из arm-toolchain:
Постараюсь исправить — как раз пересобираю toolchain. Собственно, поэтому и пишу в такое время (:
Только вот скажите, вы сборку уже свежую качали, после прочтения моего комментария об обновлении статьи? И какая у вас Kubuntu — i686 или x86_64?
И да, последняя — это 11.10 или какая там? Ведь есть же LTS и обычный дистр. Мне нужно точно знать — мне ж качать и на виртуалку ставить (:
Кубунта 11.10 х64.
Качал после обновления, часов в пять-шесть.
Грешил на настройки дистрибутива, но хеллоуворды из домашнего каталога вполне запускаются.
Да и в /опт ничего не изменилось.
Кстати. Тулчайн отдельно (поставленный инсталлятором) работает.
Может ему нужны какие-то еще переменные окружения?
Не, это сборка кривая, я уже такой баг ловил с stlink. Сегодня надеюсь пересобрать окончательно, чтобы работало везде. Тут у кого-то на Alt Linux 6.0 запускается, но не хватает библиотеки ppl. Везде не слава богу, короче (:
Фигово, что вменяемых инструкций по сборке GCC под для arm-none-eabi нет, только устаревшие и с недосказанностями. Сижу вот, прокачиваю интуицию с интеллектом — авось, завершу квест за день ((:
Мы верим в вас! :3
ВНЕЗАПНОна форум в соответствующую тему , туда же переносим отсюда обсуждение текущих косяков. Нафлудили тут мы все уже порядком (:
Т.к. RoboCraft ARM IDE 0.1 пока в стадии тестирования и правки (не у всех работает ARM toolchain), об ошибках в работе IDE (включая будущие версии) пишем
Коллеги, подскажите, а как используя такую сборку IDE, компилировать проги на асме?
Нужно, чтобы у ассемблерного исходника было расширение .S (именно в верхнем регистре) — тогда IDE будет его воспринимать правильно. А дальше добавляешь файл в проект, как обычно.
Всего-то )) Спасибо!
А отладка пошагово будет работать по каждой строчке асм-кода?
Да, только не выключайте отладочную инфу в свойствах проекта и используйте F5 (Step into): почему-то F6 (Step over) работает некорректно для ассемблера — вместо перехода на следующую инструкцию выходит из функции, написанной на ассемблере, т.е. ведёт себя, как Step out.
burjui, спасибо за ответы выше.
Сейчас встала гораздо бОльшая проблема. Настроил всё по инструкции, только для F4-discovery. Собираю этот пустой проект, получаю на выходе debug elf аж 8 мегабайт! Release elf около 300 кб, что тоже ни в какие ворота не лезет.
Периверал либу и CMSIS брал с сайт st.com. Скрипт линкера бралотсюда . Может, в этом скрипте проблема? Я если честно не разбираюсь в нем. Тупо скопировал.
Сам спросил, сам ответил ))) Забыл галочку поставить на remove unused sections ))
А вы так не переживайте насчёт размера ELF (:
Сейчас вот посмотрел на ELF для своей демки для HD44780 — 6.8 МБ, и это с порезанными секциями. А размер кода для камня всего-то 32 КБ. Но это и понятно: сишного кода довольно много, да ещё проект с libc линкуется — а она-то без -ffunction-sections скомпилена.
Еще проблемы:
Через eclipse отладка не запускается. Открываю в консоли gdb, соединяюсь с 4242, всё ок.
Пишу load Debug/template.elf и получаю:
Loading section .interp, size 0x13 lma 0x0
Load failed
А если в консоли gdb написать «file Debug/template.elf», то получаю:
Reading symbols from Debug/template.elf…(no debugging symbols found)…done.
Так наоборот же надо:
file Debug/template.elf
load
Команда file устанавливает текущий файл и читает из него отладочную информацию, а команда load (имя файла указывать не обязательно после выполнения file) уже загружает код в МК.
Собственно, после load так же точно появляется load failed.
Кстати, в проекте stlink есть утилита st-flash. С помощью нее флеш читается и пишется нормально. Чтобы прошить МК, минуя gdb, это мн надо эльф загнать в МК?
Стоп, а вы какой gdb используете, обычный? Нужно arm-none-eabi-gdb! В МК можно только бинарники заливать — ни hex, ни elf, а именно бинарник, который можно получить так:
ну естественно использую arm-none-eabi-gdb. Кстати, если скомпилить пример blink, который идет с проектом stlink, то он нормально загоняется в МК через arm-none-eabi-gdb. Но только если он слинкован под sram. Если линковать под флеш, то он тоже загоняется в МК, но выполняться отказывается.
obj-copy попробую сейчас
Полученный бинарник загоняется, но не работает ((( Наверное, с адресами где-то косяк. Но вот как понять, где…
Советую взять свежую версию stlink изрепозитория Карла , там много улучшений (особенно в плане скорости).
Да я уже брал и свежую версию. Проблема явно где-то в линковке. Я с дискавери перед всеми экспериментами слил содержимое флеш памяти, которое по дефолту было. И вот если этот бинарник залить обратно, то он работает как и раньше. Следовательно — проблема в самих бинарниках (ну или в эльфах, из которых они получаются)
Тогда могу только посоветовать прошерстить директорию example в stlink, а заодно SPL для STM32F4 — в обоих есть как рабочие примеры, так и скрипты линкера.
P.S. Только что вспомнил: я же для STM32F4DISCOVERY писал простейшую зажигалку светодиодов. Держитеархив с проектом .
Ваш проект не собирается даже ((
tmp/ccyubkA9.s: Assembler messages:
/tmp/ccyubkA9.s:571: Error: registers may not be the same — `strexb r0,r0,[r1]’
/tmp/ccyubkA9.s:599: Error: registers may not be the same — `strexh r0,r0,[r1]’
make: *** [CMSIS/core_cm3.o] Ошибка 1
И кстати, пример из stlink тоже перестал работать
Ага, заметил неладное в выводе gdb-сервера:
2012-02-23T22:00:08 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134217728 (0x8000000)
2012-02-23T22:00:08 INFO src/stlink-common.c: Erasing flash page at addr: 0x8000000
2012-02-23T22:00:08 INFO src/stlink-common.c: Successfully unlocked flash
EraseFlash — Sector:0x0 Size:0x4000
2012-02-23T22:00:08 INFO src/stlink-common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2012-02-23T22:00:08 INFO src/stlink-common.c: Successfully unlocked flash
flash_do: page 08004000
2012-02-23T22:00:10 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134234112 (0x8004000)
2012-02-23T22:00:10 INFO src/stlink-common.c: Erasing flash page at addr: 0x8004000
2012-02-23T22:00:10 INFO src/stlink-common.c: Successfully unlocked flash
EraseFlash — Sector:0x1 Size:0x4000
2012-02-23T22:00:11 INFO src/stlink-common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2012-02-23T22:00:11 INFO src/stlink-common.c: Successfully unlocked flash
flash_do: page 08008000
2012-02-23T22:00:13 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134250496 (0x8008000)
2012-02-23T22:00:13 INFO src/stlink-common.c: Erasing flash page at addr: 0x8008000
2012-02-23T22:00:13 INFO src/stlink-common.c: Successfully unlocked flash
Как видите, это отличается от вашего лога. Как же всё это вылечить, блин
Не вижу тут ничего неладного — запись идёт по правильным адресам (начало флеша — 0x08000000), только размер страницы отлитчается — 16 КБ вместо 1 КБ, но это особенность флеша на High-density кристаллах.
Ну ладно, в этом действительно нет проблемы скорее всего. Но и без этого куча проблем.
А вас не затруднит собрать эльф для F4? Выше я писал, что у меня ваш проект не собирается.
Держиотладочного эльфа .
Заказал себе STM32F4DISCOVERY, т.к. нашел по вкусной цене, хотя изначально хотел L или VL
Настройка IDE и отладчика сильно будет отличаться от описанной? Использую Ubuntu, до этого с STM дела не имел.
качайте готовую сборку из по ссылке в статье. у меня тоже ubuntu, все по инструкции делал, но оно так и не взлетело, дня три промучился. Скачал готовое, и через 5 минут уже работал. Видимо, работает только в данном тонком сочетании конкретных версий по
Отличаться будет настройка проекта:STM32F4 DSP and standard peripherals library ссылку на проект — там скрипт есть, но немного неполный: я ещё не разобрался с CCM — Core Coupled Memory. Имейте ввиду, данные в CCM доступны только из кода, и недоступны периферии через DMA (так сказано в даташите).
1) Тип процессора «cortex-m4»
2) Другая библиотека периферии —
3) Определение STM32F10X_MD_VL можно просто выкинуть нафиг
4) Ну и в настройках линкера и в проекте заменить stm32f100rb.ld на соответствующий скрипт, который можно аналогичным описанному в статье способу позаимствовать из папки с SPL. Выше я давал
Также немного будет отличаться работа с периферией. Я STM32F4xx пока не исследовал детально, но, к примеру, режим GPIO там разделён на два поля: одно для pull-up/open-drain, другое для выбора прямого управления или чяерез альтернативные функции.
Ясно, спасибо.
По поводу периферии — не страшно, понятно, что другой чип, но документация у них нормальная, попробую разобраться. Главное IDE настроить, чтобы можно было спокойно ковырять.
Осталось только дождаться, когда посылочка приедет.
Приехали вчера дискавери, как обычно ночь без сна 🙂
В итоге многое удалось — stlink цепляется к плате, сервер запускается, GDB работает. Тестовый проект для F4 собирается без ошибок (конечно были мелочи, типа не все библиотеки скопировал). Но проверить всё в куче из-под IDE не успел, уже тупил, засыпая 🙂
Собственно есть вопрос: я брал скрипт линкера сайта ST, по началу линкер ругался на какой-то не найденный файл, проанализировал его, закомментил последнюю строку — заработало. Потом посмотрел ваш скрипт — он сильно отличается от этого. Хотелось бы узнать, что делает этот скрипт, на что он влияет (просто я с GCC дела не имел, хотя на Си опыт программирования есть небольшой)? Или ссылки какие почитать про него?
Можно еще небольшой вопрос, я не надоел? 🙂
Настроил IDE, запускаю отладку. Светодиод на ST-LINKе начинает мигать, на дискавери идёт демо-программа. При том я могу ей управлять — остановить, посмотреть состояние регистров и т.д.
Всё отлично, но почему не залилась моя программа? Или там что-то хитрое надо сделать?
Исходник соответственно к отладке не привязан, брекпойнт ставится, определяется как валидный, но не работает. И не останавливается на main(), а просто ругается, что не может её определить, приходится отключать остановку на main() в конфигурации отладки…
Скажем так, иногда, всё же, нужно в чём-то разбираться самому. Одно из двух — либо вы один из тех, у кого просто волею судьбы всё из рук валится и ничего не работает (не везёт), либо вы невнимательно читаете статьи и ленитесь решать проблемы самостоятельно. Хотелось бы верить, что первое.
Что касательно описанной вами проблемы — уж извините, но я не телепат, и не могу знать, почему у вас не залилась программа. Причин может быть дофига и больше: не запустили stlink, не настроили или настроили неправильно отладочную конфигурацию, пытаетесь заливать не ту прошивку, прошивка заливается по неверным адресам, прошивка не заливается вообще (ошибка stlink, МК или бог знает, чего ещё), да барабашка код по дороге в МК украл. Могли бы намекнуть логами stlink, например (:
Только, ради бога, не надо постить все логи в комменты — можно написать в личку или дать ссылку на файл.
В конце концов, скоро невозможно будет читать эту ветку комментариев из-за её чудовищного размера.
Да нормально я читаю статьи, просто МК у меня другой, и повторять 1:1 не выйдет. Плюс это первое знакомство с ARM и аппаратной отладкой, и много непонятного, например — что он льёт в контроллер? hex? bin? elf? На что смотреть, если есть проблемы?
Допустим я и подумать не мог, что можно отлаживать уже прошитый код в МК независимо от исходника.
Конкретно в моём случае проблема была в коде. Ну понятно, пустышку он не скомпилит, поэтому взял ваш под F4 со светодиодами, но он и его не компилил — ошибок нет, а на выходе пусто. Пока не обратил внимание на варнинг. Пришлось добавить в код Reset_Handler — hex заполнился данными, и при запуске дебага демка благополучно затёрлась, т.е. МК прошился.
Ладно, не буду больше надоедать, спасибо вам за статью и за ответы!
Спасибо, вечером приду с работы, попробую.
Если опять не взлетит, скачаю вашу сбору IDE. Может быть, у меня другие версии компонентов конструктора, и в них не работает.
Подскажите, а можно в процессе отладки лазить по регистрам периферии? В идеале и читать и изменять их.
Можно. Для этого во время отладки вызовите окно «Registers».
Уже открыто. Но там я вижу только регистры РОН, f0-f7, lr, pc, sp, и еще парочку.
А, точно, вы же про периферию. Ну тогда окно «Expressions», там добавляйте интересующую периферию и смотрите/изменяйте. Я так TIM3 добавлял, а потом менял счётчик таймера и разрешал/запрещал его работу. Только программу на паузу ставить нужно.
burjui, большое спасибо за статью!
Однако у меня с github возникло взаимонедопонимание:
$ git clone git://github.com/burjui/stlink.git -b server-restart
Initialized empty Git repository in /home/user/devel/stlink/.git/
это означает, что проблемы у github или у меня?
Делаю то же самое:
Даже не знаю, почему у вас создаётся пустой репозиторий o_O
На всякий случай проверьте версию git — вдруг у вас слишком старая (хотя всё равно чуднó):
а в вашей «готовой сборке IDE» не придется клонировать ветку из гита? может мне тогда стоит воспользоваться ей?
Не придётся, но там старая версия stlink, так что я в скором времени сделаю новую сборку с более свежими версиями софта.
Кстати, необязательно именно через git получать свежие сорцы — на GitHub можно скачать выбранную ветку в виде zip-архива: нужно выбрать в списке «branch: server-restart» и нажать кнопку «ZIP». На всякий случай даюссылку . При переходе по этой ссылке GitHub генерит zip-архив со свежими сорцами и отдаёт его.
Вообще у меня на работе все в Keil прогают под ARM 🙂
может кто скинуть\сделать пример для stm32l152rbt6(stm32l-discovery) по работе с usart? хотябы чтоб просто плата и комп обменивались инфой в 1 байт
Подскажите, пожалуйста, как линковать под RAM?
Сам смотрю на свой комментарий где-то выше, вижу, что я там писал, что линковал под RAM, а сейчас хоть убей не могу вспомнить, как я это делал 😀
А я так вообще не пробовал (:
В принципе, можно в скрипте линкера всем секциям прописать место назначения ram вместо flash. Но я бы не стал этим маяться, т.к. SRAM обычно мало, а flash-память достаточно быстра и число перезаписей до отказа очень большое.
Об этом я уже тоже подумал )) Сейчас на работе сижу, дома попробую.
В оперативку хочу линковать для отладочных целей, чтобы скорость увеличить и ресурс флешки поэкономить. Насчет ресурса не знаю, может мне его и на годы хватит, но вот скорость так себе. 1 кб/сек — это предел, обычно медленнее. Когда при отладке программы приходится перепрошивать МК по 100 раз на день, то даже 5-10 сек ожидания начинают напрягать.
А памяти у меня хватает. F4 же ))))
burjui, спасибо за статью и сборки, все работает отлично. Попробовал новую версию st-util под линукс — самолет.
Пытаюсь собрать свежий st-util под винду, компилятор ругается на отсутствие libusb.h
При этом libusb встал в mingw правильно — в lib и include все есть. Пробовал в исходнике подправить на #include <libusb-1.0/libusb.h>, тоже без эффекта. mingw, libusb, и пр скачаны по вашим ссылкам.
Куда копать?
Копать в лучше вниз, метра на полтора — туда бросьте директорию stlink и закопайте. С недавних пор (версия 0.6.0) в OpenOCD появилась поддержка ST-Link обеих версий, работает на всех STM32, скорость прошивки под 17 КБайт/с. Офигенно, в общем. Т.к. версия девелоперская, даже не бета, для винды один чуваксборки делает . Сама прога просто конфетка — и GDB-сервером прикидывается, и telnet-сервером (можно команды вручную выполнять — reset, halt, прошивку, очистку).
Пожалуй, напишу на следующей неделе пост на тему склеивания OpenOCD с Eclipse (:
Понятно. Уже видел, что она есть, но не знал что можно под винду собрать. Огромное спасибо за ссылку.
Попробовал OpenOCD по вашей ссылке в комплекте с ZylinCDT. Завелся с первого раза, загрузка — космический корабль :). Инструкции по этой ссылке//www.indigresso.com/wiki/doku.php?id=opentag:tools:gnu_arm_eclipse">по этой ссылке
Тот ld скрипт, который Вы давали для stm32lxx — глючный. Взял от TrueStudio, полет нормальный.
А да, что касается непосредственно stlink, там проблема в include path. Вы именно в MSYS собирали (правильно) или просто в cmd.exe с прописанным PATH до MinGW (не очень)?
Я собирал из msys. Но это наверное уже не важно :).
Большое спасибо за статьюelectronix.ru/forum/lofiversion/index.php/t99096.html
Проблема возникла только одна (Ubuntu 12.04)
не определен тип
В Eclipse
Type ‘uint8_t’ could not be resolved misc.h /stm32vld_template/StdPeripheralDriver/inc
Насколько я понимаю uint8_t — часть стандартной библиотеки,
а вот тут
идут активные споры что у производителя arm свое определение uint8_t
Я только начинаю с этим делом разбираться, наздеюсь что ктонибудь подскаже в какую сторону рыть
Проблему решил но повилась другая…
Подскажите пожалуйста, что я делаю не так.
Отладочную плату STM32f4Discovery включаю в компьютеры, но она определяется, как неизвестное устройство, при чём, как в Linux (Ubuntu 12.04 amd64), так и в Windows 7 (x64), и в Windows XP. Это всё разные компьютеры, так что системы — точно не виноваты.
Возможно как-то поправить ситуацию? Или плата бракованная/неправильно прошитая?
Помогите пожалуйста сборку проекта делаю как вы описали для stm32l_discovery но когда начинаю тестировать сборку проекта как у вас написано пишет
arm-none-eabi-gcc -O0 -Wall -Wa,-adhlns=«main.o.lst» -c -fmessage-length=0 -MMD -MP -MF«main.d» -MT«main.d» -o«main.o» "../main.c"
../main.c:1:23: fatal error: stm32l1xx.h: No such file or directory
compilation terminated.
cs-make: *** [main.o] Error 1
директории с папками библиотек вроде указал нормально
заранее всем спасибо
Может, вы не те библиотеки к проекту добавляете? Для серии STM32L1xx нужно качать свои.
Я создавал и настраивал как писалось выше а
папки с библиотеками добавлял отсюда же из «Все необходимые файлы для скелетного проекта:» stm32l_discovery"
второй день бьюсь не знаю что делаю не так
Спасибо
А кто-нибудь может подсказать какие файлы нужно взять, если использовать CMSIS V3?
У меня возникает ошибка Error: registers may not be the same — `strexb r0,r0,[r1]’
Исправлял как написано тут (http://we.easyelectronics.ru/PahanMenski/gcc-46-i-cmsis-ispravlyaem-oshibku-kompilyacii.html)
Но там говорят только про одно место, у меня еще вот такой кусок кода ошибается:
uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
__ASM(«strexh r0, r0, [r1]»);
__ASM(«bx lr»);
}
Говорят что в CMSIS v3 исправили эту ошибку, но там структура файлов совершенно другая, вот не знаю как эти файлы правильно подключить…
Начал осваивать ST32L152 на Дискавери, Eclipse и библиотеку STM. Есть проблема, получаю значение из АЦП, с канала измерения температуры, а пересчитать во lfoat не получается. запись вида:
float Temp, a=0.5,b=0.00166;
Temp = a/b;
компилируется, но отладчик загрузочный файл не может загрузить в память контроллера, выдаёт ошибку.Error in final launch sequence
Failed to execute MI command:
load D:\\stm32-discovery-projects\\workspace_STM32L\\stm32ld_quickstart\\Debug\\stm32ld_quickstart.elf
Error message from debugger back end:
Error writing data to flash
Error writing data to flash
Из-за чего такое может быть?
огромное спасибо за статью! раньше пробовал Eclipse под AVR, не понравился. теперь понял почему. сейчас начал осваивать ARM. Ваша статья как нельзя вОвремя. Eclipse настроил по статье, всё пошло с первого раза. еще раз спасибо!!!
не пойму только, а как эклипсе указать, где у нее компилятор лежит (yagarto).
Без этого, конечно, ошибку проекта выдает.
Еще бы хотелось все тоже самое, но с внешним make файлом посмотреть как настраивать.
Project→Properties→C/C++ build: снимаешь галочку «Generate Makefiles automatically», в поле «Build directory» пишешь путь к папке с Makefile’ом. Не забывай, что эта настройка действует для выбранной конфигурации (Debug или Release), так что выбери перед этим нужную вверху окна (или All).
А, да, про Yagarto подсказать не могу — не использовал. Предлагаю не выпендриваться (: и использовать Sourcery CodeBench Lite, т.к. всё равно там те же самые инструменты, что и в Yagarto: GCC, GDB, Binutils.
Вот и я дошел до вопросов.
А, именно, стал устанавливать Eclipse и ARM Plugin:
Распаковал. Но при запуске этого Эклипса система потребовала установить:
sudo apt-get install eclipse-platform
Ну, установил, и запустил eclipse.
Eclipse SDK
Version: 3.5.2
Build id: M20100211-1343
Получается архив был не нужен? Или я не правильно распаковал?
Ладно, продолжим?
Ошибка:
Cannot complete the install because one or more required items could not be found.
Software being installed: GNU ARM C/C++ Development Support 0.5.4.201202210114
(org.eclipse.cdt.cross.arm.gnu.feature.group 0.5.4.201202210114)
Missing requirement: GNU ARM C/C++ Development Support 0.5.4.201202210114
(org.eclipse.cdt.cross.arm.gnu 0.5.4.201202210114)
requires ‘bundle org.eclipse.cdt.managedbuilder.core 8.0.0’ but it could not be found
Cannot satisfy dependency:
From: GNU ARM C/C++ Development Support 0.5.4.201202210114
(org.eclipse.cdt.cross.arm.gnu.feature.group 0.5.4.201202210114)
To: org.eclipse.cdt.cross.arm.gnu [0.5.4.201202210114]
Что-то не хватает. Но что?
Спасибо! Александр.
p.s. Готовую сборку скачал. Но, во-первых, интересно почему так не получилось?
Во-вторых, подозреваю я и сборку неправильно разархивирую. Кажется, Double Commander не лучшее средство для разархивирования.
А CDT кто будет ставить — Пушкин? (:
Ну, вот, же… Только при запуске эклипса из этой папки он не работает.
Я под Убунтой
Штырит?
Шуткую. Вы не тот Eclipse запускаете, надо так:
Это не винда, здесь нужно явно указать путь к бинарнику, пусть даже и относительный.
Ну, я не совсем плохой, то:
А у вас Ubuntu какой версии?
У меня 10-я люцида:
Linux home-desktop 2.6.32-45-generic-pae #104-Ubuntu SMP Tue Feb 19 21:36:53 UTC 2013 i686 GNU/Linux
Мне не хватает какой-нибудь Явы… Но почему Эклипс установленный через apt-get работает?
Какая-то глупость…
Видимо в вашем старом дистрибутиве загрузчик ELF располагается по другому пути. Eclipse слинкован с /lib64/ld-linux-x86-64.so.2, а у меня Ubuntu 12.10:
Так что придётся вам настраивать Eclipse из дистрибутива или сeclipse.org
Запустился robocraft-arm-ide-0.1-linux-i686.tar.xz Может быть, я чего не понимаю… Разберемся.
А можете это прокомментировать?
http://robocraft.ru/forum/viewtopic.php?f=19&t=122&p=1896#p1886
Спасибо!
Зачем нужен этот файл stm32f100rb.ld?
Как мне его сделать для f4?
Это скрипт линкера (компоновщика) ld из набора утилит binutils, который входит в состав Sourcery CodeBench Lite. В скомпилированных объектных файлах код и данные раскиданы по соответствующим секциям, а в скрипте указаны адреса, по которым следует эти секции размещать в памяти МК (Flash и SRAM). Так как МК бывают с разными объёмами памяти, каждому нужен свой скрипт. Среды типа CoIDE и всякие коммерческие обычно автоматически добавляют в проект нужный скрипт линкера, основываясь на выбранной в свойствах проекта модели МК.
Можете скачать мойпроект-заготовку для STM32F4DISCOVERY: там скрипт линкера присутствует — правда, не самый корректный, но-таки рабочий. Как вариант — скачать Standard Perpheral Library для STM32F4xx: там должны быть примеры проектов для разных IDE и компиляторов (наш случай — Eclipse и GCC). Ну и, если совсем туго, можно погуглить по we.easyelectronics.ru, ибо там тусуются STM’щики в заметных невооружённым глазом количествах.
Ну, ладно еще вопрос… Как же мозги плохо восстанавливаются!
Запускаю st-link? светодиод справа от разъема перемигивается зелёным и так и остается. Видимо st-link запустился и плата ждет загрузки.
Run — Debug Configuration:
Ну, или картинкаошибки
Настройки запуска:Debug Main и Debug Configurations
Спасибо!
александр.
А ты внимательно прочитай про настройку отладчика (поищи по фразе «Теперь осталось только настроить отладчик.»). GDB command file указать забыл.
Скажите, что ещё внимательно почмитать?
Запустил отладку и вижу ошибку:
Всем привет. Пытался повторить все операции с STM32LDiscovery на windows, всё получилось до момента установки stlink. Как и было описанно, после установки драйвера WinUSB(с пом. Zadig), ввод команды «st-util»(без ключа) не привёл к какому-либо выводу на терминал. В другом окне так же запустил GDB с пом. команды «arm-none-eabi-gdb» и далее «target extended-remote localhost:4242»(«tar ext :4242») результатом были иероглифы, а на другом терминале(st-util) ничего не произошло. Старался выполнять все ваши инструкции точно, но где-то видимо упустил что-то. Все остальные настройки до и после раздела stlink выставил. Тестовый проект в эклипсе компилится. Подскажите где ошибся…
Возможно, я ошибся при сборке утилиты stlink, не положив нужные библиотеки (*.dll). Так или иначе, на сегодняшний день статья несколько устарела, и вместо stlink лучше использовать OpenOCD, который работает быстро и надёжно. В дистрибутиве OpenOCD в папке scripts/board есть готовые конфиги для плат STM32xxxDiscovery, только нужно установить фирменный драйвер для отладчика ST-Link.
Добрый день!
У меня STM32F4 Discovery. Я скачал эклипс с CDT, gnuшный gcc для ARM и st-util, скачал некоторый набор библиотек для мой платы. По отдельности все работает — компилятор справляется со сборкой int main(){}, st-util и gdb позволяют связаться с платой. Но когда я пробую собрать хотя бы один проект с примером начинается полная фигня на этапе линковки.
Пробовал разные скрипты. С вот таким:
SECTIONS
{
PROVIDE(__executable_start = 0x0008000);
. = 0x00008000 + SIZEOF_HEADERS;
.interp: { *(.interp) }
.note.ABI-tag: { *(.note.ABI-tag) }
.hash: { *(.hash) }
.dynsym: { *(.dynsym) }
.dynstr: { *(.dynstr) }
.version: { *(.version) }
.version_d: { *(.version_d) }
.version_r: { *(.version_r) }
.rel.dyn: { *(.rel.dyn) }
.rela.dyn: { *(.rela.dyn) }
.rel.plt: { *(.rel.plt) }
.rela.plt: { *(.rela.plt) }
.init: { KEEP (*(.init)) }
.plt: { *(.plt) }
.text: { *(.text .text.*) }
.fini: { KEEP (*(.fini)) }
PROVIDE(__etext = .);
PROVIDE(_etext = .);
PROVIDE(etext = .);
.rodata: { *(.rodata .rodata.*) }
__exidx_start = .;
.ARM.exidx: { *(.ARM.exidx*) }
__exidx_end = .;
. = ALIGN (CONSTANT (MAXPAGESIZE)) — ((CONSTANT (MAXPAGESIZE) — .) & (CONSTANT (MAXPAGESIZE) — 1));
. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
.tdata: { *(.tdata .tdata.*) }
.tbss: { *(.tbss .tbss.*) }
.preinit_array:
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array:
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array:
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(.fini_array*))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.dynamic: { *(.dynamic) }
.got: { *(.got.plt) *(.got) }
.data:
{
__data_start = .;
*(.data .data.*)
}
_edata = .;
PROVIDE(edata = .);
__bss_start = .;
__bss_start__ = .;
.bss:
{
*(.bss .bss.*)
. = ALIGN(. != 0? 32 / 8: 1);
}
__bss_end__ = .;
_bss_end__ = .;
. = ALIGN(4);
__end = .;
_end = .;
PROVIDE(end = .);
}
Программа собирается, но при попытке загрузить ее получаю сообщение load failed.
Со скриптом который шел в примере:
/* Entry Point */
ENTRY(Reset_Handler)
/* Highest address of the user mode stack */
_estack = 0x20020000; /* end of 128K RAM on AHB bus*/
/* Generate a link error if heap and stack don’t fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
FLASH (rx): ORIGIN = 0x08000000, LENGTH = 1024K
RAM (rwx): ORIGIN = 0x20000000, LENGTH = 128K
CCM (rwx): ORIGIN = 0x10000000, LENGTH = 64K
}
/* Define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
.isr_vector:
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH
/* The program code and other data goes into FLASH */
.text:
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)
KEEP (*(.init))
KEEP (*(.fini))
. = ALIGN(4);
_etext = .; /* define a global symbols at end of code */
_exit = .;
} >FLASH
.ARM.extab: { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
.ARM: {
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >FLASH
.preinit_array:
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH
.init_array:
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH
.fini_array:
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(.fini_array*))
KEEP (*(SORT(.fini_array.*)))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH
/* used by the startup to initialize data */
_sidata = .;
/* Initialized data sections goes into RAM, load LMA copy after code */
.data: AT ( _sidata )
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start */
*(.data) /* .data sections */
*(.data*) /* .data* sections */
. = ALIGN(4);
_edata = .; /* define a global symbol at data end */
} >RAM
/* Uninitialized data section */
. = ALIGN(4);
.bss:
{
/* This is used by the startup in order to initialize the .bss secion */
_sbss = .; /* define a global symbol at bss start */
__bss_start__ = _sbss;
*(.bss)
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .; /* define a global symbol at bss end */
__bss_end__ = _ebss;
} >RAM
/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack:
{
. = ALIGN(4);
PROVIDE ( end =. );
PROVIDE ( _end =. );
. =. + _Min_Heap_Size;
. =. + _Min_Stack_Size;
. = ALIGN(4);
} >RAM
}
линковщик ругается на отсутствие .rel.plt секции. После добавления этой секции, он ругается на неопределенную ссылку на __libc_init_array.
Прошу помощи со скриптом линковщика и если можно чуть подробнее описать процедуру загрузки и запуска программы в память и флеш stmки.
Прошу прощения за длинный коментарий 🙂
«Скачать CodeBench можно на сайте компании-разработчика как в виде инсталлятора (рекомендую), так и простым архивом»
Скачал два варианта .bin — не устанавливаеться. получаю такое:
nemo@nemo-MS-1688 ~/Downloads $ ./arm-2013.05-24-arm-none-linux-gnueabi.bin
Checking for required programs: awk grep sed bzip2 gunzip
===============================================================
Error: DASH shell not supported as system shell
===============================================================
The installer has detected that your system uses the dash shell
as /bin/sh. This shell is not supported by the installer.
You can work around this problem by changing /bin/sh to be a
symbolic link to a supported shell such as bash.
For example, on Ubuntu systems, execute this shell command:
% sudo dpkg-reconfigure -plow dash
Install as /bin/sh? No
Please refer to the Getting Started guide for more information,
or contact CodeSourcery Support for assistance.
===============================================================
nemo@nemo-MS-1688 ~/Downloads $ sudo dpkg-reconfigure -plow dash
[sudo] password for nemo:
nemo@nemo-MS-1688 ~/Downloads $ sudo dpkg-reconfigure -plow dash arm-2013.05-24-arm-none-linux-gnueabi.bin
dpkg-query: package ‘arm-2013.05-24-arm-none-linux-gnueabi.bin’ is not installed and no information is available
Use dpkg —info (= dpkg-deb —info) to examine archive files,
and dpkg —contents (= dpkg-deb —contents) to list their contents.
/usr/sbin/dpkg-reconfigure: arm-2013.05-24-arm-none-linux-gnueabi.bin is not installed
, и в архиве(arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2). Linux Mint 15.
Если так, то подскажите куда надо распаковать архив ( в какую папку, или какие пути прописать), чтобы всё заработало.
Спасибо!
В чем проблема в первом случае?
1. sudo dpkg-reconfigure -plow dash
На вопрос отвечаешь да.
2. Запускаешь установщик:
sudo ./arm-2013.05-24-arm-none-linux-gnueabi.bin
Должна пойти установка. НО! Судя по названию ты скачал инструментарий для сборки под встроенный в arm linux. Если не собираешься заливать линукс на стмку нужен дугой инструментарий. Мой назывался arm-2013.05-23-arm-none-eabi.bin
Скачал инструментарий как у вас. Вторая попытка тоже без успеха:
Могу угадать. Вероятнее всего не хватает прав на исполнение файла. chmod +x ./arm-2013.05-23-arm-none-eabi.bin поможет скорее всего. Если нет, то покажите листинг ls -l из каталога содержащего arm-2013.05-23-arm-none-eabi.bin
Не работает
листинг
ОК. Из листинга видно что файл arm-2013.05-23-arm-none-eabi.bin имеет права -rw-r—r—. То есть прав на исполнение у вас нет. Значит их надо сперва получить, а затем пробовать исполнить скрипт. Для изменения прав доступа используется команда chmod, ее опция +x добавляет права на выполнение файла имя которого указывается после опции. Таким образом надо выполнить из каталога с файлом arm-2013.05-23-arm-none-eabi.bin команду: «chmod +x arm-2013.05-23-arm-none-eabi.bin»
Без точки и без кавычек, я точку поставил исключительно как знак препинания в конце предлоения :)))
После выполнения chmod смотрим появились ли права на исполнение (буква x) командой ls -l. Затем выполняем скрипт
sudo ./arm-2013.05-23-arm-none-eabi.bin
Если что не будет получаться присылай листинг.
Достал я Вас уже… Права на исполнение есть, но дальше никак:
Сделалал так sudo ln -sf bash /bin/sh, потом запуск установки — получилось! Спасибо огромногое!!!
Этим действием ты убрал из системы /bin/sh. Потом она может понадобиться для запуска какого-нибудь скрипта. Теоретически можно просто загрузиться с флешки или liveCD (естественно это должна быть та же версия дистрибутива что и устанволена на ПК) и скопировать /bin/sh с образа на винт в каталог /bin.
sudo mount /dev/sd[a..z][1..20] /mnt (как идентифицируются винты и работает mount советую разобраться самостоятельно, потом часто будет нужно)
sudo cp /bin/sh /mnt/bin
sudo umount /mnt
sudo reboot
Установщик сам же сказал выполни sudo dpkg-reconfigure -plow dash, а потом я запущусь, внимательнее надо 😉
а где взять *.ld файл для другого микроконтроллера? у меня например SMT32F103RB
Меня как-то смутило то, что по запросу SMT32F103RB гугл выдал всего 4 результата. Надо смотреть, что написано на корпусе чипа, а не на плате. Тогда скоре всего нужный скрипт очень быстро нагуглится.fun-tech.se/stm32/linker/
Я бы сперва попробовал использовать приведенный в уроке скрипт, может быть все заработает.
stm32l152rb.ld — это скрипт линковщика в котором указано какие секции по каким адресам размещать в исполняемом файле, если у тебя тот же cortex-m3 то различия могут быть только в размере памяти и адресах. В этом случае поправить скрипт вполне реально. Инструкции есть, к примеру вот:
Спасибо!
https://github.com/jeremyherbert/stm32vl-discovery-template-project/blob/master/stm32f100.ld
Я думаю этот скрипт пойдет идеально 🙂
Какие новости по поводу win7(64)
Народ, а не подскажите как быть с Миландровским 1986ВЕ92У? Интересует как сделать скрипт MLD.ld и elf файл. И подойдет ли elf, выложенный тутwe.easyelectronics.ru/cortex/sparivaem-coide-i-rossiyskiy-cortex-m3.html , собранный под CooCox.
Здравствуйте. Очень интересная статья.
А чем изменится настройка среды для платы: NXP ARM Cortex-M3 lpc1768-mini-dk2 (http://www.ebay.com/itm/NXP-ARM-Cortex-M3-LPC1768-Mini-DK2-Development-board-/181045434143?hash=item2a2726171f). В качестве программатора/отладчика используется предыдущая версия: JetLink (http://starterkit.ru/html/index.php?name=shop&op=view&id=51), в продаже я ее не нашел уже. Я так понимаю, изменится Sourcery CodeBench Lite Edition на что-то другое и stlink на некую библиотеку jetlink, но где искать это все? Плата discovery у меня тоже имеется (stm32f3discovery ARM Cortex-M4 STM32F303VCT6), но у нее нет ethernet.
Здравствуйте. Возможно ли к вашей сборке под Винду прикрутить j-link?
Кто нибудь знает, в чем может быть проблема?
Похоже на то, что Eclipse пытается запустить ваш .elf как обычный исполняемый файл. Вероятно, у вас ошибка в отладочной конфигурации, или вместо подключения к GDB server используется обычная. А вообще, данная статья устарела, лучше перепроверить по другим источникам.
После ознакомления с замечательной статьей
Попробовал настроить IDE для Fedora RFRemix release 22 (Twenty Two)
>uname -a
Linux sasha 4.0.8-300.fc22.x86_64 #1 SMP Fri Jul 10 21:04:56 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Опишу свои изыски.
1. Установил:
>sudo dnf install arm-none-eabi-gcc-cs-c++ eclipse-nls-ru eclipse-cdt-parsers qemu-system-arm eclipse-color-theme arm-none-eabi-gdb
2. Погуглив нашел ресурс:
3. Установил согласно инфы:
4. Создал пустой проект для платы STM32L100C-DISCO.
5. Все запустилось с первого раза без бубна.
Скачал вашу сборку, при попытке собрать проект ошибка
Description Resource Path Location Type
*** незавершённая ссылка на переменную. Останов. makefile /stm32f103c_template/Debug line 46 C/C++ Problem
строка на которую появилась ошибка в makefile
@echo ‘Building target: $@’
proff@denis:~$ uname -a
Linux denis.ustinov 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu 16.04.2 LTS
А в популярной, не знаю, почему, среде Keil ещё и редактор кода, судя по его виду и удобству, написан во времена Windows 95…
Вы EWARM запускали? NotePad++ и то в сто раз информативнее и круче. Позор для такой крутой и дорогой среды. Там ни подсветки синтаксиса нормальной, ни автодополнения, ни, тем более, ха — ха, интеллисенса минимального… Кейл, ИМХО, выглядит поцивильнее, еще, чем эта EWARM)))
Хотя, согласен, далеко не Microsoft Studio))
у меня stm32l-discovery вроде сделал всё как надо под убунту, компилится всё норм, но когда нажимаю дебаг, то выдает
в файле gdb_commands_debug
з.ы. проект называется test
помогите залить на платку
Русский перевод такой русский LOL
Не уверен в причине ошибки, но вы могли забыть заменить в gdb на arm-none-eabi-gdb в отладочной конфигурации.
Вообще, если у вас не работает, значит вы что-то сделали неправильно (если версии софта, конечно, те же). Проверьте, правильно ли вы настроили проект и отладочную конфигурацию. Опять же, какая у вас версия софта, как ставили — вручную или из репозитория? И т.п.
спасибо, действительно забыл) всё прошилось)
Моё искусство телепатии растёт с каждым днём 😀
Для убунты-12.04:
Запускается отладчик так:
mingw/msys не ставил, какой make надо использовать с Eclipse. Тот что есть дает ошибку
Может Eclipse но гдето подстроить.
Вопрос решился, у меня в пути присутствовал символ #
именно он и мешал, с такой проблемой столкнулся впервые другие IDE пропускают.
Не могу заставить это штуку работать…
Если делать как в статье, то в этом месте "Сервер должен отреагировать кучей сообщений в консоли:" получаю не кучу сообщений, а ошибку:
Полный код запуска st-util:
Не выходит даже загрузить прошивку из терминала, без Eclipse. В туториале пишут использовать st-flash,
./st−flash writein.bin 0x8000000
но она принимает аргументом .bin-файл, а есть только .hex и .elf. С ними не грузит. Второй вопрос — как узнать в какой адрес памяти грузить прошивку? Или цифру 0x8000000 не надо трогать?
Буду очень благодарен за помошь.
аналогичная беда.
Решено.
1. установить плагин для аппаратной отладки Help->Install New Software C/C++ GDB Hardware Debugging;
2. идем Run->External Tools->External Tools Configurations… создаем новую конфигурацию. в поле location пишем /usr/local/bin/st-util или где у вас он;
3. идем Run->Debug Configurations->GDB Hardware Debugging Создать новую конфигурацию.
вкладка Main В поле C/C++ Application указываем расположение и название *.elf файла (Debug/test.elf), в поле Project название проекта (test).
вкладка Debug GDB command = arm-none-eabi-gdb или полный путь. Ставим галочку Use remote target. generic tcp/ip. localhost. 4242.
вкладка StartUp Ставим галочку Set breakpoint at = main. галочку Resume
благодарностиwe.easyelectronics.ru/STM32/otladka-stm32-v-srede-eclipsegcc.html