LINUX.ORG.RU

STM32F3DISCOVERY linux

 , ,


0

4

Привет, друзья мои. Короче, из сабжа видно о чем пойдет речь. Мне нужно запрогать вышеупомянутую плату. Очень хочется понять как это делается, поэтому готовый эклипс мне пока не подходит. На это есть две причины:

1. Я так и не смог собрать рабочую среду. Ни одна прошивка не была залита. До этого я работал только с ардуиной. (оно же ниасилил)

2. Хочется понять то, что происходит. Как я понял, дополняшки к затмению скрывают консольные команды. Могу ли я взять исполняемый файл, скормить его компилятору и каким-то образом загрузить?

Меня очень интересует второй пункт. Хочу знать, что и как работает.



Последнее исправление: promistrio (всего исправлений: 1)

1. Устанавливай arm-none-eabi-gcc и будет тебе счастье. В качестве IDE советую geany.

1а. Выкинь нафиг SPL — худшее говно только в страшнем сне может присниться! Используй libopencm3.

2. Компелять нужно под ARM с указанием файла линковки для конкретного микроконтроллера.

2а. Тратить деньги на ST-link не нужно. Хоть у тебя на "дискаверине" он есть, для работы с другими платами проще использовать bootloader: нужен лишь переходничок USB<->TTL (и то, для МК 103-й и 105-й серий, остальные вроде как прошиваются напрямую через USB).

Примеров мыргания светодиодиками в нете дофига. И в самой opencm3 есть примерчики готовые.

Eddy_Em ☆☆☆☆☆
()

1. Плюсую к libopencm3. Если надо именно SPL - то рекомендую все-таки создать template-проект при помощи Eclipse.

2.

$ st-flash write blinky.bin 0x08000000

Minoru ★★★
()

3. Makefile (он, правда, для F103, но ты догадаешься как под F3xx переделать)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

1.a Что такое SPL?

2. В том то и вопрос: как компилировать? Какие флаги и т.п.

2а А чем ST-link оличается от bootloader?

Блин, я как знал, что вы подскажите способ проще. Мне этот изврат через эклипс проел череп.

Что касается MAKE файла, там нужно тупо заменить F103 на F3?

promistrio
() автор топика
Ответ на: комментарий от promistrio

Что такое SPL?

Говнокодерская библиотека от ST, дрянь редкостная.

как компилировать?

Бери готовый Makefile. Только дефайны сделай на свою серию.

А чем ST-link оличается от bootloader?

Первое — программатор. Дорогой. Второе — встроенная возможность каждого STM32.

эклипс

Жесть!

там нужно тупо заменить F103 на F3?

Не совсем: точно указать свою серию + еще внимательно на остальные ключи глянуть. Рекомендую погуглить готовые Makefile'ы для этого МК.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Первое — программатор. Дорогой. Второе — встроенная возможность каждого STM32.

А Вы не путаете программатор с отладчиком ?

anonymous
()

https://github.com/cjheath/stm32f3-discovery-basic-template

поставить openocd, прошивка в makefile есть.

Компилятор отсюда: https://launchpad.net/gcc-arm-embedded

Сейчас свежий: https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q2-update/ download/gcc-a...

Добавить его в PATH: export PATH=~/devel/gcc-arm-none-eabi-4_8-2014q2/bin:$PATH

как ставить SPL написано в доке на гитхабе: https://github.com/cjheath/stm32f3-discovery-basic-template

Качаем библиотеку в папку выше.

Патчим

Фиксим инклуды в Utilities/Makefile

INCLUDEPATH =   ../inst STM32F3_Discovery ../Libraries/STM32F30x_StdPeriph_Driver/inc ../Libraries/CMSIS/Device/ST/STM32F30x/Include ../Libraries/CMSIS/Include

mkdir inst
make install

Возвращаемся в ../stm32f3-discovery-basic-template Правим Makefile:

OPENOCD_BOARD_DIR=/usr/local/arm/share/openocd/scripts/board
OPENOCD_PROC_FILE=extra/stm32f3-openocd.cfg

OpenOCD может находить конфиги прямо в директории scripts и можно указывать относительный путь, например board/stm32f3discovery.cfg.

Если openocd старый (до 0.8.0) могут быть баги и лучше его поставить из исходников.

Собираем, зашиваем:

make
make program

Я прошиваю немного другим скриптом:

#!/bin/sh
arm-none-eabi-gdb -ex 'target extended localhost:3333' -ex 'load main.elf' --batch
sleep 1
arm-none-eabi-gdb -ex 'target extended localhost:3333' -ex 'monitor reset' --batch

Идея в том что можно в любой момент подключиться через gdb

openocd -f board/stm32f3discovery.cfg

ihanick
()
Ответ на: комментарий от anonymous

Путаю, т.к. отладчик не использую. Поэтому программатором и обзываю.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ihanick

как ставить SPL

Я про Ивана, а ты про болвана! В задницу SPL! Быдлокод быдлокодистей SPL днем с огнем не сыщешь!

И openocd не нужен, если нет желания отладчик использовать!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

И openocd не нужен, если нет желания отладчик использовать!

st-flash не всегда ребутает чип (по крайней мере на F4). щёлкать кнопой резета каждый раз лень, как и что-то менять при переходе на другой джитаг

Быдлокод быдлокодистей SPL днем с огнем не сыщешь!

а что делать, зато там самые полные примеры по девайсам.

Альтернативно можно скачать открытую либу для работы с кучей разных кортексов и последовать инструкциям https://github.com/libopencm3/libopencm3-examples

добавляем модуль git submodule add https://github.com/libopencm3/libopencm3

делаем make из корня

заходим в: libopencm3-examples/examples/stm32/f3/stm32f3-discovery/miniblink

make flash

libopencm3 имеет меньше багов чем но поддержка оборудования не полная

ihanick
()
Ответ на: комментарий от ihanick

но поддержка оборудования не полная

Они этим активно занимаются. Ну, а если что-то нужно будет, можно и патчик сделать, а им коммит предложить.

Всяко лучше, чем говно индусское использовать!

Вообще, идеальный вариант — совсем не использовать эти поганые библиотеки. Но влом читать огромный даташит. Пока объем оперативы позволяет клепать быдлокод, проще набыдлокодить, чем тратить время на нормальное программирование. Увы, такой подход наблюдается везде. Я и сам страдаю подобным.

Но на STM8, например, объем оперативы маленький. И там хочешь — не хочешь, а приходится делать по-человечески. Без быдлокода и говнобиблиотек.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

STM8, например, объем оперативы маленький. И там хочешь — не хочешь

я мотороллу наелся на mc9s12, данных больше чем памяти, или фукнциональность до нуля режь или кидай в корзину. Если на ассемблере, то я лучше на mips32 буду писать, чем на восьмибитном, а у gcc нормально работают только power, spark, x86 и arm

Если чисто на регистрах работать, то F0 хороши, но как только периферия нужна то всё равно приходится библиотеки использовать.

ihanick
()
Ответ на: комментарий от ihanick

но как только периферия нужна то всё равно приходится библиотеки использовать

Увы, да: настройка периферии у армов — тот еще геморрой. Это тебе не 2-3 регистра установить, как у восьмибитников!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну киньте ссылку, а я скажу что конкретно не работает.

promistrio
() автор топика
Ответ на: комментарий от Eddy_Em

Там везде нужно установить eclipse, дофигища плагинов и другой петрушки. Даже если эта вещь взлетит, то она закроет от меня все, что я хочу знать.
Буду кидать примеры ссылок http://aaron-brown.net/blog/?p=67 - 15 пунктов, звиздец. http://engineering-diy.blogspot.ru/2012/11/stm32f3-discovery-eclipse-openocd.... - меньше, но вы же сами не советуете так делать.

Я поставил arm-none-eabi-gcc. Вопрос, почему я не могу сделать «arm-none-eabi-gcc main.cpp», получить hex файл, взять какую-нибудь утилиту и скормить контроллеру?
Я ловлю вот что

/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/bin/ld: cannot find -lstdc++

ihanick, спасибо. Если ничего не придумаю, то сразу воспользуюсь этим способом.

promistrio
() автор топика
Ответ на: комментарий от promistrio

Там везде нужно установить eclipse, дофигища плагинов и другой петрушки

ты совершенно не умеешь пользоваться гуголом!

Можешь в моей ЖЖшке попастись. И на моих репах в сосфорже/гитхабе

Вопрос, почему я не могу сделать «arm-none-eabi-gcc main.cpp», получить hex файл, взять какую-нибудь утилиту и скормить контроллеру?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

продолжаю.

Не знаю, почему ты не можешь это сделать. Похоже, ключи нужные не дописываешь. Makefile глянь для начала, что ли...

cannot find -lstdc++

Это жесть, я считаю.

А, я вижу:

main.cpp
cpp

ты бы еще пхытон туда запихнуть решил!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ой компилятор ведь g++. Блин, я окончательно запутался. Слишком много информации узнал за сегодня.

arm-none-eabi-g++ test.cpp 
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
Ясно, что что-то не так с либами. arm-none-eabi-g++ - это ведь полноценный компилятор? В чем проблема? Почему нельзя, как с g++?

promistrio
() автор топика
Ответ на: комментарий от promistrio

Естественно.

Только не нужно туда C++ пихать. Это совсем извращение!

Eddy_Em ☆☆☆☆☆
()

А еще вот так можно вывернуться, хотя opencm3 не пробовал, хотелось побыстрее из говна и палок просто поднять периферию. http://habrahabr.ru/post/222877/ Зато никакого тормозного эклипса: программируй хоть из вима.

Gorthauer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.