Обзор stm8
Когда я выбирал контроллер для очередной поделки, я наткнулся на резкий дефицит разного рода AVR’ок. Я начал искать, чем их заменить, и нашел stm8.
stm8 – это относительно новое семейство микроконтроллеров от компании STMicroelectronics. В нем воплощено чуть ли не все, чего можно ожидать от 8 битных чипов. Конечно-же, у каждого контроллера есть свои плюсы и свои минусы.
Плюсы и минусы
Естественно, плюсы и минусы я оцениваю по применимости в моих проектах, для вас они могут отличаться в ту или иную сторону. Я буду сравнивать с AVR, потому, как на них многие уже скушали небольшую собачку.
Плюсы:
-
Цена. Не смотря на мало распространенность, stm8 стоит по три копейки за ведро.
-
Еще одна цена. Отладочные платы и отладчики стоят копейки. Можно забыть про всю ту ораву самопальных программаторов, что расплодились для AVR’ов. Также, можно забыть про программаторы без отладчиков – за минимальные деньги все включено.
-
У stm8 в отличии от AVR нет фьюзов. И это меня очень радует. Теперь вся программа действительно содержится в одном hex файле. Ну согласитесь, фьюзы в AVR– чистейшее зло!
-
Есть очень дешевые контроллеры с 12-битными АЦП и ЦАПами, и это – очень хорошо!
-
Классный отладочный интерфейс. Задумка об отладке по одному проводу у AVR была хороша, но чтобы ее включить, приходилось подключать еще три. В итоге, JTAG был не намного хуже пресловутого debugWire. ST довела идею до логического завершения. Отладка по двум проводам. Супер!
-
Работает от пяти вольт. Не знаю, можно ли это назвать достоинством в нынешнем мире, но олдфагам это точно понравится.
-
Встроенный bootloader. Умеет загружать программы по uart, spi, can, i2c.
-
На халяву дается библиотека драйверов периферии.
Недостатки:
-
Нет контроллеров в маловыводных корпусах (типа so8).
-
Нет контроллеров с USB. ST предлагает пересаживаться на ее кортексы, если нужен USB.
-
Не слишком пока распространены. Соответственно, и доставать сложно, и цены выше, чем могли бы быть.
Семейства
Существует 3 семейства stm8.
-
stm8s – “стандартные” контроллеры общего применения, обычно 10 битная аналоговая периферия, среднее по современным стандартам энергопотребление. Диапазон питания – 2.95 – 5.5в
-
stm8l – “low-power” контроллеры с низким потреблением, 12 битный аналог, улученная электромагнитная совместимость. Диапазон питания – 1.8-3.6в. По сравнению со стандартными контроллерами, тут добавляется небольшая кучка периферии, в частности, DMA.
-
stm8a – “автомобильные” – все сосредоточено на безопасности и CAN’е. Котроллеры выдерживают больше издевательств над ножками, чем обычные, работают при 145 градусах, Диапазон питания – 2.95 – 5.5в
Названия
Без лишних слов:
Структура документации
В принципе, всего кроме этого раздела можно было и не писать. Документация у ST довольно неплохая. Главное знать, что и где искать. (Примеры будут для контроллера, который валяется у меня прямо сейчас на столе — stm8l152c4)
Заходим на страничку интересующего вас контроллера. (вот тут https://www.st.com/mcu/ выбираем нужное семейство и контроллер, к примеру, stm8l152c4).
В отличии от Atmel’a, дядьки из ST поступили умнее, и разбили документацию на несколько частей. В даташите они приводят только отличие конкретного контроллера от всей остальной линейки. В даташите нужно искать электрические параметры, размер памяти, список периферии.
Немного ниже есть reference manual – это документация на всю линейку. Тут описывается переферия и регистры. Вообщем то, что нужно нормальному сишнику для программирования.
Если полистать ниже, то можно наткнуться на Errata sheet. Ошибок много, но серьезных практически нет.
Если ты – сумасшедший ассемблерщик (С), и этого тебе не хватило, то, в разделе Programming Manual, можно найти документ STM8 CPU programming manual. Это — описание самого ядра, набора инструкций, их таймингов, итп.
Библиотека
ST сделала такую штуку, которая называется STM8x Firmware library. Это – суть фрэймворк для микроконтроллеров.
Давайте, к примеру, запустим АЦП
Красиво, не правда ли? Конечно, скорость работы с использованием такого “фрэймворка” будет ниже, чем без, но, как завещал Кнут – “premature optimization is the root of all evil”. Если будет совсем медленно, функции библиотеки всегда можно подменить своими.
Такая библиотека позволяет не только поднять скорость разработки, но и облегчает миграцию между процессорами.
Документация на библиотеку, хоть и doxygen’овская, но довольно хороша!
Средства отладки
Как я и обещал, тут все очень хорошо. Есть два основных средства
-
stm8s-discovery. Стоит 10$ + жадность продавца. Включает в себя полноценный программатор и небольшую отладочную плату. Стоимость деталей программатора в Киеве намного больше 10$, поэтому разнообразные самопальные программаторы сразу отпадают. Я купил себе такую и не жалею. Намного более стоящее приобретение, чем тот-же avr dragon.
Кстати! Отладчик построен на контроллере STM32F103C8T6. На отладочной плате разведен JTAG, и, поэтому, ее можно использовать как отладочную для stm32. Прошивка потеряется, но, учитывая, что весь discovery стоит как один STM32F103C8T6, можно на это забить. Зато есть USB, внешние проводки, светодиоды. Вообщем, discovery — мегавещь.
-
st-link стоит побольше, чем stm8-discovery, зато программирует все, что выпускает stm, включая stm32. St-link может стать очень хорошей покупкой, если у вас нет arm-программатора.
Компиляторы
- Первое, и главное для меня, IAR выпускает компилятор для stm8. Бесплатный умеет до 8 кбайт или до 30 дней. Ходят слухи, что плохие люди его взламывают. Наверняка, это только слухи 🙂
- Собственно, сама ST выпускает среду ST Visual Develop, в которой можно заюзать компилятор от Raisonance (ограничение — 16к) или Cosmic software (ограничение — 32k)
Так как я уже использовал IAR для других архитектур, я даже и не смотрел в сторону пункта 2.
Краткое описание
Давайте краткой пройдемся по любопытным аспектам stm8.
Ядро.
Это 8-битное CISC ядро. Почему не RISC? Как я понимаю, это было сделано для того, чтобы как можно сильнее ужать инструкции. Чего только стоит команда деления 16 на 16 бит, которая, правда, исполняется 16 тактов.
Набор регистров очень похож на семейство 6800 Моторолы. По сравнению с AVR регистров очень мало вот они:
Уже кажется, что stm8 хуже AVR? А вот и нифига! Stm8 умеет обращаться к памяти с такой-же скоростью, как AVR к регистрам! Вот это мне очень нравится! И это, как по мне, очень большой плюс архитектуры.
Платой за такую гибкость адресации является трехступенчатый конвейер, в отличии от двухступенчатого у AVR. А это, в свою очередь, значит, что любые инструкции перехода будут исполнятся за 2-3 цикла вместо 1-2 у AVR.
На аппаратном уровне реализован самый используемый в си режим адресации – указатель стека+смещение. К примеру, вот такая адская инструкция:
ADD A,($12,SP)
Складывает содержимое памяти по адресу (указатель стека + 0x12) с регистром A. И делает она это все за один такт. Это – серьезный шаг по оптимизации контроллера под си-программы.
Еще очень крутая особенность – это способ входа в прерывание. Существует несколько наборов регистров – для основной программы, и для каждого уровня прерываний. Эти наборы процессор сам переключает при срабатывании прерывания. Итог – экономия 18 тактов на прерывание и 9 байт стека. Правда, почему-то, эта фишка реализована не у всех контроллеров.
Ребята из stm сразу поняли, что с 8 битным адресным пространством сейчас ловить нечего, и подняли количество бит аж до 24. В итоге, можно адресовать до 16мегабайт пространства без каких-либо заморочек.
Хоть stm8 и обладает гарвардской архитектурой, данные и код размещаются в одном пространстве, что, в отличии от AVR, позволяет подгружать код с какого нибуть внешнего источника.
По драйстоуну скорость stm8 на 10% выше, чем у AVR при той-же частоте. Максимальная частота в линейке на 20% выше, чем у мег с тиньками. В итоге, производительность, в пределе, может на 30% превышать производительность AVR.
Тактирование.
В отличии от AVR, где тактирование жестко прошивается фьюзами, у stm8 скорость можно менять в процессе работы. В низкожрущих применениях это бывает нужно. Притом, при сбое генератора, контроллер переключется на RC и выпадает в прерывание. В итоге, система не останется без управления.
Вообще, во всем stm8 прослеживается повышенные требования к электромагнитной совместимости и надежности. Явно целили на военку, промышленность и автомобили.
Низкое потребление.
Ну, это не совсем модуль, но все равно, потреблению тут уделено много внимания, и организована очень, как по мне, офигительная штука. Суть ее в том, что есть специальный таймер, который периодически пробуждает процессор из тотальной спячки. Таймер, естественно, сделан так, чтобы кушать поменьше.
Чтобы вы долго не искали, типичное потребление:
(семейство STM8S, при 3.3в питании)
Проц полностью работает, тактирование от кварца | 450uA/mHz |
Wait (все работает, кроме ядра), кварц 16МГц | 1.75mA |
Active-Halt (все выключено, кроме переодического таймера, тактирующегося от, RC 128kHz) | 10uA |
Halt (Выключено вообще все) | 4.5uA |
(семейство STM8L, при 3.3в питании)
Проц полностью работает, тактирование от RC, 16МГц | 195 uA/MHz+440?A |
Low power run (проц работает из оперативки на 128kHz, флэш отключена) | 5.1 uA |
Low power wait (тоже, что выше, но выключен и процессор, заметьте, периферия работает, но ее потребление не учтено) | 3.0 uA |
Wait (все работает, кроме ядра), кварц 16МГц | 1.00mA |
Halt (Выключено вообще все) | 350 nA |
Как видно, у семейства stm8l значительно лучше с потреблением, чем у stm8s
Контроллер биппера.
Я так понимаю, что эту штуку они тупо для поржать сделали 🙂 Специальная периферия, которая выдает меандр выбираемой из ряда 1-2-4кГц частоты для пищалки. Зачет!
Остальное.
Естественно, это не все. Есть еще куча стандартных интерфейсов – UART’ы, SPI’и, I2C, CAN, итп.
Есть EEPROM, таймера, три типа вочдогов, ну, и куча другой приятности.
STM8S-Discovery + IAR
Небольшой ролик о том, как выглядит отладка в этой связке. Для того, чтобы рассмотреть буквы, смотреть лучше в 720p.
Видушников с самой платкой не будет, фотик снимает слишком ужасно. Если вдруг (ну, а вдруг!), вы хотите исправить ситуацию, всегда можно скинутся. 🙂
Заключение
Вот, собственно, и все, что я имел рассказать. Я не вижу особого смысла плодить еще одни курс типа “AVR для новичков”, только о stm8.
Процессоричик приятный. Как по мне, даже приятнее того-же AVR. Главные недостатки – отсутствие мелких корпусов и маленькая популярность, надеюсь, скоро решатся. Останутся одни достоинства.
Дык что, решил всетаки пересаживаться на stm? или как получится:)
Скорее, как получится. К сожалению, пока нету доступных мелких корпусов. Но, я верю в STM. ))
> отсутствие мелких корпусов
А я вот уже прикупил и буду пользоваться STM8S103F3P6. Специально посчитал площадь, занимаемую им и ATTINY13A-SU у меня получилась строго ОДИНАКОВАЯ.
По цене разница в два раза НЕ В ПОЛЬЗУ Атмела, а по возможностям — вообще не сравнимы.
>Процессоричик приятный. Как по мне, даже приятнее того-же AVR
Это точно. Сам пользуюсь AVR начиная с 90S1200, но Атмеловские катаклизмы начали потихоньку доставать. То заменят 8515 на более лучший 8535 с ДРУГОЙ распиновкой, то ждать после анонса МЕГУ с CAN два года (так и невозможно купить и сейчас в небольшом кол-ве), то проблемы с поставками…
>у меня получилась строго ОДИНАКОВАЯ
Площадь то одинаковая, но паять SSOP таки неудобно на самопальные платы
А вообще, STM8S103F3 — это скорее замена атмегам разным, чем attiny13 ))
Если уж я и перейду на какие то другие контроллеры, то наверное это будут кортексы 🙂 Кстати тоже не дорогие но зато 32 бита !!
Да, я на кортексы давно уже перелез. Но у stm8 есть несколько преимуществ — они дешевые, маленькие, и низкожрущие. По низкожрущести с ними из кортексов можнт потягаться разве что lpc11xx, но их в паябельных корпусах фиг пока найдешь. Только qfn33.
У stm8 есть корпуса как у атмела с шагом 0.8, что резко легче паяется в любительских условиях, чем 0.5. Кортексы в таких лафовых корпусах я не видел (ну, если не брать в расчет выбрыки люминари), а заказывать платы для любительских поделок — не кошерно, зачем я тратился на резист? )
В любом случае, аврки отмирают потихоньку.
//В любом случае, аврки отмирают потихоньку.
Ну как сказать — STM хорошая контора и впринципе я им доверяю. Но АВРкам уже сколько лет? Кроме того атмел не зря заслужил популярность и думаю что говорить что АВРки отмирают — еще рановато.
Подобная ситуация происходит сейчас с 51-ой серией — вроде бы им уже сто лет в обед, однако их пользуют и очень успешно. Причем не только любители ))
Еще пример из жизни — я сейчас дулаю устройство на АРМ9. Сперва был 91SAM9260 от Атмел… он меня кое-чем не устроил в практической реализации — заменили на winbound NUC950 — плату я развел и вроде нормально все, но я побаиваюсь — винбонд детище китайцев и чего от него ждать я пока не знаю.
>Но АВРкам уже сколько лет?
Я не буду спорить, что аврки будут держаться по инерции. Просто в новых проектах они мало оправданы.
>Сперва был 91SAM9260 от Атмел
Ну ведь и правильно сделали. Атмел не достать сейчас. Я понимаю, что у них есть и поважнее дела, но нельзя ведь так к клиентам относиться.
>винбонд детище китайцев
Ну, про винбонд ничего не знаю, но врядли кто-то в своем уме поступит с клиентами как атмел.
>Ну ведь и правильно сделали. Атмел не достать сейчас. Я понимаю, что у них есть и поважнее дела, но нельзя ведь так к клиентам относиться.
Это случайность — совпадение, замена была выполнена из-за несовршенства чипа по отношению к другому.
Вопрос наверное в том что у Атмела как я понял проблемы с производством — они на сторонних заводах размещают заказы — а там все занято.
Опять же — насчет недостать — в Элитане вроде есть и Тинька 2313 и SАМ9260…
Весь флуд по теме неполиткорректности атмела переписывать не хочеся. Можешь ознакомится тут
https://electronix.ru/forum/index.php?showtopic=77282&st=0&start=0
и тут
https://electronix.ru/forum/index.php?showtopic=81195&st=0&start=0
Какие процы ты сам используешь (долгое время), как замена Atmel 8-bit чипов. Надо уже мне переходить но не знаю на каких остановится. С софтом вроде проблем не должно быть т.к. пишу на IAR (код можно портировать), а вот с железом (процами) непонятно, на некоторых форумах говорят уже как замена об ARM чипах (но это вроде черезчур). В принципе здесь стоит также вопрос об живучести и поддержке выбранных новых процов на рынке эл. компонентов.
>Какие процы ты сам используешь (долгое время)
Сам я использую все подряд, в основном зависит от задачи. В последнее время больше всего программирую под LPC17xx но это — черезчур для домашних поделок.
Еще очень приятны msp430, но они дорогие. С микрочипом у меня не сложилось — тормознутые они и тоже дорогие, из приличного остались stm8.
Откровенно паршивых процессоров в последнее время я не видел, так что от задачи все зависит. Мне stm8 очень понравились, и для любительских поделок они вполне подходят.
Не совсем понятно.. В журнале «Новости электроники» №6 от 2010 г. на стр. 8 (https://stc.ucoz.ua/_ld/0/25_NE_6_2010.pdf) написано, что в STM8-DISCOVERY, верхняя часть с USB-разъемом это и есть ST-LINK. Так какой тогда смысл покупать ST-LINK на фотке ниже?
Они правы, это и есть st-link, но обрезанный. Там нет выводов под арм (хотя, прошивка — та-же. Если подпаяться к ножкам контроллера, то можно и армы программить) и нет преобразователя уровней.
В принципе, для большинства применений отсутствие преобразователя уровней на так уж и страшно, но бывают случаи, когда напряжение питания плавает (у меня такой проект недавно был), или какое-то нестандартное, типа 2.8В, тогда платка от discovery работать не сможет.
Спасибо за небольшой обзорчик :), а не подскажете можно ли ST-Link-ом от STM32Discovery программировать STM8S103 ?
Не пробовал. В принципе, линки там одинаковые, просто нужно вывести нужные провода.
По идее да, а прошивки линков не отличаются?
Я исследования не проводил, но думаю — нет. ST-LINK сделан на этом-же контроллере и тоже обнаруживается как диск и умеет программить и то и то.
Не получаеться залить прогу и отладить=(( В STVD + Resonans всё отлично работало, скачал ИАР 30-идневку, после нажатия «загрузить и отладить», загораеться красный светодиод на STM8S-DISCOVERY и выдает такие вот ошибки:
1. An error occurred while retrieving GDI features: gdi-error [40201]: Can’t access configuration database
2. Couldn’t find STM8S105C6 in the list of supported MCUs.
3. Failed to load debugee: D:\Users\Katbert\Desktop\STMicro\STM_8\IAR_Start\Debug\Exe\Pr_1.out
Ошибок в программе нету (построение без отладки и прошивки камня нормальное)…
А сам компилятор ещё окошко выкидывает в котором написанно —
Either the debugger initialization failed, or else the file was corrupt, or of an unsupported format
А в линкере точно влючен выход для C-SPY ?
Include C-SPY debagging support?! Да, галочка стоит.
>»Нет контроллеров в маловыводных корпусах (типа so8). »
Почему нет ? А как же
STM8T141
STM8T143
Всем доброго дня!
Есть вопрос по компилятору IAR. решил я на свою голову просмотреть на что похож ассемблер STM8 ну и сравнивал что делает компилятор IAR. Так вот в ассемблере есть простая команда инкремента «INC» которая, если я правильно понял, умеет инкрементировать значение аккумулятора или любой ячейки ОЗУ. Но компилятор IAR про нее не знает или ..?
итак код:
void main(void)
{
uint8_t tst = 0;
tst++;
}
IAR превращает в
LD A,(?b1, SP)
ADD A, #?b1
LD (?b1, SP),A
причем при максимальном уровне оптимизации вместо ADD все таки появляется команда INC но остальные две никуда не деваються
LD A,(?b1, SP)
INC A
LD (?b1, SP),A
Вопрос: по какой причине компилятор IAR может так делать?
Кстати, мой быдлокод которого я так боялся
ccr = (CPU_CLK*1000)/(2*speed);
превратился в
00951F 90BE04 LDW Y, ?b4
009522 9058 SLAW Y
009524 AE07D0 LDW X, #0x07D0
009527 65 DIVW X, Y
009528 BF02 LDW ?b2, X
А вот простое выражение
I2C_CCRH_CCR = ccr >> 8;
оказалось не таким и простым 🙂
00952F BE02 LDW X, ?b2
009531 4F CLR A
009532 01 RRWA X, A
009533 9F LD A, XL
009534 A40F AND A, #0x0F
009536 88 PUSH A
009537 C6521C LD A, I2C_CCRH
00953A A4F0 AND A, #0xF0
00953C B701 LD ?b1, A
00953E 84 POP A
00953F BA01 OR A, ?b1
009541 C7521C LD I2C_CCRH, A
прошу помочь в следующей ситуации по STM8, пробую расширить рабочую область микроконтроллеров и добавить к AVR STM8, на asm, в связи с чем создал вопрос тут:
https://www.cyberforum.ru/microcontrollers/thread914231.html
прошу помочь с разбором ситуации, заранее благодарен.
не могу скомпилировать пустой проект на STVD, выдает ошибку, помогите разобраться, пожалуйста