Введение в STM8: программирование и прошивка с помощью клона ST-Link v2, версия для Linux.

разделы: STM8 , Программаторы , дата: 5 сентября 2015г.

Работая с AVR и PIC можно чувствовать себя довольно уверенно. Тут и обширная документация, множество книг, большое комьюнити, изделия в "любительских" DIP корпусах... всего этого этого в STM8 нет.

Так стоит ли связываться с этой серией микроконтроллеров? Вопрос ни разу не праздный, и ответ на него должен знать каждый, кто собирается заниматься микроконтроллерами STM8.

В статье "Восемь преимуществ STM8", на этот вопрос пробует ответить сама компания STMicroelectronics. Я же немного выжму воду и перепечатаю резюмирующую картинку:

Сразу замечу, что самые интересные камни, это A и L серия, но баловаться можно и на S-серии "общего назначения". Так что же там такого замечательного?

1) Аппаратное деление и умножение. Этих операций нет в AVR, их нет в 8-битных PIC'ах. Тему деления вообще принято обходить стороной при обсуждении AVR, что нет то нет. Да, само собой, можно реализовать программно, но давайте посмотрим соответствующий аппнот: http://www.atmel.com/Images/doc0936.pdf

имеем 255 тактов на 16-битное деление. Теперь посмотрим сколько это занимает на STM8:http://www.st.com/web/en/resource/technical/document/programming_manual/CD00161709.pdf

16 тактов на STM8, как говорится, почувствуй разницу.

Лично для меня, аппаратное умножение и деление, стало решающим фактором. Если ты делаешь робота, то там считать надо будет не просто много, а очень много, причем делать надо будет в режиме реального времени. И задержка на 255 тактов тут как бы совсем некстати.

2) Цена. Этот фактор часто приводят как аргумент в пользу STM8. Не знаю, насколько это важно для конечного пользователя, но все же.

Давайте посмотрим, так ли страшен черт, как его малюют.

Микроконтроллеры STM8 не выпускаются в DIP корпусах, в макетку их не поставишь, но тут на помощь приходит братская Китайская Народная Республика, которая поставляет в наши суровые края такие платы:


mbed STM8S103F3P6

Микроконтроллер в корпусе SO20 по сути запаянный в переходник SO20 => DIP20. Стоит такая штука н Ali около бакса, включая доставку. Разъем microUSB, как понял, только для питания. Питается плата от 3.3 Вольт. Гребенка для программатора напаяна уже мною.

Прошиваются STM8 микроконтроллеры через одно-проводной интерфейс - SWIM(Single Wire Interface Module). В качестве программатора сгодится клон ST-LINK v2:

Стоит такой в пределах двух баксов, "шьет" STM8 и STM32.

Компилятор будем использовать SDCC, и с этого начинаются сложности.

Для работы со своими микроконтроллерами, фирма STMicroelectronics предоставляет готовые исходники с различными примерами: STM8 Embedded Software


примеры программ для STM8 предоставляемые фирмой STMicroelectonics

Из этого набора, нас сейчас будет интересовать стандартная библиотека для работы с периферией STM8S/A Standard Pirepheral Library

Не спешите скачивать ее, хотя для ознакомления можно и скачать. Библиотека в текущей версии 2.2 не поддерживает SDCC компилятор. Можно писать программы и без нее, но поначалу это будет несколько тоскливо, да и опять же она своими макросами вводит подобие стандарта на синтаксис для STM8 программ. Здесь: Компилятор SDCC для STM8 в linux я нашел раннюю версию библиотеки за номером 2.1 которая еще SDCC поддерживает(если точнее, в 2.2 идет парсинг макросов на предмет соответствия тому или иному компилятору. как не трудно догадаться, SDCC среди них нет). На случай, если ссылка побьется в оригинальном посте перезалил архив на свое облако: stm8pack.zip

Скачиваем архив, распаковываем, и находим файл leds.c

$ unzip stm8pack.zip
$ cd ./stm8pack/example/
$ vim ./leds.c
#include "stm8s.h"
#include "stm8s_gpio.h"

static void delay(uint32_t t)
{
  while(t--);
}

int main( void )
{
  GPIOC->DDR |= GPIO_PIN_3 | GPIO_PIN_4;
  GPIOC->CR1 |= GPIO_PIN_3 | GPIO_PIN_4;
  GPIOC->ODR |= GPIO_PIN_3;

  while(1)
  {
    delay(20000);
    GPIOC->ODR ^= GPIO_PIN_3 | GPIO_PIN_4;
  }
}

это такая версия Blink для STM8. Здесь GPIO, по аналогии с Arduino - это цифровые пины. Про регистры и порты можно почитать здесь: 8L-Курс, Часть 2 - GPIO

Здесь пины 3 и 4 порта С настраиваются на передачу в контрофазе, затем в цикле их значения инвертируются, в качестве задержки(delay) используется простой цикл.

Компилируем:

$ sdcc -mstm8 -DSTM8S103 -I ../lib/STM8S_StdPeriph_Lib_V2.1.0/Libraries/STM8S_StdPeriph_Driver/inc ./leds.c

На выходе получаем целый набор файлов:

leds.asm  leds.c  leds.cdb  leds.ihx  leds.lk  leds.lst  leds.map  leds.rel  leds.rst  leds.sym

Наша прошивка будет в файле leds.ihx. Прошивать будем с помощью: stm8flash

Прошивка:

$ stm8flash -c stlinkv2 -p stm8s103 -w leds.ihx
Determine FLASH area
Writing Intel hex file 242 bytes at 0x8000... OK

Вот и все. Можно подключать светодиоды к пинам С3 и C4, при расчете резистора для светодиода, необходимо исходить из того, что логическая единица в случае использования платы с STM8S103F3P6, будет равняться 3.3 Вольтам.

поделиться: