LINUX.ORG.RU

Железячники, подскажите литературу по STM32

 ,


0

1

Оказалось, что программировать STM32 — это вам не PIC'и прошивать!

Свои страдания я излил в уютной ЖЖшечке. Здесь же хочу лишь попросить совета: литературы и дельных ссылок (а то их в интернете 100500, но толковых почти 0).

P.S. Для Ъ: у меня для тренировки макетка STM32-P103, программатор ST-LINK/V2. Компилирование при помощи arm-none-eabi-XXX, заливка при помощи st-flash. Я уже второй день ковыряюсь, но пока получилось запустить лишь один кастрированный примерчик, моргающий диодом. А прикрутить к нему хотя бы таймер не получилось.

P.P.S. Необходимый минимум, который мне нужен в ближайшее время от контроллера: все 4 таймера (часть — для работы на прерывания, часть — для работы в качестве счетчика); управление цифровыми портами (I/O, но это самое простое); USB (работа с железкой через libusb); АЦП. На будущее: ШИМ, CAN, SPI (в т.ч. работа с SD), работа с ЖК-мониторчиком, возможно — ethernet.

☆☆☆☆☆

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

Пример.
Вот примерчик мигающего светодиода с Makefile'ом (который я у кого-то подсмотрел). Тут еще есть ньюанс с тулчайном, если использовать «обычный» gcc, то все его библиотеки будут скомпелированы в ARM-код, а STM32 его не переваривает и падает в исключение. Это происходит, например, при использовании плавающей арифметики.

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

Спасибо, поковыряюсь.

А вообще, что-то разочаровался я в ARM'ах. С PIC'ами все было просто: пишем код на сях, компилируем, прошиваем. А здесь — костыли на ассемблере + костыли в виде objcopy (хотя, по логике вещей, arm-gcc должен был сделать уже готовый бинарник). А я-то думал, что ARM — вполне себе открытая архитектура…

Eddy_Em ☆☆☆☆☆
() автор топика

Еще вопросик:

есть ли возможность включить оптимизацию компиляции. Хочу -O3, но gcc ругается:

/tmp/ccVhvjrC.s: Assembler messages:
/tmp/ccVhvjrC.s:520: Error: registers may not be the same -- `strexb r0,r0,[r1]'
/tmp/ccVhvjrC.s:546: Error: registers may not be the same -- `strexh r0,r0,[r1]'

Поясню, зачем это мне: если не оптимизировать компиляцию, результирующий файл получается очень «тяжелым» (т.к. в него напихана уйма ненужных функций из библиотеки). А писать все без библиотеки для меня — чересчур.

Вот если бы можно было выдирать из библиотечки лишь те функции, что тебе нужны, а остальное не включать в код…

Eddy_Em ☆☆☆☆☆
() автор топика

Еще вопросик: по USB

Может, кто-то работал с USB на этих МК? А то что-то не нравится мне ST'шная USB-библиотека: уж больно толстая, боюсь, что для основного кода и места-то не хватит.

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

Костыль на костыле и костылем погоняет.

Хотя, чем черт ни шутит: может и получится у меня все.

// вот, пока что хочу для начала запилить поддержку USB, чтобы можно было хотя бы понять, работает код как надо, или нет. Следующим шагом подключу 1-wire термодатчики. А потом уже напаяю железа на макетку и буду тренироваться в управлении шаговиками и получении температуры с платиновых термопар. Опционально (на будущее) еще надо будет подключить простенький LCD (надо для обсерватории пионерлагеря «Орленок» сделать систему управления телескопом, который у них там уже лет 8 пылится).

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

конечно, получится!

а для шаговиков посмотри в сторону драйверов, типа pololu 4988
с ними тебе от микроконтроллера надо будет только меандр гнать на ногу «step» и уровень подавать на ногу «direction»

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

С шаговиками все ОК: я уже купил драйверы L6208N, сейчас подбираю оптопары (хочу сделать развязку по логике между МК и драйверами шаговиков)

// pololu 4988 не годится: во-первых, у меня напряжение питания 42В, во-вторых, пиковый ток до трех ампер.

Eddy_Em ☆☆☆☆☆
() автор топика
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

4988 не годится

ну, я для примера сказал )

я-то всё планирую принтер делать трехмерный. вот, для него комплектуху и подбираю. оттуда тебе и посоветовал ;)

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

А я для управления спектрографом железяки подбираю. Нужно будет рулить пятью шаговиками (7 цифровых портов) + ~16 термопарами (5 цифровых + 1 аналоговый порт) + ~5 1-wire термодатчиками (1 цифровой порт). А рулить этим всем в тестовом режиме по USB, в рабочем — по RS-232.

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

А все-таки, хочу тебя спросить насчет USB: я уже второй день ковыряюсь в безднах Keil'овского кода, но уж очень там много лишнего.

Нет ли нормальной USB'шной библиотечки для gcc? (ST-шную я скачал, но как ее прикрутить — в смысле, какие файлы подключать для какого случая, не понимаю; продолжаю читать документацию)

Да и вообще, все эти примеры из интернета рассчитаны на всякие гуевины, ни в одном нет нормального Makefile'а!

Eddy_Em ☆☆☆☆☆
() автор топика
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

к сожалению, usb еще не разбирался.. вот, что нашел при беглом гуглении: http://we.easyelectronics.ru/STM32/primery-raboty-s-usb-device-dlya-stm32f4-d... (там примеры в конце приделаны к статье)

и да, огорчает отсутствие Makefiles, согласен..

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

Я их уже скачал: толку 0 (они завязаны на конкретную макетку). В общем, читаю документацию по USB-библиотечке. Нашел там файлик usb_cdc_core.c, попытаюсь самостоятельно все в кучу собрать, без этих бешеных нагромождений из примеров.

Я, кстати, поковырявшись еще немного в примерах с blink, обнаружил, что если все ненужное повыкидывать, то и оптимизация работает, и файл после -Os весит всего 2кБ, а не 20 (но все равно это слишком много для такого простого примера — он от силы-то должен байт 200 занимать)!

Eddy_Em ☆☆☆☆☆
() автор топика
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от aol

Мучил-мучил весь день пример с virtualCOM (как раз мне эта штука понадобится), скачал модифицированную версию отсюда. Ковырялся в коде. Кое-как добился-таки безошибочной компиляции. Прошиваю — и тишина.

Вот не пойму, ЧЯДНТ? Вот код.

По мере появления историй успеха буду подробненько все описывать в своей ЖЖшке.

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

Нашел одну ошибку: я инициализировал выход «enable USB» как PP, а не OD. Исправил. В итоге появляется:

[28718.201006] usb 1-1: new full-speed USB device number 30 using xhci_hcd
[28718.201362] usb 1-1: Device not responding to set address.
[28718.402368] usb 1-1: Device not responding to set address.
[28718.603036] usb 1-1: device not accepting address 30, error -71
и никакого /dev/ttyUSB0 нет ☹

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

Нашел одну ошибку: я инициализировал выход...
и никакого /dev/ttyUSB0...

Шли годы, а он все енаблил USB.

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

Умник, а по делу сказать нечего?

У меня проблема в том, что лень читать документацию, а готовых решений нет.

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

У Олимехов все примеры на эклипсе, его и надо пользовать, а не писать свой мейкфайл не зная броду. Ежели хочется по-своему, то таки да, придется прочесть документацию и городить велосипед.

По-поводу твоего разочарования в АРМах супротив ПИКов могу сказать что армовых процессоров хренова прорва. ГЦЦ вовсе не обязан знать об ихнем железе что-либо кроме набора инструкций.

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

его и надо пользовать

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

ГЦЦ вовсе не обязан знать об ихнем железе что-либо кроме набора инструкций.

PIC'ов тоже до хрена. Просто не успели еще написать обертки.

Eddy_Em ☆☆☆☆☆
() автор топика
8 января 2013 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.