11.05.2022г. ВНИМАНИЕ! Если у вас не отображаются иллюстрации к статьям, для просмотра сайта используйте TOR браузер
Работая с 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 корпусах, в макетку их не поставишь, но тут на помощь приходит братская Китайская Народная Республика, которая поставляет в наши суровые края такие платы:
Микроконтроллер в корпусе 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 Вольтам.