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.

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