Структуры в Си и их передача

Структура — это удобное хранилище для разнородных данных, которые хочется объединить. К примеру, вы можете создать структуру, описывающую параметры вашего устройства — сетевые настройки, таймаут спящего режима, его идентификатор и прочее подобное, типа какой-нибудь строки приветствия и состояния светодиода. Раз все параметры будут храниться в одном месте — они всегда будут на виду, да и нормальные IDE будут вам подсказывать поля структуры при обращении к ним. Ещё мы рассмотрим хранение и восстановление структур из архива, а также их передачу по сети. Читать далее Структуры в Си и их передача

Как оформлять модули .c .h

Вступление

Для некоторых программистов, привыкших писать текст программы одним файлом (или включать в Си-файл другие Си-файлы директивой #include), вызывает трудность оформление и подключение независимых модулей, которые были бы изолированны от основной программы и легко переносились бы в другие проекты. Здесь я опишу, как это делается.

Итак, создается пара файлов с одинаковыми именами и с расширениями .c и .h (одинаковые имена — необязательное условие, но его нарушение приведет к путанице), например new_module.c и new_module.h. Формат и содержание их описан ниже.

Читать далее Как оформлять модули .c .h

Управление мощной нагрузкой переменного тока микроконтроллером

Иногда нужно слабым сигналом с микроконтроллера включить мощную нагрузку, например лампу в комнате. Особенно эта проблема актуальна перед разработчиками умного дома. Первое что приходит на ум — реле. Но не спешите, есть способ лучше 🙂 Читать далее Управление мощной нагрузкой переменного тока микроконтроллером

Пример Serial Echo (UART) с использованием event на ChibiOS, STM32

Изменения в halconf.h

#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
#define HAL_USE_SERIAL              TRUE
#endif
#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
#define SERIAL_DEFAULT_BITRATE      115200 // set baudrate here
#endif

Изменения в mcuconf.h

#define STM32_SERIAL_USE_USART1             TRUE

Читать далее Пример Serial Echo (UART) с использованием event на ChibiOS, STM32

Использование mbed кода в собственном проекте на STM32 — опыт разгона китайского LCD

Иногда чужой код очень помогает в деле подключения к микроконтроллеру периферийного железа. К сожалению, адаптировать чужой код к своему проекту бывает сложнее, чем переписать его самому, особенно если речь идет о мега фреймворках вроде arduino или mbed. Желая подключить китайский LCD на базе ILI9341 к плате STM32L476G DISCOVERY, автор задался целью воспользоваться в демо-проекте от ST драйвером, написанным для mbed, не изменив ни строчки в его коде. В результате удалось заодно разогнать экран до невиданных скоростей обновления в 27 fps.

STM32L476G DISCOVERY

Читать далее Использование mbed кода в собственном проекте на STM32 — опыт разгона китайского LCD

Измерим гармонию — анализатор звукового спектра на STM32L4 Discovery

В предыдущей публикации мы подключали дешевый китайский LCD экран к плате STM32L4 Discovery. Теперь мы попробуем реализовать на этой комбинации что-то выходящее за рамки традиционного моргания светодиодом, а именно анализатор звукового спектра, который использует имеющийся на плате микрофон. Заодно я расскажу, как пользоваться операционной системой FreeRTOS, и зачем она нужна, а также почему в нотной октаве 12 нот, и чем 53 ноты лучше, чем 12.

Читать далее Измерим гармонию — анализатор звукового спектра на STM32L4 Discovery

Ошибка обработки вложенных прерываний в STM8 (не описана в errata)

В семействе STM8 заложена очень полезная возможность экономии энергии в случае, когда быстрые и критичные ко времени обработки выполняются по прерываниям, а низкоприоритетные задачи работают в фоновом режиме. Для этого используется бит AL в регистре GCR и машинная команда WFI. Однако здесь был обнаружен подводный камень, не описанный в текущей версии errata на кристалл.
Читать далее Ошибка обработки вложенных прерываний в STM8 (не описана в errata)

STM32F103 и FatFS начинающим

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

STM32F103 FatFS

Читать далее STM32F103 и FatFS начинающим

STM32 USB Mass Storage Bootloader

Известно, что софт можно дописывать вечно, а всякого рода недочёты на плате полностью исправляются ревизии так к третьей. И если с железом уже ничего не поделаешь, то для обновления микропрограмм придумали неплохой способ обхода ограничений пространства и времени — Bootloader.

Загрузчик — это удобно и полезно, не правда ли? А если загрузчик собственной реализации, то это еще более удобно, полезно и гибкои не стабильно. Ну и конечно же, очень круто!

Так же, это прекрасная возможность углубиться и изучить особенности используемой вычислительной машины — в нашем случае микроконтроллера STM32 с ядром ARM Cortex-M3.

На самом деле, загрузчик — это проще, чем кажется на первый взгляд. В доказательство, под cut’ом соберём свой собственный USB Mass Storage Bootloader!

USB Mass Storage BootloaderUSB Mass Storage Bootloader12

Читать далее STM32 USB Mass Storage Bootloader

STM32Cube. Watchdog. Использование IWDG.

Зачастую возникают ситуации, в которых программа зависает на какой-то точке, и в этом случае единственными решениями являются либо сброс питания микроконтроллера, либо нажатие на кнопку Reset. Но порой у пользователя просто нет доступа непосредственно к электронике, установленной внутри какого-либо корпуса. Да и даже если этот  доступ есть, нет ничего хорошего в том, чтобы вынуждать покупателя вашего устройства ковыряться в микросхемах и платах =) Именно для этих целей и придуман периферийный модуль микроконтроллера под названием Watchdog, и именно этим инструментом мы сегодня и научимся пользоваться при помощи STM32Cube.

Использование WatchDog таймера Читать далее STM32Cube. Watchdog. Использование IWDG.