Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

АЦП преобразования в указанные моменты времени на STM32

CПрограммирование микроконтроллеров
Tutorial

В этом посте я расскажу, как мне удалось заставить STM32F4 измерять аналоговые сигналы в указанные моменты времени с помощью DMA не расходуя вычислительных ресурсов микроконтроллера.

Читать далее
Всего голосов 28: ↑27 и ↓1 +26
Просмотры6.7K
Комментарии 14

Как подключить содержимое любых файлов для использования в коде C / C++

ПрограммированиеСовершенный кодC++ОтладкаC
Из песочницы

Задача состояла в подключении файлов: HTML, JS, CSS; без специальной подготовки. Так же неудобно подключать бинарные файлы (например картинки) конвертируя их в HEX. Так как не хотелось конвертировать в HEX или разделять на строки, искал способ подключения файла в адресное пространство программы.

Читать дальше →
Всего голосов 84: ↑83 и ↓1 +82
Просмотры15.1K
Комментарии 33

Как я делаю цифровую минигитару. Часть 2

ПрограммированиеРазвитие стартапаПроизводство и разработка электроникиГаджетыDIY или Сделай сам

Прошло 4 месяца с написания предыдущей статьи, за это время произошло довольно много нового как по технической части, так и по позиционированию девайса. В статье я расскажу, чем же мы занимались.

Поехали!
Всего голосов 93: ↑93 и ↓0 +93
Просмотры12.1K
Комментарии 53

Полноценная GDB отладка через USB на плате BluePill (STM32F103С8T)

ОтладкаПрограммирование микроконтроллеров
Из песочницы

В данной статье речь пойдет о программировании и полноценной отладке микроконтроллера STM32F103C8T6 через USB.

Однажды, от коллег поступило предложение о участии в IoT проекте. Система предусматривала однопоточный запуск скриптов. Отладка производилась с помощью логов. И тут мне в голову пришла мысль о полноценной удаленной отладке проектов под микроконтроллеры.

Продолжение следует ...
Всего голосов 32: ↑31 и ↓1 +30
Просмотры6K
Комментарии 21

Размещение кучи FreeRTOS в разделе CCMRAM для STM32

TimewebC++CПрограммирование микроконтроллеровКомпьютерное железо
Tutorial
При разработке одного девайса на базе STM32F407 столкнулся с проблемой нехватки оперативной памяти. Назначение самого девайса не принципиально, но важно, что изначальный код писался для десктопной системы и его нужно было просто портировать на микроконтроллер под управлением FreeRTOS. А так как исходный код был написан на С++ и вопрос об экономии ОЗУ даже не стоял, то и вылезла соответствующая проблема.

Заниматься оптимизацией кода, одновременно добавляя себе проблем с поиском новых ошибок, очень не хотелось. Поэтому своевременно вспомнилось, что данная версия микроконтроллера имеет на борту дополнительный сегмент ОЗУ размером 64К (CCM SRAM), который сейчас никак не был задействован. Эврика — вот оно, решение!

Но к сожалению, все оказалось не так просто.

Читать дальше →
Всего голосов 16: ↑14 и ↓2 +12
Просмотры3.6K
Комментарии 9

Создание аналога посмертного сore dump для микроконтроллера

TimewebПрограммированиеC++Программирование микроконтроллеровПроизводство и разработка электроники
Tutorial


При разработке программного обеспечения любого класса и назначения, зачастую приходится заниматься поиском ошибок, которые привели к краху всего приложения. И если в случае обычного компьютера, анализ логов и core dump`ов как правило не вызывает сложностей, то для устройств на основе микроконтроллеров бывает сложно получить «посмертную» информацию, необходимую для изучения проблемы.

Конечно, при подключенном программаторе и при постоянном выводе логов в какой нибудь отладочный порт можно достаточно комфортно вести отладку, но что делать, когда требуется искать причину сбоев устройства во время штатной эксплуатации устройства, когда инструментальные средства для отладки не подключены и нет внешней памяти для хранения логов?

В продолжение серии статей про различные полезности для STM32 (1 и 2), предлагаю вашему вниманию решение для сохранения посмертной информации микроконтроллера при возникновении различных критических ситуаций с целью последующего анализа ошибки.

Ну и в соответствии с собственным наблюдением Хабр — ума палата, буду рад любым комментариям и предложениям, которые помогут протестировать или улучшить предлагаемое решение.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры2.8K
Комментарии 11

Маленькие хитрости для STM32

TimewebПрограммированиеC++Промышленное программированиеПрограммирование микроконтроллеров
Tutorial

В процессе работы у каждого программиста иногда встречаются неожиданные проблемы, которые возникли как будто на ровном месте. Практически по Черномырдину «никогда такого не было, и вот опять!». После этого начинаешь искать решение в интернете или закапываешься в чтение мануалов и документации, чтобы разобраться в пустячном, на первый взгляд вопросе.

Через какое-то время решение находится (или ошибка исправляется), и ты даешь себе зарок запомнить этот случай, а еще лучше записать, чтобы не забыть выясненный нюанс в будущем. Но проходит время и свое обещание счастливо забывается. И в этом нет ничего удивительного, если трудоемкость решения оказалась очень низкой, такой, что при желании его может повторить практически любой желающий буквально за несколько часов, правда если он будет знать, в какую строну следует копать.

Продолжая серию статей про маленькие хитрости разработки под STM32, хочу поделиться двумя очень простыми, но полезными функциями. Они никак не тянут на полноценный проект на github.com, но способны облегчить жизнь (или наоборот, выпить немало крови), при определенном стечении обстоятельств.

  1. Буферизированный вывод отладочной информации в последовательный порт
  2. Автоматическое включение защиты от чтения и модификации прошивки
Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Просмотры6.8K
Комментарии 49

Добавляем modbus в Embox RTOS и используем на STM32 и не только

EmboxПрограммированиеСистемное программированиеПромышленное программированиеПрограммирование микроконтроллеров
image
Нас часто спрашивают, чем Embox отличается от других ОС для микроконтроллеров, например, FreeRTOS? Сравнивать проекты между собой, конечно, правильно. Но параметры, по которым порой предлагают сравнение, лично меня повергают в легкое недоумение. Например, сколько нужно памяти для работы Embox? А какое время переключения между задачами? А в Embox поддерживается modbus? В данной статье на примере вопроса про modbus мы хотим показать, что отличием Embox является другой подход к процессу разработки.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры2.2K
Комментарии 26

Stm32 + USB на шаблонах C++

C++Программирование микроконтроллеров

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

Попробуем
Всего голосов 22: ↑20 и ↓2 +18
Просмотры6.6K
Комментарии 23

USB Host, «Blue Pill», метод деления отрезка пополам и цена на водку в СССР

Open sourceПрограммирование микроконтроллеровDIY или Сделай сам
Tutorial

Написал недавно программный USB-HOST на esp32 для работы с клавиатурой/мышкой/джойстиком. Процессор быстрый, но нежный, 5 вольт на ножках не выдерживает. Поэтому решил переписать на stm32f103c8t6, широко известную в варианте отладочной платы "Blue Pill".

К сожалению , это весьма неторопливый по сегодняшним меркам процессор(72 MHz vs 240 у esp32 ), поэтому были сомнения , смогу ли я обеспечить необходимую точность временного интервала между битами при передаче (1.5 Mbps +/- 1.5%),что соответствует +/- 0.01uS то есть примерно один такт работы процессора. То есть процедура задержки типа:

К сожалению
Всего голосов 23: ↑23 и ↓0 +23
Просмотры7.3K
Комментарии 32

USB на регистрах: STM32L1 / STM32F1

Программирование микроконтроллеровСхемотехника


Еще более низкий уровень (avr-vusb)
USB на регистрах: bulk endpoint на примере Mass Storage
USB на регистрах: interrupt endpoint на примере HID
USB на регистрах: isochronous endpoint на примере Audio device

С программным USB на примере AVR мы уже познакомились, пришла пора взяться за более тяжелые камни — STM32. Подопытными у нас будут классический STM32F103C8T6 а также представитель малопотребляющей серии STM32L151RCT6. Как и раньше, пользоваться покупными отладочными платами и HAL'ом не будем, отдав предпочтение велосипеду.
Читать дальше →
Всего голосов 35: ↑33 и ↓2 +31
Просмотры6.3K
Комментарии 10

.NET nanoFramework — платформа для разработки приложений на C# для микроконтроллеров

.NETC#Программирование микроконтроллеровИнтернет вещейDIY или Сделай сам
nanoframework

.NET nanoFramework — это бесплатная платформа с открытым исходным кодом, основанная на .NET и предназначена для малых встраиваемых устройств, микроконтроллеров. С ее помощью можно разрабатывать различные устройства для Интернета вещей, носимые устройства, научные приборы, робототехнические устройства, можно создавать прототипы и даже использовать на промышленном оборудование.

.NET nanoFramework является малой версией «большого» .NET Framework предназначенного для настольных систем. Разработка приложений ведется на языке C# в среде разработки Visual Studio. Сама платформа является исполнительной средой .NET кода, это позволяет абстрагироваться от аппаратного обеспечения и дает возможность переносить программный код с одного микроконтроллера на другой, который тоже поддерживает .NET nanoFramework. Программный код на C# для настольных систем, без изменений или с небольшой адаптацией (необходимо помнить про малый объем оперативной памяти) исполнится на микроконтроллере. Благодаря этому, разработчики на .NET с минимальными знаниями в области микроэлектроники смогут разрабатывать различные устройства на .NET nanoFramework.
Читать дальше →
Всего голосов 42: ↑41 и ↓1 +40
Просмотры8.1K
Комментарии 52

USB на регистрах: bulk endpoint на примере Mass Storage

Программирование микроконтроллеровСхемотехника


Еще более низкий уровень (avr-vusb)
USB на регистрах: STM32L1 / STM32F1
USB на регистрах: interrupt endpoint на примере HID
USB на регистрах: isochronous endpoint на примере Audio device

В прошлый раз мы познакомились с общими принципами организации USB и собрали простое устройство, иллюстрирующее работу конечной точки типа Control. Пришло время изучать следующий тип — Bulk. Конечные точки такого типа предназначены для обмена большими объемами информации, причем чувствительной к надежности, но не скорости обмена.

Классические примеры — запоминающие устройства и переходники вроде USB-COM. Но переходники требуют еще наличия конечной точки типа Interrupt, которую мы пока «не проходили», так что остановимся на эмуляции флешки. Точнее, двух флешек одновременно.
Читать дальше →
Всего голосов 19: ↑19 и ↓0 +19
Просмотры2.6K
Комментарии 37

Stm32 + USB на шаблонах C++. Продолжение. Делаем HID

C++Программирование микроконтроллеров

В прошлый раз показал один из способов распределение ресурсов между конечными точками, а именно регистров EPnR, памяти под дескрипторы буферов и под сами буферы. Предлагаю продолжить начатое и рассмотреть написанную библиотеку на примере создания простого HID-устройства, позволяющего управлять светодиодом.

Читать далее
Всего голосов 22: ↑21 и ↓1 +20
Просмотры4.6K
Комментарии 13

Как мы верифицированный полетный контроллер для квадрокоптера написали. На Ada

C++Системное программированиеCПрограммирование микроконтроллеровDIY или Сделай сам

Однажды на новогодних каникулах, лениво листая интернет, бракоделы в нашем* R&D офисе заметили видео с испытаний прототипа роботакси. Комментатор отзывался восторженным тоном – революция, как-никак. Но тренированное ухо расслышало в шуме с испытательной площадки еще кое-что. Контроллер скорости (штука для управления тягой винтов) сыграл мелодию при старте, как это любят делать пилоты дронов, которые часто используют полётный контроллер Betaflight. Неужели там бета-флайт? Ну, или какая-то из ее немногих разновидностей.

Перед глазами побежали флешбеки, где-то из глубин подсознания всплыла забытая уже информация о прошивках для Тойоты на миллионы тысяч строк Си и 2 тысячи глобальных переменных (Toyota: 81564 ошибки в коде).

После просмотра исходного кода Betaflight на гитхабе стало еще страшнее, и чем дальше, тем хуже. Это – управляющая программа для тяжелого устройства с острыми винтами, которое летает высоко, быстро. Становится страшно: игрушки это одно, но я бы не хотел летать, на таком такси. Но ведь можно иначе? Можно, решили мы! И решили это доказать. На Avito был куплен акробатический FPV-“квадрик” на базе STM32F405, для отладки – Discovery-платы для этого же контроллера, а дальше все как в тумане..

Читать далее
Всего голосов 92: ↑90 и ↓2 +88
Просмотры13K
Комментарии 57

История одной ошибки

TimewebПрограммированиеОтладкаПрограммирование микроконтроллеровПроизводство и разработка электроники


Практически все интегрированные среды разработки значительно упрощают жизнь программистам. А в случае разработки прошивки для микроконтроллеров, еще и освобождают его от нудной настройки параметров работы периферии, оставляя больше времени на разработки и отладку основной функциональности.

Например, при работе в STM32 CubeIDE, вся настройка параметров работы периферии сводится к вводу правильной частоты кварца и условного «кликанья мышкой», вместо того, чтобы программировать параметры работы железа вручную.

В продолжение серии статей про различные полезности для STM32 (1, 2 и 3), хочу рассказать, как в некоторых случаях, такое упрощение работы может стать источником совершенно не очевидных ошибок.
Читать дальше →
Всего голосов 17: ↑12 и ↓5 +7
Просмотры4K
Комментарии 23

Запуск Qt на STM32. Часть 2. Теперь с псевдо 3d и тачскрином

EmboxПрограммированиеСистемное программированиеQtПрограммирование микроконтроллеров
Мы в проекте Embox некоторое время назад запустили Qt на платформе STM32. Примером было приложение moveblocks — анимация с четырьмя синими квадратами, которые перемещаются по экрану. Нам захотелось большего, например, добавить интерактивность, ведь на плате доступен тачскрин. Мы выбрали приложение animatedtiles просто потому, что оно и на компьютере круто смотрится. По нажатию виртуальных кнопок множество иконок плавно перемещаются по экрану, собираясь в различные фигуры. Причем выглядит это вполне как 3d анимация и у нас даже были сомнения, справится ли микроконтроллер с подобной задачей.
Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры3.8K
Комментарии 10

100500-ая автоматика полива для растений. Часть 2: Сенсоры и электроника

Производство и разработка электроникиDIY или Сделай сам


В вводной части повествования речь вкратце пошла об общем развитии системы автоматизации полива растений. В этой части, более подробно рассказ об измерительной технике, с которой довелось познакомиться по ходу развития проекта, электронике и, конечно же, о падениях в грязь лицом.

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Просмотры7.2K
Комментарии 13