Зеркало сайта: vivacious-stockings-frog.cyclic.app

ESP8266 + Arduino + OpenWRT: проект температурного логера на датчиках DHT11 и DS18B20, пошаговое руководство

разделы: Интернет вещей, Arduino, дата: 19 декабря 2018г.

ESP8266 может работать в двух режимах: в режиме интерпретатора AT-команд или в режиме самостоятельного микроконтроллера с wifi модулем. Работу ESP8266 в режиме интерпретатора AT-команд я рассматривал в предыдущей статье, эта же статья рассматривает работу ESP8266 в качестве самостоятельного микроконтроллера.

Способов программирования ESP8266 опять же два, первый - это программирование с помощью ESP8266 фреймворка для Arduino IDE, второй - это программирование через esp-open-sdk. В первом случае мы можем использовать готовые библиотеки Arduino, во втором случае вы можем положиться только на функционал SDK и свой собственный код.

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

В качестве примера в статье рассматривается пошаговое написание прошивки для температурного логера на датчиках DHT11 и DS18B20. Первый датчик используется для определения комнатной температуры и влажности, второй используется для определения уличной температуры. Я статье используется плата ModeMCU ESP8266, т.к. там есть автозагузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F. Данные модули оснащены флеш-памятью на 4 мегабайта, что позволяет забыть о жёсткой оптимизации размера прошивки, когда борьба идёт за каждый байт.

При работе с ESP8266 есть выбор: либо использование его совместно с "облаками", либо собственным внешним сайтом, либо собственном сервером расположенным в интросети или автономной работой ESP826, когда веб-сервер запускается на самом ESP8266.

В данном проекте используется веб-сервер uhttpd на роутере с прошивкой OpenWRT. ESP8266 передаёт на него показания датчиков, а роутер их сохраняет и виде обычных файлов, и делает их доступными для просмотра через web-интерфейс. Можно дать новую жизнь старому смартфону или планшету настроив их на отображение таких web-страниц. Web-интерфейс универсален и может отображаться на любых браузерах любых устройств.

    Ссылки на полезные ресурсы и документацию:
  1. ESP8266 фреймворк для Arduino IDE
  2. Документация на библиотеку ESP8266WIFI
  3. Документация на Arduino библиотеку WiFi library
  4. Руководство на датчик AM2320: "Digital Temperature and Humidity Sensor AM2320 Product Manual"
  5. Руководство на датчик DS18B20: "DS18B20 Programmable Resolution 1-Wire Digital Thermometer"
  6. Руководство на датчик DHT11: "DHT11 Humidity & Temperature Sensor"

Содержание:

I. Начало работы с ESP8266 фреймворком для Arduino IDE

  1. Установка ESP8266 фреймворка для Arduino IDE
  2. Подключение датчика DHT11 к ESP8266
  3. Подключение датчика DS18B20 к ESP8266

II. Работа с библиотекой ESP8266WIFI

  1. Установка WiFi соединения
  2. Использование режима энергосбережения DeepSleep
  3. Класс WiFiClient, получение web-страницы от сервера на OpenWRT и отправка данных через GET запрос
  4. Отправка на web-сервер данных с датчика DHT11 через GET запрос
  5. Добавление датчика DS18B20
  6. Вывод показаний датчиков через веб-интерфейс

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

  1. Второй WiFi термометр на датчике AM2320 (добавлено 26.05.19г)

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

ESP8266: подключение, прошивка и работа с AT-командами

разделы: Интернет вещей, дата: 21 ноября 2018г.

Появившись четыре года назад, модули на базе чипа ESP8266 наделали много шума, прежде всего своей ценой. Производителем чипов была на тот момент никому неизвестная китайская фирма "Espressif Systems", зарегистрированная в Шанхае. Спустя некоторое время, многие фирмы представили на рынок аналогичные модули собственного изготовления, но по цене они были (и есть) в два - пять раз дороже модулей на ESP8266.

В 2016-ом году, фирма "Espressif Systems" представила на рынок ESP32, который существенно превосходил по своим возможностям ESP8266, и интерес к ESP8266 начал сходить на нет.

ESP32 это двухядерный микроконтроллер, или SoC если угодно, работающий на частоте 240MHz и снабженный радио-интерфейсами: WIFI стандарта 802.11 n (2.4 GHz), с пропускной способностью до 150 Mbps, и Bluetooth Low Energy стандарта 4.2, который был принят четыре года назад. ЦПУ имеет архитектуру Xtensa, есть аппаратная поддержка чисел с плавающей запятой, 7-уровневый конвейер, 520 кБ(!) ОЗУ, и многое другое (см. документацию: ESP32 Datasheet).

Если конкурентов ESP8266 изготавливают все кому не лень, то у ESP32 конкурентов с сопоставимой ценой фактически нет.

Модули на ESP8266 послужили основой для огромного количества "умных розеток" и им подобных устройств. Если говорить о ESP12 модулях, то здесь имеется около 50 Кбайт ОЗУ, 4 Мбайт флеш-памяти, частота ЦПУ 80МГц, встроенный WiFi контроллер. При этом цена за все это добро - около двух долларов. К сожалению, фирма производитель не предоставляет документацию на чип. Модули поставляются как готовые устройства с AT-интерфейсом и с возможностью программирования через Arduino IDE, используя для этого официальный SDK. Поэтому все изыскания относительно устройства аппаратной части ESP8266 являются результатом исследования энтузиастов.

В статье разбирается подключение, прошивка, и работа с AT командами ESP8266. Изначально статья была целиком посвящена только ESP8266, но впоследствии я решил добавить главу о перепрошивке модуля с ESP32. AT команды в ESP32 практически все те же, что и в ESP8266, так что, все сказанное относительно работы с AT-командам ESP8266 можно отнести и к ESP32.

Большая часть материала статьи посвящена режиму работы ESP8266, когда он работает в режиме WIFI модема с AT-интерфейсом. Разбираются типовые вопросы: как настроить, что-то скачать, переслать свои данные на сервер, и т.д. Предполагается, что уровень знаний читателя о сетях нулевой. Поэтому я постарался расписать всё максимально доходчиво. Для наглядности, показана работа с программами tcpdump и Wireshark для анализа трафика ESP8266. В качестве вспомогательного оборудования используется WiFi роутер с прошивкой OpenWRT, но вместо него можно использовать любой компьютер с Linux.

    Список используемой документации:
  1. ESP8266 Overview | Espressif Systems Страница продукта на сайте производителя.
  2. ESP8266EX Resources | Espressif Systems Страница с материалами на сайте производителя.
  3. ESP8266 SDK Getting Started Guide
  4. ESP8266 Technical Reference
  5. ESP-01/07/12 Series Modules User's Manual
  6. ESP8266 AT Instruction Set
  7. ESP8266 AT Command Examples
  8. ESP32 AT Instruction Set and Examples
  9. Netcat Cheat Sheet
  10. Xtensa Instruction Set Architecture (ISA)
  11. Статья: "ESP8266 - подключение и обновление прошивки – esp8266"
  12. Статья на хабре: "Reverse Engineering ESP8266 — часть 1"
  13. Статья на хабре: "Reverse Engineering ESP8266 — часть 2"
  14. ESP8266 быстрый старт
  15. ESP8266 продолжение. Модуль ESP-12
  16. Статья на хабре: "Новые ревизии модулей на базе ESP8266 не умеют писать в SPI Flash"
  17. Книга Дэвида Тейнсли "Linux и UNIX: программирование в shell. Руководство разработчика", глава 29 "Сценарии cgi".

Содержание:

    I. Описание ESP8266
  1. Распиновка и подключение модулей ESP12
  2. Формат загрузочного лога, режимы работы SPI флеш-памяти
  3. Баг в Linux драйвере USB-UART преобразователя CP2102
    II. Прошивка ESP8266
  1. Использование esptool
  2. Первый способ прошивки
  3. Второй способ прошивки
  4. Третий способ прошивки
  5. Прошивка модуля ESP12E AT-интерпретатором версии 1.7.0 (август 2018г)
    III. Использование связки ESP8266 + OpenWRT
  1. Связка OpenWRT + ESP8266, использование сниффера tcpdump и анализатора траффика Wireshark для иследования трафика ESP8266
  2. Получение даты и времени через сеть, используя NTP
    IV. Связь ESP8266 с Web сервером на OpenWRT
  1. Связь ESP8266 с Web сервером на OpenWrt: настройка OpenWRT
  2. АТ-команды для установки TCP/UDP соединения
  3. Получение web-страницы от сервера на OpenWRT
  4. Получение лога погоды от сервера на OpenWRT
    V. Связь ESP8266 с Web сервером на OpenWRT посредством CGI скриптов
  1. Управление OpenWRT через ESP8266 посредством CGI интерфейса
  2. Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос
  3. Отправка данных от ESP8266 на web-сервер OpenWRT через POST запрос
    VI. Прозрачный режим соединения (UART-WiFi passthrough)
  1. Управление Linux/OpenWRT используя режим "UART-WiFi passthrough"
    VI. Плата NodeMCU с модулем ESP-WROOM-32
  1. Прошивка ESP32 в интерпретатор AT-команд

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

STM32F103C8T6 без SPL, HAL и без IDE: Система тактирования RCC, таймер SysTick, UART передатчик, планировщик задач, SPI и I2C модули в режиме мастера

разделы: STM32, дата: 19 октября 2018г.

Когда пару лет назад я писал вводную статью по STM32, то больше всего мне тогда запомнилось, что прошивки даже с самыми простыми алгоритмами (например Blink) - имеют огромный размер: от одного килобайта и больше. Поэтому целью этой статьи стала попытка написания прошивок для STM32 в стиле 8-битных микроконтроллеров, когда ты полностью контролируешь процесс компиляции, используя лишь: компилятор, флешер и текстовый редактор. Соответственно в статье рассматриваются типовые на мой взгляд вопросы при переходе с 8-битников на 32-разрядную архитектуру: как помигать светодиодом, как настроить тактирование, как завести SPI и поднять I2C.

Данная статья не рассчитана на новичков, я часто буду сравнивать STM32 c STM8, и по ходу повествования буду опускать многие элементарные, на мой взгляд, вещи. Статья предполагает, что вы уже знаете Cи, имеете опыт работы в консоли Linux или CYGWIN Windows. Также будет весьма кстати, если у вас уже есть опыт программирования в "Bare Metal" хотя бы на уровне микроконтроллеров STM8.

Если вам чего-то из этого не хватает, то вы легко сможете подтянуть "матчасть" по статьям на хабре: STM32F4: GNU AS: Программирование на ассемблере в семи частях, по методичке "Народная электроника" выпуск 2. А.В. Немоляев. GCC Cortex-M3. PDF, или по книге "Джозеф Ю. Ядро Cortex - МЗ компании ARM. Полное руководство". Также, в какой-то мере, могут быть полезны материалы данного сайта.

Оборудование. В статье я буду использовать популярную плату "Blue Pill" на микроконтроллере STM32F103C8T6, программатор ST-LINK v2 (китайская реплика), USB-UART преобразователь FT232RL, 4-x разрядный семисегментный индикатор, на SPI интерфейсе и RTC DS3231 на I2C интерфейсе.

    Список используемой документации:
  1. Cortex-M3: Руководство программиста (PM0056), для чипов серий: STM32F10xxx/20xxx/21xxx/L1xxxx.
  2. Справочное руководство (Reference Manual: RM0008), для чипов следующих серий: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced Arm.
  3. Datasheet на чипы: STM32F103x8/STM32F103xB.
  4. STM32F10xxx I2C optimized examples, Application note AN2824
  5. Шпаргалка по набору инструкций 16-битных инструкций Thumb.
  6. Шпаргалка по набору инструкций Thumb2.
  7. ARM. Учебный Курс. SysTick — Системный таймер | Электроника для всех
  8. ARM Учебный курс. USART | Электроника для всех
  9. Статья на хабре: STM32: SPI: LCD — Вы всё делаете не так [восклицательный знак]
  10. SPI (перевод из книги Mastering STM32) – Radiotech
  11. Статья на хабре: Бюджетный отладчик к ESP-32 и его настройка
  12. Статья на хабре: FT232H, MPSSE и SPI-программатор за 15 евр
  13. Статья на хабре: FT232H и почти универсальный USB<->JTAG-адаптер за 15 евро

Содержание:

    I. Программирование и отладка STM32 в консоли
  1. Работа с GPIO на регистрах, без использования SPL или HAL
  2. Минималистичный Blink размером в 148 байт
  3. Добавляем к проекту таблицу векторов и Makefile
  4. Настройка системы тактирования - RCC (Reset and Clock Control)
  5. Функция задержки на ассемблерных инструкциях
  6. Функция задержки на прерывании таймера SysTick
  7. Настройка UART интерфейса в режиме передатчика
  8. Простой бенчмарк на операции деления
  9. Пишем простой планировщик задач (RTOS)
  10. Драйвер 4-x разрядного семисегментного индикатора (программный SPI)
  11. Настройка аппаратного интерфейса SPI для драйвера 4-х разрядного семисегментного индикатора
  12. Регистры I2C интерфейса, делаем сканер I2C шины
  13. Однобайтный режим чтения по шине I2C
  14. Двухбайтный режим чтения по шине I2C
  15. Запись массива через шину I2C
  16. Чтение массива через шину I2C
  17. Отладка в консоли с использованием OpenOCD
  18. Отладка с помощью JTAG адаптера на чипе FT232H
    Содержание цикла STM32F103C8 без HAL и SPL
  1. Система тактирования RCC, таймер SysTick, UART передатчик, планировщик задач, SPI и I2C модули в режиме мастера
  2. Работа с SPI дисплеями Nokia_5110 и ST7735

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

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

STM8S105 + COSMIC: Запись в EEPROM и FLASH память микроконтроллера

разделы: STM8, дата: 21 сентября 2018г.

Когда я писал драйвер FM-модуля RDA5807, то у меня возникла необходимость сохранять куда-то найденные станции, чтобы потом можно было переключиться на них одной кнопкой, минуя поиск. Но когда я полез в документацию STM8, чтобы поискать, как это можно было бы осуществить, то понял, что EEPROM и FLASH в STM8 - это отдельная подсистема микроконтроллера, и изучать ее надо всю.

Один из режимов записи в EEPROM/FLASH требует выполнения из ОЗУ. Вопрос копирования кода в ОЗУ и выполнения его оттуда я затрагивал в предыдущей статье, однако там вся реализация была на ассемблере. Сейчас же мне захотелось показать как это делается в Си.

В качестве компилятора я выбрал COSMIC, по которому уже как-то писал быстрый старт. Но тогда я писал об использованию COSMIC совместно с SPL библиотекой. На этот раз мне хочется раскрыть тему программирования в COSMIC, используя "чистый" Си в связке с ассемблером. Правда должен оговориться, что несколько отредактированные загловочные файлы из SPL в этой статье я все-таки использовать буду, т.к. нужны будут именновые константы масок периферийных регистров.

В итоге статья получилось составленной из двух взаимосвязанных тем: сначала рассматривается вопрос использования компилятора COSMIC, а затем, как с его помощью сохранять данные в EEPROM/FLASH памяти микроконтроллера.

В качестве Develop Board я буду использовать собственную плату с чипом STM8S105C4T6. Это Medium-Density чип с 16 КБ флеш-памяти, 2 КБ ОЗУ и 1 КБ ЭСППЗУ(EEPROM). Он более интересен чем STM8S103-й чип, т.к. в 105-ом имеется встроенный загрузчик(bootloader), механизм read-while-write (RWW), а размер блока составляет 128 байт вместо 64 байт на 103-м чипе. Вы в свою очередь можете использовать фирменную отладочную плату STM8S-DISCOVERY с чипом STM8S105C6T6. Там флеш-памяти будет побольше - 32 КБ. На худой конец, можно воспользоваться ещё одной китайской платой на 105-м чипе. Также как в STM8S-DISCOVERY в ней установлен кварц на 8 МГц. Сама плата выполнена в форм-факторе удобном для установки в беспаячную макету.

Cosmic у меня работает в связке с STVD, обе программы установлены на виртуалку, которая в свою очередь установлена в Linux. Гостевой ОС в виртуалке служит Windows XP SP3. О превратностях установки Cosmic я уже писал в вышеупомянутой статье два года назад. К сожалению, я тогда я не упомянул, что получить регистрационный ключ можно онлайн. Т.е. не надо ждать несколько дней чтобы ключ скинули на e-mail, как было в моем случае. Если не ошибаюсь, ключ действует один год, и по истечении регистрационного периода, его нужно получать заново. Кроме того, ключ "слетает" при копировании виртуальной машины. В этом случае его также следует получать по новой. В последнем случае я просто удалял Cosmic и затем ставил его заново, получая свежий ключ. Сейчас у меня следующая версия компилятора:

COSMIC Software STM8 C Cross Compiler (Special Edition) V4.4.7

Так же как и в предыдущей статье, для контроля кода прошивки я буду использовать дизассемблер из комплекта утилит stm8-binutils.

    Список используемой документации:
  1. Cosmic CXST7 - User Manual - документация по компилятору COSMIC
  2. Reference Manual STM8S - RM0016, глава 4 "Flash program memory and data EEPROM"
  3. Programming Manual PM0051 - руководство по записи в EEPROM и FLASH память для микроконтроллеров STM8S/STM8A
  4. Application note - AN2659, - глава пятая - "Configuring the Cosmic compiler for RAM code execution".
  5. Работа с EEPROM и Flash / STM8 / Сообщество EasyElectronics.ru хорошая вводная статья по теме на русском языке. Написано по существу, без лишней воды.

Содержание статьи:

    I. Основы работы со связкой COSMIC + STVD
  1. Создание базового проекта в среде разработки STVD+COSMIC
  2. Добавление ассемблерного файла к проекту
  3. Добавление ассемблерных обработчиков прерываний
  4. Маппинг на физические адреса
    II. Основы работы с EEPROM/FLASH подсистемой в микроконтроллерах STM8
  1. Особенности EEPROM/FLASH подсистемы в микроконтроллерах STM8
  2. Регистры подсистемы EEPROM/FLASH
  3. Запись в EEPROM средствами COSMIC
  4. Безопасное снятие защиты MASS, однобайтный режим записи в EEPROM/FLASH
  5. Четырехбайтный режим записи в EEPROM/FLASH
  6. Блоковый режим записи в EEPROM/FLASH. Копирование кода в ОЗУ и выполнение его оттуда средствами COSMIC

Скачать исходники, workspace с проектами и скомпилированными прошивками к статье можно можно будет по ссылке в конце статьи.

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

STM8 + STVD + ASSEMBLER: Быстрый старт

разделы: STM8, АССЕМБЛЕР, дата: 22 августа 2018г.

Вновь возвращаюсь к фирменной среде разработки - ST Visual Develop, для чего есть две причины. Во-первых, оказалось, что писать на ассемблере сколь-либо сложные прошивки без отладчика невозможно, у меня по крайней мере не получилось, т.к. программа все-равно так или иначе отлаживается с помощью светодиода или по UART, через отладочный интерфейс это просто делается быстрее. Во-вторых, мне показалось, что изучать архитектуру только лишь руководствуясь datasheet'ом не совсем правильно. Что-то может быть неправильно понято, что-то может быть упущено. С такими штуками как DMA, встроенный RTC или выполнение кода из ОЗУ, будет проще разобраться с помощью отладчика, не забывая при этом посматривать в datasheet.

STVD - довольно простая среда разработки, я ее освоил за вечер. В этой статье я хочу рассказать, как "с нуля" начать писать и отлаживать прошивки на ассемблере STM8, используя ST Visual Develop.

STVD - работает в ОС семейства Windows, начиная с XP и выше. При этом она прекрасно работает из-под виртуальной машины в Linux. В этой статье я использую STVD 4.3.12, последнюю доступную версию на этот момент, и Windows XP SP3 в качестве гостевой ОС. В качестве микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.

В качестве дизассемблера я буду использовать комплект утилит stm8-binutils. Бинарные файлы этого комплекта для Windows скомпилированы для работы в CYGWIN, т.е. они понимают unix'овский формат пути файла с прямым слешем в качестве разделителя. CYGWIN для Windows 7 и выше ставится без проблем следуя инструкциям на сайте https://cygwin.com/install.html, для Windows XP нужно следовать инструкциям в этом HowTo: windows xp - cygwin 2.5.2 mirror -- getting the last XP release - Stack Overflow.

В качестве альтернативы связке binutils+cygwin, можно использовать naken_util из комплекта naken_asm.

Содержание статьи:

I. Создание минимального проекта Blink

  1. Открытие шаблонного проекта на ассемблере
  2. Добавление в проект файла с таблицей векторов и обработчиками прерываний
  3. Добавление в проект констант с адресами периферии
  4. Добавление в проект файла с подпрограммой

II. Язык ассемблера STVD

  1. Основные сведения об ассемблере STVD
  2. Формат числовых констант
  3. Формат метки
  4. Сегментация
  5. Основные директивы ассемблера

III. Процесс отладки

  1. Копирование кода в ОЗУ и выполнение его оттуда
  2. Интерфейс отладки STVD
  3. Процесс отладки в STVD

IV. Макроассемблер

  1. Введение в макроассемблер STVD
  2. Макрос задержки delay_ms
  3. Макрос условного оператора сравнения регистра с числом
  4. Задержка длительностью 1 мкс на инструкции условного перехода

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

Проектирование и изготовление своей STM8 Develop Board

разделы: STM8, дата: 22 июля 2018г.

Пару лет назад я публиковал "героический эпос" о пайке STM8L-чипов в адаптеры TSSOP/QFN48 - DIP. Насколько помню, тогда это был мой первый опыт пайки SMD компонентов. Сейчас конечно та статья кажется наивной, за пару прошедших лет много чего изменилось. Вошли в обиход сервисы изготовления печатных плат и сейчас каждый может заказать десяток плат заводского качества по весьма умеренным ценам. Можно открыть Service Manual какого либо устройства и заказать набор плат для его изготовления. Звучит как фантастика, и я не смог удержаться, чтобы не сделать свою STM8 Develop Board. Благо за два года ковыряния различных отладочных плат, идей у меня накопилось достаточно. Загвоздка была только в том, я никогда этим не занимался.

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

Во-первых, я хотел попрактиковаться в пайке SMD компонентов, т.к. я не так часто этим занимаюсь. Поэтому в качестве микроконтроллера я выбрал 48-пиновый чип с расстоянием между ножками 0.5 мм. Чипы в 44-пиновом корпусе имеют практически тот же функционал, но при этом у них расстояние между ножками 0.8 мм. Пайка таких чипов В РАЗЫ легче. Также я хотел попробовать свои силы в пайке микросхем в безвыводном корпусе и поэтому добавил опциональный USB-UART преобразователь CP2102. Есть разные мнения о сложности пайки чипов в таком корпусе, кто-то умудряется даже паять их без фена, но я бы не советовал.

Во-вторых, я хотел сделать универсальный дизайн печатной платы пригодный как для отладочных, так и для плат конкретных устройств.

Ну и в третьих, я хотел поработать с чипами 200-й серии, которые являются самыми производительными среди 8-битных микроконтроллеров STM.

Вроде желаний немного, а во что все это вылилось, я расскажу далее.

    Содержание:
  1. Предыстория
  2. Общий концепт платы
  3. Распиновка платы
  4. Ошибки
  5. Пайка CP2102
  6. Особенности работы STM8S207 на частоте 24MHz
  7. USB-UART адаптер CP2102
  8. Установка Customized драйверов CP2102 в Windows
  9. Работа с CP2102 через Xpress Сonfigurator в Simplicity Studio 4

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

STM8S + SDCC: Программирование БЕЗ SPL. Интерфейсы: UART в режиме передатчика, АЦП в режиме однократного замера, I2C в режиме мастера

разделы: STM8, UART, I2C, дата: 5 мая 2018г.

В этот раз разговор пойдёт про аппаратные интерфейсы STM8S: UART, АЦП и I2C. Каждый их этих интерфейсов поддерживает несколько режимов работы, но сейчас мне хотелось бы сфокусироваться на наиболее типовых, на мой взгляд, примерах их использования: а)организация передатчика на UART, б) режим однократного замера АЦП, в) использование I2C в режиме мастера. Напомню, что вариант использования SPI в режиме мастера я приводил на примере драйвера для 4-x разрядного семисегментного индикатора .

Документация которая понадобится для прочтения статьи: Reference Manual STM8S - RM0016, главы: 22 (UART), 24 (АЦП), 21 (I2C). В качестве целевого микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.

Так же как и в прошлый раз, упор будет делаться на "чистом" программировании на Си и Ассемблере без использования сторонних библиотек. В качестве компилятора используется open-source SDCC версии 3.7. Справедливости ради замечу, что я ввёл макросы для прямого доступа к битовым инструкциям, что бы хоть как-то оптимизировать код.

Скачать полные исходники со сборочными файлам и скомпилированными прошивками, можно по ссылке в конце статьи.

В статье используются формулы в формате MathML который поддерживается браузером Firefox, для браузеров Chrome и Opera потребуется установить одноимённое расширение MathML.

    Содержание:
  1. UART1 передатчик со скоростью 921600 baud;
  2. АЦП в режиме однократного замера;
  3. I2C в режиме мастера, на примере RTC DS1307/DS3231. Инициализация.
  4. I2C в режиме мастера, на примере RTC DS1307/DS3231. Функция передачи адреса и данных.
  5. I2C в режиме мастера, на примере RTC DS1307/DS3231. Функция чтения данных.

Примечание от 01.09.2022г. В SDCC версии 4.2 поменялся формат передачи аргументов функций. Если раньше все аргументы передавались через стек, то теперь они передаются через регистры. Поэтому для совместимости со старым кодом следует добавлять опцию компиляции "--sdcccall 0".

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

STM8S + SDCC: Программирование БЕЗ SPL. Cистема автопробуждения AWU, модуль генерации звуковой частоты BEEP, cторожевые оконный и независимый таймеры

разделы: STM8, дата: 22 апреля 2018г.

Статья рассматривает вспомогательные таймеры и систему низкочастотного тактирования в микроконтроллерах STM8S. Упор делается на "чистом" программировании на Си и Ассемблере без использования сторонних библиотек.

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

Документация которая понадобится для прочтения статьи: Reference Manual STM8S - RM0016, главы: 12 (AWU), 13 (BEEP), 14 (Independet Watchdog), 15 (Window Watchdog). В качестве целевого микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.

В статье используются формулы в формате MathML который поддерживается браузером Firefox, для браузеров Chrome и Opera потребуется установить одноименное расширение MathML.

Скачать полные исходники со сборочными файлам и скомпилированными прошивками, можно по ссылке в конце статьи.

    Содержание:
  1. Режимы энергосбережения;
  2. Описание системы автопробуждения;
  3. Blink на таймере AWU;
  4. Измерение частоты LSI с помощью захвата по таймеру TIM1;
  5. Тактирование AWU от внешнего кварца или генератора HSE;
  6. Генератор для пьезодинамика;
  7. Независимый сторожевой таймер Watchdog;
  8. Оконный сторожевой таймер;

Примечание от 01.09.2022г. В SDCC версии 4.2 поменялся формат передачи аргументов функций. Если раньше все аргументы передавались через стек, то теперь они передаются через регистры. Поэтому для совместимости со старым кодом следует добавлять опцию компиляции "--sdcccall 0".

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

STM8S + SDCC: Программирование БЕЗ SPL, система тактирования

разделы: STM8, дата: 11 апреля 2018г.

Систему тактирования я уже бегло рассматривал в случае использования SPL. Стандартная периферийная библиотека, на мой взгляд, предлагается фирмой STM в качестве инструмента для быстрого освоения семейства микроконтроллеров STM8, программистами ранее не работавшими с ними. Сейчас я считаю, что она совершенно лишняя. Хотя, в примерах я использую именованные константы взятые из заголовочных файлов SPL.

Документация которая понадобится для прочтения статьи: Reference Manual STM8S - RM0016, глава 9. В качестве целевого микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.

    Содержание:
  1. Система тактирования STM8S, ключевые особенности;
  2. Подключение и отключение периферии к шинам тактирования. Регистры CLK_ICKR, CLK_PCKENR1 и CLK_PCKENR2;
  3. Внутренний высокочастотный генератор HSI. Регистр CLK_CKDIVR;
  4. Подключение внешнего кварца к HSE генератору тактовой частоты. Регистры CLK_ECKR, CLK_CMSR, CLK_SWR и CLK_SWCR;
  5. Модуль безопасности системы тактирования CSS. Регистр CLK_CSSR;
  6. Тактирование микроконтроллера от низкочастотного внутреннего генератора LSI;
  7. Тактирование микроконтроллера от внешнего часового генератора DS3231;

Скачать полные исходники со сборочными файлам и скомпилированными прошивками, можно по ссылке в конце статьи.

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

STM8S + SDCC: Программирование на связке языков Си и ассемблер

разделы: STM8, АССЕМБЛЕР, дата: 13 марта 2018г.

В данной статье я попытался рассмотреть вопрос использования ассемблера в Си-программах для компилятора SDCC. Данный компилятор часто подвергается критике по качеству кода, однако он является единственным Open Source компилятором для архитектуры STM8, и единственным компилятором доступным в Linux. Поэтому данная статья может рассматриваться как HowTo по выжимании максимума возможного из SDCC.

Когда я пытался в прошлый раз (почти два года назад) подружиться с SDCC у меня оказалось большое количество вопросов к нему, что вылилось в метания между SDCC, IAR и Cosmic. Была даже идея отказаться от STM8 в пользу Cortex-M0. Однако теперь для Linux появился отладочный интерфейс, что побудило меня еще раз взглянуть на SDCC и попытаться найти к нему подход.

Статья построена аналогично предыдущей: ATtiny13a: использование ассемблера GNU-AS в программах на Си с той разницей, что вместо ATtiny13a будет использоваться 20-пиновый STM8S103F3P6, а вместо GCC - SDCC.

В качестве операционки при написании использовался Slackware GNU/Linux (русские физики рекомендуют), но теоретически, все должно работать и в Windows при условии использования CYGWIN.

По ходу изложения, я буду сравнивать систему команд STM8 и AVR. Я делаю это не для того что "уронить" AVR, а потому что считаю эту архитектуру хорошо сбалансированной, удобной в использовании и легкой в освоении. STM8 это более современная архитектура, и по определению обязана быть более лучшей. Однако AVR удобно рассматривать в качестве какой-то базовой системы, этакой точкой отсчета.

    Содержание:
  1. Создание Си - проекта Blink для SDCC.
  2. Создание проекта Blink на ассемблере SDCC.
  3. Добавление ассемблерной функции в Си-программу.
  4. Передача параметров из Си в ассемблерную функцию.
  5. Задержка по таймеру TIM4, с обработчиком прерывания на ассемблере.
  6. Счетчик на 4-x разрядном семисегментном индикаторе.
  7. Переписывание драйвера индикатора на ассемблере STM8.
  8. Использование аппаратного SPI-интерфейса в режиме мастера.
  9. Счетчик импульсов, вариант на Си.
  10. Счетчик импульсов, вариант на ассемблере.

Полные исходники, сборочные файлы и скомпилированные прошивки можно будет скачать по ссылке в конце статьи.

Примечание от 01.09.2022г. В SDCC версии 4.2 поменялся формат передачи аргументов функций. Если раньше все аргументы передавались через стек, то теперь они передаются через регистры. Поэтому для совместимости со старым кодом следует добавлять опцию компиляции "--sdcccall 0".

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