Микроконтроллеры STM8. Вступление.

Микроконтроллеры STM8. Вступление.

Здравствуйте,
Сегодня я хотел бы начать цикл статей про достаточно новое и перспективное семейство микроконтроллеров STM8. На сегодняшний день русскоязычной информации по данному семейству присутствует не так уж много, но мы, общими усилиями всего комьюнити we.easyelectronics.ru постараемся восполнить этот пробел.
ST Logo
Итак, первые микроконтроллеры STM8 были выпущены фирмой STMicroelectronics на замену семейства ST7 в начале 2008 года. При этом декларировалось шестикратное увеличение производительности по сравнению с предыдущим семейством. Основной упор делался на высокую надежность кристаллов, их защищенность от статического напряжения. При этом подразумевалось их применение в первую очередь в автомобильной промышленности, а также в задачах, которые требуют высокую надежность при низком энергопотреблении. Где-то в средине 2010 года эти контроллеры появились в широкой продаже и у нас, и заставили обратить на себя внимание своей ценой, широкой линейкой и совершенно нереальными ценами на продукцию фирмы Atmel. Посмотрим поближе, что же нам предлагает STMicroelectronics.
Общий обзор архитектуры.
Итак, ядро построено по Гарвардской архитектуре, то есть адресное пространство команд и данных разделено, но это разделение внутреннее. Для программиста же процессор является фон Неймановским и позволяет использовать единое адресное пространство. Максимальная частота ядра – до 24 МГц у старших моделей. Размер флэш-памяти — от 4 до 128 Кб, размер SRAM – от 1 до 6 Кб.
Ядро и периферия микроконтроллера работают на напряжении питания 1,8 В, питание же самого контроллера зависит от серии. Семейство STM8 делится на три подсемейства:
— STM8L – семейство микроконтроллеров с низким потреблением для устройств с батарейным питанием. Диапазон напряжения питания от 1.65 до 3.6 В.
— STM8S – микроконтроллеры общего назначения. Диапазон напряжения питания от 2,95 до 5,5 В.
— STM8A – высоконадежные микроконтроллеры.
В дальнейшем мы будем ориентироваться на контроллеры общего применения как самые распространенные и недорогие.
Начинка в STM8 в принципе соответствует тому, что есть в AVRках, PICах, поэтому тем, кто освоил программирование под эти платформы, перейти на STM8 при желании не составит особого труда. Для примера возьмем микросхему STM8S105С6T6C.
Расшифровуется код микросхемы следующим образом:
STM8S – семейство STM8S.
Следующие три цифры:
103, 903 — low-density devices.
105 – medium density devices.
207, 208 – high density devices. 208 серия отличается от 207 наличием аппаратного CAN.
Буква говорит нам о количестве выводов корпуса. K – 32;S – 44;C – 48;R – 64;M – 80.
Дальше указан объем Flash-памяти программ:
3 – 8 Кбайт;
4 — 16 Кбайт;
6 — 32 Кбайта;
8 — 64 Кбайта;
B – 128 Кбайт.
Тип корпуса: T – LQFP, B – SDPI, U – VFQFPN.
Рабочий температурный диапазон: 6 — -40...+85 °C; 3 – -40...+125 °C.
И в конце указывается шаг выводов: если буквы нет – шаг выводов — 0,5 мм., буква B – 0,65 мм., буква C – 0,8 мм.
Соответственно, в нашем примере зашифрован микроконтроллер STM8, семейства S, относящийся к medium density devices, в LQFP корпусе с 48 выводами, у которого на борту 32 килобайта Flash-памяти, с диапазоном рабочих температур -40...+85 °C и шагом выводов 0,8 мм.
Что же в нем есть из периферии? Для этого заходим сюда, читаем, смотрим на блок-схему и видим что там внутри:
STM8 Schema
— внутренний подстраиваемый RC-генератор на 16 МГц;
— внутренний низкоскоростной, малопотребляющий RC-генератор 128 КГц;
— система обеспечения безопасности источника тактового сигнала;
— контроллер прерываний;
— два 16-битных таймера общего назначения;
— один 16-битный специальный таймер;
— два сторожевых таймера;
— 10-битный АЦП;
— интерфейсы – UART, SPI, I2C;
— 38 линий ввода-вывода, 16 из них имеют повышенную нагрузочную способность.
По-моему, неплохо. Особенно впечатляет гибкая система тактирования и возможность тонко настраивать прерывания. Еще есть встроенный модуль управления динамиком-пищалкой, который можно также использовать в качестве генератора частоты около 1КГц. Зачем он там – вопрос к разработчикам.
Средства разработки и отладки.
На данный момент для разработки и отладки программного обеспечения для STM8 существует четыре среды: ST Toolset от STMicroelectronics, Ride7 от Raisonance, CXSTM8 от Cosmic software, IAR Embedded Workbench от IAR Systems. Честно говоря, лично я долго не решался и выбрал IAR просто потому, что имею в нем опыт работы. Соответственно, все дальнейшие статьи будут идти с примерами в IAR. Если у кого-то будет желание портировать примеры под другие среды – милости просим.
Текущей версией IAR является 1.20, и у нас есть два варианта – Kickstart, с ограничением в 8 Кб кода, и 30-дневная пробная версия. Для скачивания необходимо пройти несложную процедуру регистрации, после чего вам выдадут ссылку и вышлют письмо с ключом на e-mail. Регистрация и установка интуитивно понятна, поэтому на этом этапе мы подробно останавливаться не будем.

Сравнение с AVR.
Ну и самый главный вопрос – стоит ли овчинка выделки? Есть ли смысл изучать STM8 если есть Atmel AVR? Итак, посмотрим какие преимущества и недостатки у STM8 по сравнению с AVR.
Преимущества:
— заявлена повышенная надежность и защита от статики. У AVR такого нет.
— гибкая система тактирования и отсутствие fuse-битов. Наболевшие вещи, особенно для начинающих. Огромный плюс.
— совместимость в пределах семейства. Заявлено, что периферийные модули практически не отличаются друг от друга в разных моделях, что облегчает портируемость.
— более низкая или сопоставимая по сравнению с AVR стоимость. После прошлогодних проблем с поставкой контроллеров Atmel не совсем внушает доверие в будущем.
— наличие единого адресного пространства для кода и данных.
— более навороченные, на мой взгляд, периферийные устройства.
— наличие родной библиотеки firmware library.
— наличие бюджетных отладочных плат Discovery.
— низкая стоимость программатора ST-Link.
— тактовая частота 16МГц во всём диапазоне питающих напряжений будь то STM8L или STM8S
— наличие PVD на STM8L — программируемый детектор напряжений

Недостатки:
— малая распространенность.
— малое количество литературы.
— ограниченное количество сред разработки.
— отсутствие моделей с количеством выводов меньше чем 20.
— сложности с созданием программаторов «на коленке». Аналога «пяти проводов» или программатора Громова для STM8 нет.
— отсутствует аналоговый компаратор (в некоторых моделях присутствует аналоговый компаратор COMP2)
На основе этого сравнения можно сделать вывод, что контроллеры STM8 как минимум не хуже аналогичных решений от Atmel, и основное, что сдерживает их широкое продвижении в массы – это отсутствие информации для разработчиков. Но это, по-видимому, всего лишь вопрос времени.

На сегодня всё, а в следующей статье мы рассмотрим отладочную плату STM8S-Discovery и создадим первый проект.

Ссылки:
Раздел сайта STM, посвященный STM8
Reference manual для STM8S и STM8A
Даташит на семейство STM8S105xx
Firmware library
IAR для STM8

Комментарии (42)

RSS свернуть / развернуть
Мне в smt8 понравилось, что есть плата за 300 рублей — stm8-discovery со встроенным отладчиком, который можно затем подключать к своей схеме, причем для отладки достаточно 3 проводов. Для AVR дешевый или простой в изготовлении отладчик мне не попадался.
Недостатком показалось то, как разбросаны выводы портов.
Начинающим советую обратить внимание, что некоторые выводы могут быть с открытым стоком.
Что не понравилось в IAR для STM8 — нет функций _delay_, которых иногда очень не хватает.
+1
Для авр дешевый отладчик это JTAGICE в минимальном раскладе обойдется в 150р. Но он не для всех МК.

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

for(i=1;1<10000;i++)
{
}

уже не актуален чтоль?
0
опечатка враг! -> бесконечный цикл
0
ой точно опчетался
for(i=1;i<10000;i++)
конечно.
0
Delay это и есть циклы в 99% случаев. Бывают и заморочки с таймерами, но это скорее экзотика или для больших и точных задержек.
0
Вот именно такой цикл я и написал, правда, nop туда воткнул. Но в wingcc, как я заметил, функция задержки содержит в себе цикл на ассемблере, видимо для повышения точности.
0
Спасибо. Добавил.
0
Надо в + добавить
— 16МГц во всём диапазоне питающих напряжений будь то STM8L или STM8S
— компаратор COMP2 — аналоговый (на STM8L15x на второй вход можно даже выход с DAC подать)
— PVD на STM8L — программируемый детектор напряжений

итого берём STM8L15x — питаем от двух аккумуляторов АА(ААА)
PVD следит за напряжением этих аккумуляторов
и всё это может быть на максимальной частоте 16МГц
0
Не туда ответил) Все никак не привыкну.
0
Вот только с компиляторами всё-таки пока для STM8 туго. Нет порта ГЦЦ для этого семейства. Единственный адекватный вариант это — IAR, остальное так себе.
0
А Космик лажа?
0
Не знаю, не пробовал. Но С++ там нет :)
0
а еще на STM8L есть DMA.
0
а gcc и средств отладки под Linux для них так и не сделали еще? это вот самое грустное, а так камни вкусные довольно
0
Боюсь еще долго не сделают.
0
а что по-твоему больше мешает — сложность реализации или относительно слабая востребованность?
0
Бесплатность и опенсорц. Компилятор весьма сложная штука и выдавать свой продукт всем подряд да нахаляву дураков нет. А покупать софт под линухом как то не принято :)
0
Дык дело не только в линуксе. Под AVR, ARM, MSP430 и кучу чего еще порты gcc есть, как линуксовые, так и виндовые. Причем под ARM как arm-none-* для сборки самого линукса, так и arm-linux-* для сборки приложений под ARM-Linux. Я вот сейчас как раз ковыряю Cortex-M3 и ChibiOS/RT — тулчейн собирал из исходников: gcc-linaro, binutils, newlib, gdb, openocd
0
Ну это видать уже энтузиасты сделали. Когда нибудь и под STM8 будет. Но вот производитель меньше всего парится на счет этого — ему на линух сообщество пох. Лишняя трата ресурсов только.
0
Стереотипное мышление это плохо… Не всегда пользователи линукс == халявщики. Но к сожалению не все производители ПО это понимают, а бОльшая часть линуксоидов этот стереотип лишь утверждает
0
Кстати о платности, для ARM есть, например, Codesourcery G++, основанный на gcc и eclipse, и он платный. Вроде отличается от собранного ручками только какой-то спецовой сборкой Eclipse. Есть бесплатная версия, которая соержит только компилятор без среды разработки
0
прояснил некоторые моменты

STM8L101
— нет ADC и PVD
— COMP1 и COMP2 имеют на "+" до 4 i/o на каждый
на "-" GND или i/o (но "-" общий для обеих компараторов)
STM8L15x
— есть и ADC и PVD и DAC
— COMP1 — логический
— COMP2 — на "-" можно подать вход i/o или выход DAC или с внутреннего резестивного делителя

STM8S
— ADC — есть
— PVD — нет
— компараторов нет совсем
0
Поэтому мне больше поравились STM8L151K6 (LQFP32) по 45 рублей куил десяток, две уже ушли в девайсы.
0
Был у меня в арсенале STM8S-Doscovery.
Програматор в STM8S-Doscovery был благополучно спален при коротком замыкании на 24В (питание для шаговиков).

После куплена STM8L-Discovery. И тут без КЗ не обошлось — вылетел диод D2 (BAT60JFILM). На его место был поставлен аналогичный по размерам из имеющихся — 1N4148WS. Тот при случавйном КЗ (+3V3/GND) полетел еще быстрее.
На место D2(STM8L-Discovery) поставлен выпаянный из какого-то жесткого диска SMD-предохранитель.
Чисто ради эксперимента были замкнуты выводы питания +3V3/GND — предохранитель исправен. Замыкание +5V/GND — предохранителю кранты.

Тут терпение лопнуло, и на место D2 примостился самовосстанавливающийся предохранитель RXEF025 (Ic=0.25A, Umax=70V, Imax=40A) (http://kosmodrom.com.ua/table.php?name=ruefrxefntc&page=0). Преимущество решения — защита USB-порта от перегрузки по току (от маловероятных, но возможных 24..36V/1,5A). Очередное принудительное замыкание +5V/GND — сброс МК и всё работает дальше.

Различие STM8S-Discovery и STM8L-Discovery — в последнем хоть какая-то защита по линии питания от КЗ (диод шоттки, Umax=10V, Imax=3A).

Рекомендую в STM8S-Discovery сразу после покупки добавить защиту от КЗ в цепях питания как минимум между частью с програматором и частью с STM8S105C6 — будет хоть какая-то защита для програматора.
0
  • avatar
  • Rita
  • 15 апреля 2011, 20:47
На очереди — предохранители на дорожки к выводам +3V3 и +5V в STM8L-Discovery. Благо там дорожки к выводам питания толстые и достаточно длинные, чтобы впаять диоды шоттки/предохранители.
0
Ссылка на IAR неправильная.
0
SDCC для stm8 уже неплох, ещё не официально, но работает.
0
Ну вот, наступило счастье на улице любителей stm8 )
0
Осталось к нему отладку прикрутить, тогда точно будет круть =D Но бесплатно компилировать уже можно
0
А еще что-то опенсорсное для STM8 есть? Кажется, пилили бэкэнд для LLVM.
0
Я больше ничего достойного не знаю. Видел ещё пару компиляторов, но они настолько сырые и не развивающиеся, что даже си не целиком поддерживают, фиг что соберёшь.

Для LLVM как-то новостей за последние два года нема, то ли заглохло, то на не афишируется…

Бранч SDCC с бэкендом stm8 до последнего времени тоже как-то был не лучше иного самопала, пока его не влили в основной репозиторий в июне сего года.
0
Вот на сколько я знаю sdcc для stm8 разработчиком не поддерживается. Он еще с год назад сказал, что: st7 я довожу до ума, а stm8 оставляю в том виде, в котором оно есть.
Разве что действительно с июня начали его пилить и можно на что-то расчитывать.
0
Да, тот, кто начал сие дело, всё давным-давно забросил. Его наработки перенесли в основную репу, которая на sdcc.sourceforge.net/.
0
Как легко было портировать компилятор Си на новую платформу на заре становления этого языка. Компилятор преобразовывал код на Си в команды некоего абстрактного asm, оставалось только прописать файл(HAL) отображения этих абстрактных команд в команды asm конкретного CPU. Дубово и брутально, не оптимизированно — но это работало.
0
В идеале же и сейчас так =) LLVM, gcc, sdcc — там тоже же идёт компиляция в промежуточный код, который потом переводится на нужный.

Другое дело, что я не смог так просто въехать, как свой генератор кода (backend) к ним писать. Вроде, и информация есть, но там столько всего, что непонятно, откуда начинать.
0
А TCC не смотрел? У него вроде довольно компактные кодогенераторы, килобайт 30 текста (сейчас есть x86, ARM, какой-то из TMS320). Правда, оптимизирует он паршиво.
0
Смотрел, но там тоже как-то не очень прозрачно всё происходит. Да и код плотненький, и комментариев не очень
0
Да, даже прерывания вроде работают =). Вон ребята уже даже скомпилили OggStreamer на STM8 c помощью SDCC
0
Да, я в курсе =)

Единственное, чего не хватает — отладки.Я так и не понял, можно ли как-то получить elf с символами, чтоб их стшному gdb.
0
Вон ребята уже даже скомпилили OggStreamer на STM8
А что это за зверь?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.