Программные задержки для STM8

Доброго здравия, All.

Ковыряю STM8 контроллеры, и часто сталкиваюсь с тем, что нет каких-то мелочей, к которым привык. На этот раз такой мелочью стали программные задержки. Например, в AVR-LibC была для этого delay.h.

Её-то я «интерфейс» я и повторил под осваиваемого зверька. Можно спорить об актуальности программных задержек, но бывает, что всё же нет альтернативы. Например — это часто проще, чем возиться с таймером. Или когда требуется формировать короткие промежутки времени: вход и выход из прерывания требуют довольно большого количества тактов, а значит — просто не успеем. Есть ещё фактор: когда время входа в прерывание плохо предсказуемо, и требует особого внимания.

Собственно, файл брать здесь.
27.11.2014 Не упомянул компилятор, для какого тестировал — COSMIC. Зато теперь работает и для SDCC.

STM8L. Настройка UART для новичков

Не увидел я на сайте статей для новичков по настройке и работе с UART на STM8L, поэтому решил восполнить этот недостаток. Сейчас я расскажу как просто и быстро его настроить.
В качестве отладочной платы с этим микропроцессором я буду использовать STM8L-Discovery, в которой есть свой отладчик ST-Link. Среду для программирования будем использовать IAR.


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

Датчик давления BMP085

BMP085
Датчик давления BMP085 является довольно таки точным и одновременно не сложным в использовании. Был разработан товарищами из Bosch и общается, как и подобает подобного рода датчикам, по каналу I2C. Помимо давления он так же выдает температуру с точностью до десятой доли градуса. Всю остальную информацию о нем вы можете посмотреть в даташите, который без особого труда сможете найти в интернетах.


Читать дальше
  • +6
  • 01 февраля 2014, 11:17
  • ftp27

8L-Курс, Часть 5 - Таймеры: начало

← Часть 4 — Тактирование Содержание Часть 6 — Таймеры, внешние каналы →

Таймеры — один из самых важных элементов МК. Ни одна более-менее сложная программа не обходится без них. Все, что так или иначе связано с временными интервалами или подсчетом каких-нибудь событий, реализуется на таймерах.

В STM8L есть несколько таймеров разной сложности. Их можно поделить на три группы:
TIM1 — Это самый сложный и функциональный таймер. 16и разрядный счетчик (максимальное значение — 65535), предделитель, принимающий любые значения от 1 до 65536. Три внешних канала с комплементарными выводами для каждого… и прочие плюшки.
TIM2, TIM3, TIM5(последнего в нашем МК нет) — Чуть по-проще. Внешних каналов всего два. Делитель принимает уже не любое значение, а только степени двойки в диапазоне от 1 до 128. Счетчик по-прежнему 16и разрядный.
TIM4 — Самый простой. 8и разрядный счетчик, делитель — (тоже степени двойки) от 1 до 32768. Внешних каналов нету.

Вот сводная табличка из reference manual, которая рассказывает о характеристиках всех таймеров:


Начнем с TIM1. Он конечно сложнее, чем все остальные, но зато после него работа с другими таймерами не будет вызывать непоняток.


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

8L-Курс, Часть 4 - Тактирование

← Часть 3 — Прерывания Содержание Часть 5 — Таймеры, начало →

Раньше мы как-то не задумывались над тем, на какой частоте работает МК и от чего тактируется — работает и славно. Задержки выбирали на глаз, не зная о тактовой частоте. Пора положить этому конец и разобраться с организацией тактирования в STM8.


Читать дальше
  • +13
  • 21 февраля 2013, 17:03
  • dcoder
  • 1

Пруф оф концепт - прием и передача ИК сигнала одним светодиодом

Just for fun...

Решил сделать девайс, записывающий сигналы с ПДУ (от ТВ, DVD, кофеварок… :)), а затем воспроизводящий их. Вообще ничего необычного в этом нету, но возможно кому-то понравится решение: устройство состоит из МК (STM8L), резистора и ИК-диода… ну и питание еще :) А никаких дополнительных фильтров и усилителей нету.

Сия заметка исключительно «proof of concept» и код который я к ней прицепил не умеет ничего кроме записи и воспроизведения одной команды. Но функционал легко можно расширить.


Читать дальше
  • +17
  • 13 февраля 2013, 21:23
  • dcoder
  • 1

8L-Курс, Часть 3 - Прерывания, EXTI

← Часть 2 — GPIO Содержание Часть 4 — Тактирование →

Мы уже умеем работать с GPIO. Выставлять нужные уровни и читать состояния ножек, настроенных на вход. Но что, если нужно не просто прочитать состояние ножки, а быстро отреагировать на смену уровня? А если таких ножек несколько? Тут нам на помощь приходит система внешних прерываний — EXTI (EXTernal Interrupts). Она довольно гибко настраивается и позволяет получить прерывание с любой ножки МК, что дико удобно — не нужно подстраивать разводку платы под пару специальных ножек INT, как это было в большинстве AVR.


Читать дальше
  • +11
  • 09 февраля 2013, 14:35
  • dcoder
  • 1

Прикручиваем к часам на OSA энергосбережение

После публикации статьи про часы из STM8L-Discovery, под управлением OSA, у некоторых читателей возникли вопросы по поводу потребления энергии. Нелогичными эти вопросы считать нельзя, так как серия STM8L является низкопотребляющей. Про попытки снизить энергопотребление часов и мой вариант сопряжение режима Active halt с ОСРВ под катом.


Читать дальше
  • +4
  • 28 января 2013, 16:25
  • ARMag
  • 1

Часы на STM8L-Discovery и OSA

Данная статья — результат моих попыток поработать с кооперативной RTOS OSA на STM8L.
Так как просто мигать светодиодом под ОСью уж совсем примитив, неоднократно описанный в интернетах, для себя я решил начинать знакомство с OSA на проекте, более-менее приближенном к реальности. Первое, что пришло в голову, так сказать, в лучших традициях DIY — запилить часы. Тем более все необходимое на STM8L-Discovery есть — RTC с часовым кварцем, LCD и даже кнопка! Статья будет полезна тем, кто решит опробовать свои силы в освоении OSA или просто хочет переделать Discovery на часы :)
Подробности под катом...


Читать дальше
  • +5
  • 24 января 2013, 15:39
  • ARMag
  • 1

8L-Курс, Часть 2 - GPIO

← Часть 1 — Hello светодиод! Содержание Часть 3 — Прерывания →
В прошлой части мы запустили мигалку светодиодом. Теперь пришла пора разобраться с тем, как она работает и как устроен модуль GPIO в STM8.



Читать дальше
  • +4
  • 16 декабря 2012, 18:34
  • dcoder
  • 1