STM32F103C8 без HAL и SPL: Вывод текста на дисплей ST7735

разделы: STM32, дата: 10 мая 2023г.

В данной статье рассматриваются способы вывода текста на дисплей ST7735 с помощью микроконтроллера STM32F103C8. В качестве шрифтов используются два шрифта с кириллицей 8х8 и 8х16, а также шрифт Cybercafe 8х16 без кириллицы.

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

Содержание:

  1. Исследование инициализации дисплея ST7735 библиотекой Adafruit
  2. Функция заливки прямоугольной области дисплея
  3. Команда MADCTL - установка цветового режима и ориентации дисплея ST7735
  4. Шрифт CP866_8х8
  5. Печать строки на функции вывода одного символа
  6. Печать целой строки
  7. Ускоряемся до 100 fps с помощью DMA
  8. RLE-cжатие для шрифтов 8x16
  9. Печать текста шрифтом 8x16

Шрифт Terminus (добавлено 22 мая 2023г.)

  1. Шрифт Terminus 8x16
  2. Шрифт Terminus 12x24
  3. Шрифт Terminus 16x32

Конвертация векторных шрифтов

  1. Преобразование векторных шрифтов в растровые

Дизайнерские шрифты (добавлено 16 июня 2023г.)

  1. Словарное сжатие для больших шрифтов
  2. Жидко-кристальные шрифты DS_Digital и PixelLCD
  3. Футуристические шрифты: Nulshock, DuneRise, BladeRunner

Все примеры и готовые прошивки можно скачать с портала GitLab

Читать дальше

STM32F103C8 без HAL и SPL: Работа с монохромными дисплеями STE2007 и SSD1306

разделы: STM32, дата: 13 апреля 2023г.

В продолжение темы работы с дисплеями, в данной статье рассматривается работа с монохромными дисплеями от телефона Nokia 1202 и OLED дисплеем SSD1306. Первый дисплей продавался на али пару лет назад, и сейчас снят с продажи. Тем не менее, на его примере рассмотрим использование USART интерфейса в качестве 9-битного SPI, а так же коснемся вопроса конвертации шрифтов (пока растровых) для использования в своих проектах. В исходниках можно будет найти полные кодовые наборы в 256 символов конвертированных растрового шрифта 8х8 (кириллица) и 8х16 (латиница).

Про OLED дисплей SSD1306 достаточно сложно написать что-либо новое, по нему есть куча материалов в сети. Но мне показалось, что это не повод, что бы не упоминать его вообще.

Все примеры с скомпилированными прошивками можно скачать с портала GitLab по ссылке: https://gitlab.com/flank1er/stm32_bare_metal

Содержание:

I. SPI дисплей HX1230 (Nokia 1202)

  1. Общий обзор дисплея Nokia 1202
  2. Программный 9-битный протокол SPI
  3. Синхронный USART интерфейс в режиме 9-битного SPI
  4. Шрифты для дисплея Nokia 1202

II. OLED дисплей SSD1306 на I2C интерфейсе

  1. Дисплей SSD1306

Читать дальше

Режимы энергосбережения микроконтроллеров STM8Lх51: Low Power Run Mode и Low Power Wait Mode

разделы: STM8, дата: 06 ноября 2022г.

Данная статья посвящена ультраэкономичным режимам энергосбережения микроконтроллеров STM8L: "Low Power Run Mode" и "Low Power Wait Mode". Данные режимы характерны тем, что в них отключатся флеш-память, а весь код выполняется из оперативной памяти. Также отключается главный регулятор напряжения MVR, а тактирование осуществлется от низкочастотного генератора на 38 кГц или от часового кварца. За счет этого удается добится кардинального снижения энергопотребления микроконтроллера до 3-5 мкА.

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

В качестве примера для данных режимов энергосбережения я бы хотел рассмотреть создание часов на батарейном питании. Пусть будет две пальчиковые батареи с ресурсом работы в один год. В качестве индикатора будет использоваться шести-разрядный жидко-кристаллический индикатор (ЖКИ) на контроллере HT1621. Данный индикатор недорогой (около 200р), и он свободно продается на али.

На первый взгляд задача может показаться примитивной, но с учетом необходимости работы в режиме пониженного энергопотребления все становится не так просто. Отключая флеш-память, вы остаетесь без прерываний вообще, т.к. в stm8 таблица прерываний не может менять местоположение, она всегда располагается на флеш-памяти. В качестве альтернативы прерываниям существует механизм Event'ов, которого нет в S-линейке микроконтроллеров STM8. Кроме того, требуется рабочий цикл программы вместе с используемыми подпрограммами и функциями размещать в оперативной памяти, размер которой в микроконтроллере STM8L051F3 равен всего одному килобайту. А кроме кода программы, там еще располагаются глобальные переменные и стек. И вот так с ходу написать такой проект мало у кого получится, прежде придется порядочно посидеть над Reference Manual. А в проекте, еще используются недокументированные функции.

    В целом, статья делится условно на три части:
  1. Часть посвященна ЖКИ индикатору
  2. Часть посвященная режимам энергосбережения STM8L: "Low Power Run Mode" и "Low Power Wait Mode"
  3. Часть посвященная программированию часов
    Требуемая аппаратура:
  1. Для часов нам понадобится: а) ЖКИ индикатор, б) микроконтроллер STM8L051F3P6, в) энкодер с кнопкой, г) две батарейки АА или ААА с держателем, д) макетка.
  2. Т.к. микроконтроллер STM8L051F3P6 можно прошить не более чем 100 раз, для разработки нам понадобится микроконтроллер STM8L151xx или STM8L152xx. Сгодится так же STM8L-DISCOVERY. Ещё потребуется ST-Link и компьютер. Для оценки энергопотребления я буду пользоваться платой MSP430FR2433 с инструментом EnergyTrace, вы же можете пользоваться обычным мультиметром.

Из софта нам понадобится компилятор Cosmic и среда разработки STVD, т.к. у SDCC нет инструментов загрузки кода в оперативную память и компиляции кода без абсолютных адресов, т.е. строго с относительной адресацией.

Полезные материалы:

  1. Статья по компилятору Cosmic: "STM8S105 + COSMIC: Запись в EEPROM и FLASH память микроконтроллера"
  2. Даташит на HT1621: "https://www.radiokot.ru/artfiles/6611/01.pdf"
  3. Reference Manual STM8L: "RM0031"
  4. Даташит на микроконтроллер STM8L051F3: "https://www.st.com/resource/en/datasheet/stm8l051f3.pdf"
  5. Даташит на микроконтроллер STM8L151xx: "https://www.st.com/resource/en/datasheet/stm8l151c8.pdf"
  6. Топик на easyelectronics.ru: "STM8L encoder mode"

Содержание:

I. ЖК дисплей на контроллере HT1621

  1. Обзор ЖКИ на HT1621
  2. Пишем драйвер дисплея HT1621 для STM8S103F3

II. Работа с микроконтроллером STM8L151C8 в среде STVD+Cosmic

  1. Структура базового проекта с мигающим светодиодом
  2. Использование Wait режима энергосбережения
  3. Подключение дисплея HT1621 к микроконтроллеру STM8L151C8 и оценка энергопотребления
  4. Добавляем энкодер на таймере TIM2
  5. Программа часов

III. Энергосберегающие режимы "Low Power Run Mode" и "Low Power Wait Mode"

  1. Механизм Event'ов и режим энергосбережения флеш-памяти IDDQ
  2. Переходим в режим Low Power Wait Mode с тактированием от LSI
  3. Переключение на тактирование от LSE
  4. Часы на микроконтроллере STM8L151C8
  5. Адаптация кода на микроконтроллер STM8L051F3
  6. Вместо заключения
На портал GitLab я выложил workspace для STVD со всеми примерами: https://gitlab.com/flank1er/stm8l_ht1621_clock
Так же репозиторий включает драйвер дисплея ht1621 для stm8s103f3 написаный на SDCC

Читать дальше

STM32F103C8 без HAL и SPL: Работа с SPI дисплеями Nokia_5110 и ST7735

разделы: PCD8544, STM32, дата: 27 сентября 2022г.

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

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

Итак, в этой статье, в качестве целевого микроконтроллера я буду использовать stm32f103c8 в виду его широкой распространенности. Полагаю, что bluepill имеется у всех.

В качестве дисплея я буду использовать т.н. Nokia 5110 дисплей на контроллере PCD8544. И хотя я уже писал очень длинную статью по работе с ним на ATmega8, с тех пор я многое переосмыслил. Главное же конечно то, что дисплей все еще продается на али, он доступный в плане цены, и скорее всего, он уже имеется у всех, кто читает эти строки. Впоследствии, алгоритмы написанные для Nokia 5110 мы будем переносить на другие дисплеи.

И чтобы статья совсем не казалось скучной, в завершении рассмотрим работу c цветным дисплеем на контроллере ST7735 с разрешением 128 на 160 пикселей и диагональю 1.8 дюйма (4.5 сантиметра). Будем пытаться добится от него работы на 90 fps (я серьёзно).

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

Содержание:

I. Часть первая, вводная

  1. Базовый проект на CMSIS для stm32f103c8
  2. Добавляем управление через UART
  3. Подключение энкодера (таймер TIM2)
  4. Подключение энкодера (таймер TIM4)

II. Часть вторая, дисплей Nokia 5110

  1. Подключение дисплея Nokia 5110
  2. Работа с текстом
  3. Интерфейс FM-приемника
  4. Меню со скролом
  5. Бегущая строка

III. Часть третья, дисплей ST7735

  1. Пара слов про дисплей ST7735
  2. Инициализация дисплея ST7735
  3. Функция заливки
  4. Выжимаем 90 fps из дисплея ST7735
  5. Вместо заключения: баги и все такое

Бонус. IPS дисплеи ST7789 320х240 и 240х240 (добавленно позже)

  1. Обзор IPS дисплеев на контроллере ST7789
  2. Проверка дисплеев на контроллере ST7789 в Arduino
  3. Исправление функций модуля "st7735.c" для совместимости с контроллером ST7789
  4. Инициализация дисплея ST7789
    Содержание цикла STM32F103C8 без HAL и SPL
  1. Система тактирования RCC, таймер SysTick, UART передатчик, планировщик задач, SPI и I2C модули в режиме мастера
  2. Работа с SPI дисплеями Nokia_5110 и ST7735

Все примеры с скомпилированными прошивками можно скачать с портала GitLab по ссылке: https://gitlab.com/flank1er/stm32_bare_metal

Читать дальше

Сага об отладчиках

разделы: Программаторы, STM32, дата: 07 августа 2022г.

Недавно у меня сгорел мой единственный ST-Link v2 с оригинальным STM32, который верой и правдой прослужил мне семь лет. Выкидывать его у меня не поднялась рука, и я что называется "приобрел практический опыт" восстанавливая его работу. Данная проблема заставила меня провести личное исследование о доступных альтернативах отладчику ST-Link V2, и результаты этого мини исследования легли в основу данной статьи.

Вторым мотивом которым я руководствовался, была ситуация сложившаяся на рынке микроконтроллеров. Полагаю, что все уже понимают, что микроконтроллеры STM32 скорее всего уже не будут доступны никогда, и нужно искать альтернативы. В виду этого теряется ценность брендированных отладчиков таких как ST-LinkV2, которые могут работать только с микроконтроллерами STM, и соответственно вопрос опять упирается в поиск альтернатив.

В своих проблемах и поисках я не был одинок, поэтому ниже привожу список материалов, на которые я опирался.

Содержание:

  1. Реанимация ST-Link V2
  2. Отладчик CMSIS-DAP (или DAP-Link)
  3. PyOCD - аналог OpenOCD и st-flash для отладчика CMSIS-DAP
  4. Перепрошивка STLinkV2 в JLink_OB
  5. JLink_V8 (клон)
  6. ESP-STLINK
  7. Прошивка и отладка китайского ARM микроконтроллера AT32F403RC (добавлено позже)

Для работы я использовал Slackware Linux и виртуальную машину с Windows. Если вы пользуетесь Windows, то вам соответствено понадобится виртуальная машина с Linux.

Читать дальше

Использование Qbs для работы с STM8/SDCC в QtСreator (обновлено)

разделы: среда разработки, STM8, дата: 29 июля 2022, обновлено 1 сентябряг.

Спустя долгое время, я решил узнать как обстоят дела с поддержкой STM8 в SDCC. Последней версией SDCC которой я пользовался был 3.6. За это время OpenOCD официально обзавелся поддержкой STM8. И т.к. в Linux я пользуюсь преимущественно IDE QtCreator, был соблазн перетащить туда проекты на STM8. Главная сложность возникла с системой управления сборки. QtCreator умеет работать только с qmake, qbs и cmake проектами. Qmake не поддерживает sdcc никоим образом. У CMake поддержка заявлена, но она чисто декларативная. Таким образом нам остается только Qbs.

Ранее для STM8 я пользовался STVD+Cosmic, но это требовало работы из виртуальной машины. STVD - отличная среда разработки, но в визуальном плане она устарела уже давно. Отсутствие темной темы и линтера конечно не принципиально, но без этого уже не комфортно работать. Кроме того Cosmic для проверки лицензии постоянно стучится в интернет. Я же предпочитаю отключать интернет в виртуалке.

Ок, но какие сложности нас ожидают?

  • Во-первых, придется порядком повозиться с этим с этим Qbs. Система плохо документированная и малоиспользуемая.
  • Во-вторых, отладка в QtCreator не такая комфортная как в STVD. Нет периферийных регистров, а ассемблерный код не сопровождается отладочной информацией. Что бы поставить, например, точку остановки на ассемблерное прерывание, сначала нужно узнать его адрес, и затем ставить break на физический адрес.
  • Ни и конечно приходится постоянно бороться с SDCC. Современный SDCC/STM8, в принципе, не так уж плох, но за ним приходиться постоянно следить, а проблемные участки кода переписывать в виде ассемблерных функций.

Итак, софт который нам понадобится для программирования микроконтроллеров STM8:

  1. stm8-binutils - Комплект утилит, который включает в себя: отладчик stm8-gdb, stm8-size, stm8-objdump и пр.
  2. OpenOCD - версии 0.11. Начиная с этой версии появилась поддержка SWIM протокола и чипов STM8
  3. QtCreator. Я использую версию 5.0.3 из SBo
  4. Qbs. Моя версия 1.16.0 так же из SBo. Она не самая свежая, но работает без вопросов.
  5. Для линтера в QtCreator потребуется плагин qt-creator-llvm и cppcheck.

Из аппаратного обеспечения нам достаточно будет платы c чипом STM8S103F3 и ST-Link V2 с поддержкой SWIM протокола.

Руководств и мануалов по использованию Qbs в baremetal-проектах почти нет. Есть несколько примеров для STM32, но так как там используется GCC, скрипт проекта будет отличаться от такового для SDCC.

Прежде чем начать что-то делать, настоятельно рекомендуется пройти по последним трем ссылкам, и изучить их содержимое.

Содержание:

I. Консольный Qbs проект для STM8+SDCC

  1. Знакомимся с Blink из примеров QBS
  2. Отладка прошивки
  3. Сборка прошивки в ELF-формат
  4. Раздельные профили компиляции "debug" и "release"
  5. Добавляем ассемблерный файл в проект

II. Работа с проектом в Qt Creator

  1. Настраиваем STM8 baremetal kit в QtCreator
  2. Качество кода SDCC

III. Бонус

  1. Qbs-скрипт для STM32F103C8-проекта на CMSIS (пошаговая инструкция)

IV. Добавленно позже

  1. Проблема с запуском OpenOCD для STM8

Читать дальше

Плата STM32F411CE BlackPill + MicroPython. Быстрый старт

разделы: STM32, дата: 24 июля 2020г.

Внимание! Статья была отредактирована в ноябре 2023 года (последнее изменение 28 июля 2024г). Были исправленны битые ссылки, логи и скриншоты STM32CubeProgrammer были приведены к версии 2.15. Кроме этого, был добавлен новый раздел "BlackPill в 2023 году, альтернативные платы WeAct", где рассмотренна современная ситуация с прошивками микропитона для BlackPill. Также был добавлен легкий экскурс по программированию на микропитоне на примере написания драйвера дисплея SSD1306 с I2C интерфейсом. Кроме этого было затронуто асинхронное программирование на микропитоне. Также был добавлен обзор альтернативных плат WeAct в форм-факторе Blackpill на чипах: AT32F403ACGU7, RP2040 и STM32WB55. Старую версию статьи можно найти по следующему адресу: "перейти по ссылке".

Изначально статья была посвящена плате Blackpill на чипе STM32F411, и немного была затронута тема микропитона. Немного, потому-что это казалось скорее игрушкой для студентов и не более того. За последние три года произошли какие-то тектонические сдвиги в микроэлектронике, и ситуация поменялась.

  1. Во-первых, фирма Espressif выбросила на рынок целую коробку новых чипов, с очень привлекательными характеристиками. А для ESP микропитон вполне достойная среда программирования, т.к. писать что-то на SDK - сомнительное удовольствие.
  2. Китайцы выпустили целый вагон своих чипов, и микроконтроллеры с объемом флеш-памяти 1 МБ перестали быть экзотикой.
  3. Появился очень интересный RP2040 с возможностью установки микропитона.

Таким образом, я вижу с одной стороны дрифт в сторону от продукции ST, а с другой - микроконтроллеров в сторону SoC. Микропитон же похоже пытается стать Java для микроконтроллеров. Так или иначе байткод-интерпретатор там уже имеется.

Еще один аспект - микропитон выполняет роль интерактивной операционной системы для микроконтроллеров. Там есть дисковая система, командная строка и возможность запускать скрипты с диска. Т.о. микропитон позволяет работать с периферией и аппаратными интерфесами в диалоговом режиме.

Хочу заметить, что вопрос прошивки модулей ESP8266/ESP32 микропитоном рассматривалась в статье про EPS8266: "Установка прошивки MicroPython".

Полезная документация по теме статьи:

  1. STM32F411xC/E Reference Manual (RM0383)
  2. User Manual "STM32CubeProgrammer software description" (UM2237)
  3. Аккаунт компании WeACT на github'e с документацией на плату MiniF4-STM32F4x1
  4. Документация по MicroPython

Содержание:

I. Обзор платы BlackPill на чипе STM32F411CE

  1. Плата WeACT с чипом STM32F411CEU6 ака "Black Pill V2.0"
  2. Использование флешера STM32CubeProgrammer
  3. Прошивка MicroPython
  4. Загрузка программы Blink.py для микропитона, и основы работы с REPL
  5. Установка SPI флешки на плату WeACT STM32F411CEU6
  6. Сборка микропитона из исходников

II. Основы работы c MicroPython

  1. Работа с MicroPython в интерактивной системе REPL
  2. Использование редакторов VS Code и Atom в качестве IDE для MicroPython

III. BlackPill в 2023 году, альтернативные платы WeAct

  1. Микропитон на Blackpill - STM32F411CE в 2023 году
  2. Прикручиваем I2C дисплей SSD1306 128x32
  3. Сборка прошивки микропитона с модулем ulab
  4. Асинхронное программирование на микропитоне: сопрогрммы(coroutines)
  5. Альтернативная плата WeAct Blackpill на китайском чипе AT32F403ACGU7
  6. Плата WeAct RP2040 с микропитоном и внешней флешкой

IV. Микропитон в 2024 году

  1. Эксперименты с микропитоном на плате WeAct AT32F403ACGU7
  2. Прошивка RT-Thread c микропитоном для AT32F403A
  3. Плата WeAct на чипе STM32WB55CGU6 с BLE 5.4
  4. mpy-cross байт-код компилятор микропитона

Читать дальше

STM8 + ASSEMBLER: Драйвер FM-приемника RDA5807m для микроконтроллера STM8S103F3 (обновлено 14 августа)

разделы: STM8, RDA5807M, дата: 29 декабря 2019г.

В статье пошагово описывается процесс написания драйвера для FM-приемника RDA5807m, где в качестве микроконтроллера используется STM8S103F3, а в качестве языка программирования - ассемблер со средой программирования STVD.

Структурно статью можно разделить три части. С одной стороны это статья об ассемблере STM8, в частности здесь имеются замечания об использовании косвенной адресации и использования указателя стека в качестве индексного регистра. Собственно, вся статья построена на ассемблерном коде STM8. С другой стороны, рассматривается периферия STM8, в частности в статье описывается создание UART приёмо-передатчика для микроконтроллера STM8. Это может быть использовано для управления коммуникационными модулями с UART интерфейсом, навроде: esp8266, esp32, rda5981 и пр. С третьей стороны, в статье главной темой является RDA5807m. Здесь ему, правда, уделяется всего одна глава, т.к. сам по себе чип несложный.

Совершенно другое дело - система передачи данных RDS (Radio Data System). Я смог добиться лишь декодирования RDS - текста. Это восемь символов латиницей, через которые передается название станции. К сожалению, я не смог найти станцию которая бы передавала текущее время, но я все-равно планирую рассказать об этой возможности во второй статье (устарело, сейчас чтение RDS уже реализовано).

Данная статья является первой частью, в ней рассматривается лишь минимальный драйвер RDA5807m, который годится лишь для проверки модуля. Полноценный драйвер я планирую описать во второй статье, кроме того, там должно быть много материала по RDS. Это будут выдержки из стандарта: "EN50067. Specification of the radio data system (RDS) for VHF/FM sound broadcasting in the frequency range from 87,5 to 108,0 MHz. April 1998. с описанием формата, а также логи принятых данных.

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

Полезные материалы по теме статьи:

  1. Статья: "STM8S + SDCC: Программирование БЕЗ SPL. Интерфейсы: UART в режиме передатчика, АЦП в режиме однократного замера, I2C в режиме мастера на примере DS1307/DS3231"
  2. Статья: "STM8 + STVD + ASSEMBLER: Быстрый старт"
  3. Обзорная статья по RDA5807m: "Arduino: FM-радиомодуль на микросхеме RDA5807m"

Содержание:

I. Реализация командного интерфейса посредством UART

  1. Схема подключения
  2. Базовый проект, реализация программы эхо/echo для UART интерфейса
  3. Использование косвенной адресации
  4. Отладка прерывания
  5. Реализация командного интерфейса

II. Минимальный драйвер RDA5807m

  1. Минимальный драйвер для управления FM-приемником RDA5807m
  2. Чтение частоты станции и переключение тюнера на заданную частоту

III. Драйвер с переключением диапазонов и интервалов частот

  1. Вводная часть
  2. Порядок работы с драйвером
  3. Использование ОЗУ драйвером
  4. Длинные переходы и реализация оператора case на ассемблере STM8
  5. Реализация переключения диапазонов и интервалов
  6. Функции шумоподавления

IV. Прием RDS данных (добавлено 25 июня 2020г.)

  1. Работа над ошибками (борьба с аппаратным багом программными средствами)
  2. Что такое RDS и как его читать с помощью RDA5807m
  3. Преобразование даты из MJD формата в дни, года и месяцы
  4. Математическая библиотека для 32/24 битных операций. Операции сложения, вычитания и умножения
  5. Математическая библиотека для 32/24 битных операций. Операция деления
  6. Подпрограмма преобразования даты
  7. Реализация чтения RDS сообщений

V. Подключение энкодера и дисплея к драйверу

  1. Рефакторинг кода драйвера (добавлено 13 июля 2020г.)
  2. Автопоиск (добавлено 14 августа 2020г.)

Посмотреть исходники, или скачать скомпилированные прошивки можно с портала GitLab по следующей ссылке: https://gitlab.com/flank1er/stm8_rda5807m.

Читать дальше

Настройка: Eclipse, SW4STM32, STM32CubeIDE и Qt Creator, для отладки проекта на STM32F103C8 (BluePill)

разделы: STM32, среда разработки, дата: 16 ноября 2019г.

Данную статью по содержанию можно разделить на две или три части. С одной стороны я хотел рассказать в ней о конфигурации ряда IDE основанных на кодовой базе Eclipse, т.к. когда я впервые настраивал подключение отладчика к Eclipse и SW4STM32, мне не показался этот процесс простым и "интуитивно понятным".

Вторая часть статьи в каком-то роде продолжает прошлогоднюю статью по STM32, Т.к. в качестве демонстрационного примера берётся проект из той статьи. Однако, одним заимствованием ограничиться не получилось, и для развития идеи, я описал недостатки данного проекта, и предложил более совершенный вариант Makefile'а.

Получившийся Makefile дал возможность перенести проект на систему сборки CMake. Это в свою очередь дало возможность продемонстрировать использование Qt Creator для программирования и отладки микроконтроллеров STM32.

В техническом плане, проект используемый в качестве примера, очень простой. Это обычный Blink, состоящий из Си-кода и ассемблере ARM. Из ресурсов микроконтроллера используется лишь порт ввода-вывода GPIO_C и системный таймер SysTick. В проекте не затрагиваются DMA, USB, FSMC и прочие интерфейсы. Также в стороне осталась библиотека newlib, поддержка языка программирования C++, и работа с проектами STM32CubeMX. Т.е. несмотря на доработку проекта в статье, он все ещё годится лишь для несложных задач, и более соответствует уровню микроконтроллеров с архитектурой Cortex-M0/M0+.

Используемые в статье Hardware и Software. В качестве операционной системы использовалась Slackware GNU/Linux (русские физики рекомендуют), в качестве целевого микроконтроллера - STM32F103C8T6 (Blue Pill). В качестве программатора и отладчика использовался китайский клон: "ST-Link v2", а также JTAG отладчик на чипе FT232H. Из софта, в качестве gdb сервера в статье используется: "OpenOCD", а в качестве флешера: "st-flash". Используемый туллчейн arm-none-eabi-gcc имеет версию - 8.3.1, релиз от 20190703. Версия CMake - 3.15.5. Qt Creator используемый при написании статьи был версий 4.9.2 и 4.10.2.

Должен предупредить, что свой ST-Linkv2 я покупал достаточно давно, и он на чипе STM32. Сейчас на али продаются программаторы ST-Linkv2 на чипе CKS32F103C8T6, и с ними могут быть нюансы.

Полезные материалы по теме статьи:

Содержание:

I. Отладка в Eclipse, SW4STM32 и STM32CubeIDE:

  1. Общая настройка
  2. Создание базового проекта
  3. Настройка параметров отладки (Debug)
  4. Настройка конфигурации Release
  5. Управление проектом в Eclipse
  6. Настройка SW4STM32
  7. Настройка STM32CubeIDE

II. "Допиливание" Makefile и создание на его основе CMake проекта:

  1. Использование Eclipse совместно со своим Makefile
  2. Ограничения используемого Makefile
  3. Устранение ограничений используемого Makefile
  4. Использование динамической памяти
  5. Eclipse + CMake

III. Использование Qt Creator для программирования и отладки микроконтроллеров STM32:

  1. Qt Creator + CMake + STM32

Читать дальше

ESP-OPEN-SDK: работа с WiFi соединением в режиме клиента (station mode)

разделы: Интернет вещей, дата: 19 мая 2019г.

В данной статье я хочу рассмотреть наиболее простые примеры для работы с сетью средствами SDK. При работе с сетью, SDK использует неблокирующее программирование. В связи с этим, программирование сводиться к написанию коллбек-функций, которые будут вызываться из SDK при наступлении того или иного события. Это затрудняет чтение и разбор алгоритма программы, поэтому в статье я всега стараюсь говорить, что за чем следует.

Статья по структуре будет напоминать предыдущую: "ESP8266: подключение, прошивка и работа с AT-командами", за тем исключением, что в этот раз все будет делаться с помощью программирования через ESP8266-NONOS-SDK.

Конфигурация WiFi сети будет, опять же, состоять из двух компонентов: а) точки доступа на роутере с прошивкой OpenWRT; б) и собственно ESP8266 выступающего в роли клиента. На стороне роутера запущен web-сервер для обслуживания ESP8266. Для передачи и получения данных от роутера, ESP8266 будет использовать GET - запросы.

В качестве "транспорта" для работы с TCP/IP я буду использовать штатный интерфейс espconn, который описан в ESP8266 Non-OS SDK API Reference.

Для захвата и анализа трафика между ESP8266 и точкой доступа на OpenWRT, я буду использовать программы tcpdump и Wireshark. Все примеры статьи используют SDK версии 2.1.0.

    Список используемой документации:
  1. ESP8266EX Resources | Espressif Systems Страница с доступными ресурсами по ESP8266 на сайте производителя.
  2. ESP8266 Non-OS SDK API Reference ESP8266 Non-OS SDK API Reference версия 2.2
  3. ESP8266 Low Power Solutions
  4. Статья Михаила Григорьева на хабре: Работа с ESP8266: Собираем компилятор и пишем первую прошивку
  5. Книга Kolban's Book on ESP8266
  6. Если вы как и я НЕ учились по специальности "компьютерные сети", то вам скорее всего понадобиться какой-нибудь мануал с описанием разных сетевых протоколов. Я лично использую "В. Олифер, Н. Олифер «Компьютерные сети. Принципы, технологии, протоколы.", часть IV: Сети TCP/IP. Это недорогой понятный учебник без лишней воды.

Содержание:

  1. Создание базового проекта
  2. Установка WiFi соединения в режиме клиента
  3. Работа с TCP соединением используя espconn
  4. Использование режима энергосбережения "deep sleep"
  5. Реализация команды ping
  6. Получение даты и времени из сети по протоколу SNTP

Посмотреть исходники, сборочные файлы, скачать скомпилированные прошивки, можно с портала GITLAB https://gitlab.com/flank1er/esp8266_sdk_examples

Читать дальше