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. Статья: "ESP8266 - подключение и обновление прошивки – esp8266"
  11. Статья на хабре: "Reverse Engineering ESP8266 — часть 1"
  12. Статья на хабре: "Reverse Engineering ESP8266 — часть 2"
  13. Книга Дэвида Тейнсли "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

Посмотреть исходники, сборочные файлы, скачать скомпилированные прошивки, можно с портала 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, инструкция которая имеется на оф. сайте устарела, и более неработоспособна. Ссылка с инстркуций по которой ставил я, - сдохла за время написания статьи. В качестве альтернативной ссылки могу указать - windows xp - Is it still possible to get Cygwin for XP? - Super User. Сколько проживет эта ссылка, не берусь сказать.

В качестве альтернативы связке 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. Функция чтения данных.

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

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. Оконный сторожевой таймер;

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

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. Счетчик импульсов, вариант на ассемблере.

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

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

3-х уровневый конвейер STM8: перевод глав 3, 4, 5 руководства по программированию микроконтроллеров STM8 (PM0044)

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

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

Наибольшие вопросы в STM8 у меня вызывал 3-уровневый конвейер, поэтому в основу перевода легла глава, рассмативающая работу этого конвейера.

Если сравнивать систему команд STM8 с ассемблером AVR, то здесь имеется большое количество 16-битных команд, целочисленное умножение и деление, условные переходы объединены с проверками, не надо вечно перепрыгивать через команду. Имеются полноценные битовые команды, которые выполняются за один цикл. В целом, мне показалась, что писать на ассемблере STM8 можно также легко как на Си.

    Содержание::
  1. Описание ядра STM8
    1. Введение
    2. Регистры ЦПУ
  2. Интерфейс памяти STM8
    1. Программное пространство
    2. Пространство данных
    3. Архитектура интерфейса памяти
  3. Принципы работы конвейера
    1. Описание уровней конвейера
    2. Этап выборки (fetch)
    3. Декодирование и вычисление адреса
    4. Этап исполнения
    5. Конфликты на шине данных
    6. Примеры работы конвейера
    7. Предварительное соглашение
    8. Пример оптимизированной работы конвейера - выполнение программы из флеш-памяти
    9. Пример оптимизированной работы конвейера - выполнение программы из ОЗУ
    10. Пример работы конвейера с инструкциями перехода JP и CALL
    11. Приостановка конвейера
    12. Работа конвейера с ожиданием в один цикл

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