Что нужно для разработки на основе микроконтроллера?
Как минимум сам микроконтроллер. А лучше какую-нибудь плату с минимальной обвязкой к этому микроконтроллеру.
Но МК без программы — это просто кусочек кремния с вкраплениями металла. А для программирования микроконтроллера нужна среда разработки. Можно, конечно, обойтись набором утилит в стиле Unix-way, когда в командной строке запускаются компилятор, линковщик, вручную пишется скрипт make, а редактирование исходных текстов выполняется в каком-нибудь текстовом редакторе. Но лично я предпочитаю работать с комфортом. Поэтому я стал искать интегрированную среду разработки. Она должна:
- Иметь удобный редактор с подсветкой синтаксиса С/С++
- Уметь находить объявления функций, переменных и констант в других файлах.
- Автоматически генерировать шаблон проекта.
- Иметь возможность настраивать горячие клавиши для различных действий.
- Иметь интерфейс к отладчику.
- Быть быстрой, чтобы комфортно работать на ноутбуке.
- Очень желательно быть бесплатной или недорогой.
Я выбрал Em::Blocks — это IDE, построенная на основе Code::Blocks, но адаптированная для embedded разработки. То есть изначально предназначенная для разработки встраиваемых систем.
Она бесплатная, удовлетворяет всем перечисленным требованиям и очень гибко настраивается.
Ко всему прочему она:
- расширяемая и хорошо автоматизируется с помощью скриптов
- шаблоны проектов можно настроить на свой вкус
- можно самому изменить диалог мастера создания проекта
- не требует установки — можно носить с собой на флешке и легко перенести с настройками на другой комп
Я настроил ее под себя:
- Отредактировал шаблоны проектов под STM32F10x medium density, high density, medium density value line
- В шаблонах заменил структуру проекта разложив по папкам stm_lib, cmsis, cmsis_boot и Src.
- Обновил версию cmsis в шаблоне проекта до версии 3.0
- Добавил поддержку ColinkEx debugger (она не очень гибкая, но работает)
- Добавил выбор процессора в мастере создания проекта для прошивки с помощью ColinkEx
- Добавил в меню Tools пункты «Flash w ColinkEx», «Flash w ST-Link/V2»
- Изменил настройку по-умолчанию для ST-Link отладчика с JTAG на SWD
- Добавил создание HEX файла для Debug target (стандартно только для Release)
- Добавил в build options USE_STDPERIPH_DRIVER
- Добавил в search directories stm_lib\src, stm_lib\inc, .\STM32_USB-FS-Device_Driver\src, .\STM32_USB-FS-Device_Driver\inc, cmsis, cmsis\boot
- Исправил в gcc_arm.ld размер флеша и памяти для STM32F10x_MD серии на значения для STM32F103C8
Я работаю чаще всего с STM32F103C8, STM32F103VE, STM32F100RB, поэтому и шаблоны проектом модифицировал под них. Но адаптировать под другие процессоры никакой сложности не составляет.
Для того, чтобы начать работать с EmBlocks достаточно распаковать архив и запустить emblocks.exe.
Если кому не нравятся внесенные мной изменения — оригинал лежит на сайте разработчиков.
Что дают изменения:
- Проект готов к прошивке сразу после создания визардом
- Есть все, что нужно, для того, чтобы поморгать светодиодом
- Проект рассчитан на использование STM32 StdPeriph Library (по мере необходимости добавляем модули к проекту в папку stm_lib, архив в конце статьи)
- Для работы с USB-FS библиотекой нужно всего лишь кинуть ее в каталог проекта и добавить в проект. (архив с библиотекой в конце статьи)
- Свежий компилер не ругается на оптимизацию благодаря новой версии CMSIS
- Легко перенести проект из CooCox IDE
- Можно использовать CoolinkEx, который довольно популярен у нас и можно купить в России
Наверняка у каждого из нас есть свои тонкости в разработке, поэтому охватить все их я не смогу. Я собираюсь рассказать как пользоваться всем этим в следующих записях. Задавайте вопросы, я постараюсь их учесть при описании.
Внимение! На данный момент версия 1.x уже неактуальна, предлагаю ставить версию EmBlocks не старее 2.00 скачав с офсайта и применять мой tweaker
Описанное в статье:
- EmBlocks v1.1 (53.9MB) с моими дополнениями и изменениями.
- STM32F10x StdPeriph Library v3.5.0 — только папки inc и src, которые нужны в проекте
- STM32 USB-FS-Device Driver v4.0.0 — библиотека для работы с USB-FullSpeed.
UPD: К сожалению, EmBlocks хранит настройки меню Tools в профиле пользователя, поэтому вместе с архивом они не переносятся.
Откройте файл в своем профиле по адресу %userprofile%\AppData\Roaming\EmBlocks\1.1\default.conf
Строку <tools /> замените на содержимое файла.
После этого появятся пункты меню в Tools. Я чуть позже напишу подробнее о том, как настроить горячие клавиши или самому создать пункты меню.
Первая ссыль на закачку ведет не туда
Исправил
Спасибо
Добрый день, я начинающий разработчик под STM32. Подойдет ли ваш шаблон для F100RB если у меня МК F100C4?
Попробуйте, если они одной серии, то подойдет, но если у вас low density, то скорее всего нет. т.к. Файл инициализации отличается.
да, действительно low density. Жаль, структура проекта понравилась. По сравнению с тем что выдает Atollic. Значит придется самому подсовывать нужные файлы инициализации.
И еще можно вопрос: Как вы реализуете в МК функцию задержки? Видел реализацию через считывание частоты МК и последующем пустом цикле, но судя по логическому анализатору ничего общего с заданным временем не получается. Вот код:
void Delay_us(uint32_t us)
{
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq (&RCC_Clocks);
nCount=(RCC_Clocks.HCLK_Frequency/1000000)*us;
for (; nCount!=0; nCount—);
}
Но я так понимаю, что количество nCount в цикле так же зависит и от реализации цикла в компиляторе?
сделать шаблон проекта с такой структурой совсем несложно, я покажу попозже, пока времени нет.
Цикл чисто для демонстрации, так делать не надо. Правильно делать задержки на таймере, если нужна точность, а заодно и не стоит нагружать проц пустыми циклами.
Расскажите пожалуйста подробнее как сделать такие шаблоны проектов по умолчанию, если я хочу использовать stm32l-discovery, там stm32l152rbt6
Расскажу, чуть попозже, пока со временем не очень. Подпишитесь на RSS как вариант.
Тут проблема, попробовал прошить на stm32vldiscovery, а в tools пусто, и F6 не дает эффекта. Дистрибутив с этого сайта.
Да, к сожалению настройки меню Tools хранятся в профиле пользователя, а не в папке программы.
Откройте файл в своем профиле по адресу %userprofile%\AppData\Roaming\EmBlocks\1.1\default.conf
Строку <tools /> замените на содержимое файла.
После этого появятся пункты меню в Tools. Я чуть позже напишу подробнее о том, как настроить.
заменил файл, вообще перестал запускаться…
ааа не заработал…
Так файл не заменить нужно было, а отредактировать, заменив строку. Читать надо внимательнее
Написал прогу, которая сама находит файл default.conf и модифицирует раздел tools содержимым файла default.conf находящегося рядом с запускаемой утилиткой. http://zalil.ru/34709923
У меня некорректно работает — файл увеличивается аж в 2 раза. Она вставляет почти весь файл на место этого тега.
Надо утилитку запускать не с папки, что в userprofil, а в любой другой, например с папки EmBlocks, и рядом с утилиткой должен быть файлик который вы тут выложили. То есть можно добавить в корень папки Вашего дистрибутива эту утилитку и ваш файл, после распаковки 1 запуска codeblocks запустить ее и она модифицирует конфигуратор который создался и находится в userprofil
Ясно 🙂 Надо короче сделать нормальный конфигуратор.
Строку tools /> замените на содержимое файла.
Там еще желательно правильный путь указать к файлу ST-LINK_CLI.exe
Да, конечно
В визарде создаю проект:
Вижу такое окно: https://dl.dropboxusercontent.com/u/6439155/emblock-shit.png
Не очень понятно зачем тут выбор типа процессора, если параметры Flash, Ram итп всё равно приходится писать ручками. (предварительно загуглив)
Какой-то убогий визард. Реально прикрутить свой?
p.s. Jlink никак не получается заюзать для прошивки. 🙁
В CooCox всё работало отлично.
Затем, что это значение пойдет в define проекта. Кстати, значения памяти и флеша можно и не менять, если проект мелкий.
Визард разумеется реально прикрутить свой. Я же в патче прилагаю отредактированный вариант. Там ничего особо сложного нет, просто новичкам будет проще.
Jlink — говно. Медленное, глючное, требует свой сервер ставить, денег хочет за свой софт, лицензии на каждый чих, клоны обновлять нельзя — иначе забанят по серийнику. Я же говорю — ST-Link оптимален. У меня есть и тот и другой и CoLinkEx. Пользуюсь в основном ST-Link. Существенно удобнее.
Я верю что ST-Link оптимален. Но как насчет тысяч людей которые уже используют клон Jlink?
Вы ведь тут популяризируете EMBlock. Но получается что глючный Jlink нормально работает в Keil, CooCox и глючит только в EM. 🙂
Получается доверие к EM подрывается с первого запуска…
Кстати, почему у вас когда я переключаю фокус с капчи на текст, число в капче становится не видимым?
Я не популяризую EmBlocks. Я нашел для себя IDE, на основе которой удалось собрать более-менее удобоваримую среду разработки. У нее полно недостатков, но она — лучшее, что я смог найти. Я потратил на поиски немало времени. Найденным я делюсь со всеми, кому это интересно. Разбираться с глюками JLink у меня желания нет. Я повозился с ним пару дней, мне не понравилось — даже с CooCox он работал криво и прошивать приходилось из его софтины, а не из CooCox. Поэтому я бросил его на полку и купил ST-Link v2. Jlink остался на всякий случай.
Насчет капчи — не знаю, скорее всего глюк плагина. Я логинюсь на форме https://ravenium.ru/login, поэтому не видел глюка после обновления.
что у тебя возвращает такая функция:
char* get_battery_message(void){
char s[200];
sprintf(s, «=%g=», (double) 1.5);
return s;
}
у меня возвращает «==» — подсказывают, что версия си-библиотеки может быть урезана…
Тогда вопрос, как ты преобразуешь дробные числа в строку?
Понятия не имею. Я стараюсь не использовать текст в МК. Текст — неестественная форма данных для машин, как и консоль для человека.
Если по существу — в комплекте с компилером есть несколько версий библиотек, по умолчанию подключается Newlib nano-branch. Она оптимизирована по размеру. Т.к. все строковые функции жрут много оперативной памяти и имеют большой размер кода, то они вполне могут быть урезаны.
Вопрос — зачем заниматься преобразованием данных в МК? Если ты выводишь данные на ПК, то лучше гнать их в бинарнике и там преобразовывать — это экономнее и быстрее.
думал это только библиотеки с емблоксом такие, но видимо во всех средах урезаны.
для чего — чтобы показать напряжение батареи на экране, например.
EmBlocks — это всего лишь IDE. А стандартные библиотеки поставляются с компилером.
Добрый день. А не могли бы вы подсказать как настроить emblocks для работы с stm32 на с++
До безбразия просто — создаете проект мастером как обычно, а затем переименовыете main.c в main.cpp.
Если не делали настроек компилера, то идем в Settings->Tools и на вкладке Toolchain Executables проверяете:
CPP compiler: arm-none-eabi-g++.exe
Все.
RaJa,
Ты не пробовал объединить файлы инициализации, создаваемые STM32CubeMX с EmBlocks? Дело в том, что в принципе Cube создаёт начальный проект и включает для него соответствующие файлы и библиотеки для трёх разных систем: IAR, Keil и что-то ещё. EmBlocks вроде как должен уметь импортировать проекты от Keil. Но… не импортирует. Вроде как они изменили структуру проекта в новых версиях, которую Emblocks не понимает.
Вообще говоря, один из участников обсуждения в http://forum.ixbt.com/topic.cgi?id=48:11266 писал, что он он просто тупо переносит файлы из созданой Cube директории в свой проект. А хотелось бы это делать более элегантно. Тем более, что в процессе работы конфигурация чипа может меняться.
Не пробовал. Мне как то не очень нужен Cubemx. К тому же я предпочитаю другую структуру проекта. инициализация не вся в одном файле, а в модулях. Не люблю лапшу в проектах
Здравствуйте! Вы написали: «Добавил в меню Tools пункты «Flash w ColinkEx», «Flash w ST-Link/V2″. Подскажите как это можно сделать?
Такая проблема — есть отладочная плата на базе stm32f103rbt6 и плата с контроллером stm32f103c8t6. Создаю проект через мастер проектов для stm32f103c8t6, пишу код — не работает(в дебагере даже в мэйн не попадает), но если эту же прошивку залить в stm32f103rbt6(одно семейство же) — то все ОК.
Проверяйте startup код — скорее всего инициализация неверно выполняется. Возможно, что не тот startup файл, хотя и должен подходить. Возможно размер флеша в проекте или оперативки указан неверно.
Вы же кажется все свои проекты под STM32F103C8 делали, может скините ваш стартап или проект простенький (светодиод и т.п.) сравнить содержимое.
Треть сутки — а результат =0. Просто весь проект отлаживал на плате с STm32f103RBt, теперь необходимо перенести его на STM32F103c8t6 — а тут такое)).
Кстати пробовал запустить ваш проект
https://ravenium.ru/stm32-emblocks-%D0%BC%D0%B8%D0%B3%D0%B0%D0%B5%D0%BC-%D1%81%D0%B2%D0%B5%D1%82%D0%BE%D0%B4%D0%B8%D0%BE%D0%B4%D0%BE%D0%BC/
тоже не заработало.
А плата вообще рабочая?
Я делал под разные процы. Не всегда с ходу заводится на меньшем проце. Но чаще всего ошибки довольно простые — размер флеша, памяти, стека.
Еще обнаружил: STM32F103C8T6 — по даташиту 64Kb Flash Memory, 20kb — SRAM, Medium-Density Line
При подключении STLink — пишет Device ID:0x412 Device flash Size : 32KByte Device family :STM32F10xx Low-density????
Вот вам и ответ — это не STM32F103C8, а скорее всего F103C4. Поэтому и startup file не подходит
Китайцы)) . Вот фото: https://cloud.mail.ru/public/c5b87224b41f/100_1803.JPG
А подскажите пожалуйста как настроить EmBlocks на Nucleo STM32 L152RE???
Nucleo — Это просто плата с процом. Соответственно, просто выбрать нужный проц и все.
У меня 2 версии EmBlocks 2.20 и 2.30 и не в одной нет STM32 L152RE
И вообще большинство производителей софта пригодного для программирования микроконтролиров почемуто избегают всю ветку RE плат.
Там разница только в количестве флеша, вполне можно выбрать STM32L152RD и отредактировать в stm32l152rd_flash.ld
MEMORY
{
ROM (rx) : ORIGIN = 0x08000000, LENGTH = 384K
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 48K
}
поставьте значение LENGTH = 512K и всего делов то. В остальном они идентичны
Чет я наийти такого файла не могу
Или это не про EmBlocks.
Не подскажете: Что меняется в Release версии (кроме удаления Debug информации)? При выборе Release — программа не совсем корректно работает (перестает работать один софтварный таймер:) ).
Я тоже упарился с Release. Выключил оптимизацию, но толку нет. В debug всё ОК. Пытался найти где затык в моём коде в Release, но похоже не судьба. Силы заканчиваются.
Уточню. У меня тоже используются в проблемном куске кода простые циклические задержки.
Циклические задержки — это зло, они плавают, в зависимости от загрузки проца. Естественно, они могут поплыть при любых изменениях кода. Используйте хотя бы Systick таймер для отсчета временных интервалов — это просто и не будет зависеть даже от частоты проца.
Значит что-то вы делаете так, что отключение дебага меняет дело
Сам не знаю, что сделал, но получил рабочий релиз. Размер дебага всегда был 84кБ, а рабочий релиз без оптимизации 64кБ. А раньше релиз без оптимизации получался в разных вариантах 34, 40, 49кБ (в зависимости от разных галочек).
Уже легче.
RaJa.
Да, возможно существенный момент.
Взял сегодня ноутбук на работу и установил (скачав) последнюю версию EmBlocks 2.30. Насколько я в курсе, все ваши усовершенствования описанные здесь в статье, там уже учтены (ну кроме патча для tools, который мне пока не нужен). Сходу получил в нём рабочий релиз. Воодушевлённый этим фактом, примчался после работы домой и установил на рабочий комп новую версию EmBlocks 2.30. Но даже не запустив её, решил напоследок сбегать в старую переносимую вашу версию из этой статьи. Проверив на всякий случай галочки, сходу получил рабочий релиз.
В общем я заподозрил, что старая переносимая ваша версия заработала как надо вследствие инсталляции новой версии.
Прав я или не прав — мне уже кажется не важно, т.к. я рекомендую теперь всем установить новую версию. Желающие могут установить патч для менюшки tools, если конечно он сделан вами (или работоспособен старый) для новой версии.
Решил этот вопрос по другому — в коде не хватало __IO перед некоторыми переменными.
Cсылка на офсайт приводит на другой ресурс (https://www.politie.nl).
печально все это хотел скачать чистый EmBlocks.
EM::Blocks пока ещё можно скачать тут: http://www.emblocks.org/web/downloads-main/file/2-emblocks-ide
но думаю и это временно, надо куда-нибудь его переложить.
Пусть тут пока полежит:
https://drive.google.com/file/d/0Bz7H7zPtizn1X1cxTFg5UUE5REE/view?usp=sharing
Нельзя скачать. и давно. Но его можно скачать здесь, на этом сайте.
Скажите пожалуйста, а проекты из keil в CodeBlock можно открывать?
Вернее открывать то открываются но не компилируются 🙁
Не компилируются 🙂 Чтобы компилировались, нужно подключить компилер от KEIL — они отличаются
а как его подключить?
заранее спасибо!
Меню Settings-Tools
Выбираем ARM RlView Compiler
Вкладка Toolchain Executables — указываем где лежит компилер
Дальше — как повезет. Сложные проекты все равно потребуют ручной настройки, компилер будет ругаться.
Подскажите пожалуйста, как в EmBitz подключить мат.библ.( #include не помогает).
В Кокосе добавлял ‘m’ к линкеру, здесь не работает или я неправильно добавляю?
Вообще то тоже работает m в настройках линкера. А что пытаетесь сделать и какую функцию не находит? Пример кода есть?
http://www.emblocks.org/forum/viewtopic.php?f=1&t=336
Я хочу слегка освоить EmBitz и для примера попробовал синус, а вообще все началось с вашего примера USB HID. Несколько лет назад я сделал аналогичное устройство на AVR для записи сигналов с термопары в графическом виде. Оказалось очень компактное и удобное устройство особенно при работе на чужом компьютере. Попробовал переделать ваш пример для L152, но сходу не получилось. Вчера сбегал в ЧипДип и купил F103C8. Плату практически спаял. В ближайшее время буду запускать. Заранее спасибо. Затронули за живое.
Добрый вечер! Собрал две одинаковых схемки USB HID. Компьютер рисует график с четырех аналоговых входов. Все хорошо на старых компьютерах с ХР. На компьютерах с 8.1 или тишина или устройство распознается неправильно, правда на одном ноутбуке на одном из трех разъемов запускаеся через раз. Пробовал безрезультатно подтягивающий резистор 1,5к подключать к 5V, а также к другому выводу D- (как в схеме с AVR). Аналогичная схема на AVR работает везде. Может надо управлять подтяжкой через один из выводов МК ?
Привет! По вашим ссылкам качаю компилятор. В папке пользователя подменяю приложенный файлик. После этого компилятор больше не запускается. Win10x64. Что предпринять, не подскажете?
Решили проблему?
Вообще на сегодня я рекомендую STM32CubeIDE и HAL вместо EmBlocks и SPL. Да, они более тормозные, редактор более глючный, но возможностей намного больше, разработка все равно идет быстрее и комфортнее. А также постоянно развивается в отличие от SPL и EmBitz