Пару лет назад решил попробовать микроконтроллер STM8. Купил их пачку по дешёвке у китайцев. Как позже оказалось это был STM8S003F3, т. е. дешёвая серия этих контроллеров, но тем не менее с учётом цены вполне неплохо. К сожалению информации по разработке было довольно мало, в особенности по разработке под Linux. Ну и всё, что удалось нарыть собирал в статью, дописать которую сподобился только сейчас.
В итоге чтобы не вводить людей в заблуждение всё перепроверил и результаты выкладываю ниже. В дальнейшем планирую несколько статей по разработке на этих контроллерах. Эта статья типа вводная — как установить и настроить средства разработки.
Железо
STM8
Для подключения и дальнейшей разработки нам понадобится Даташит и Мануал
Распиновка контроллера
ST-LINK
У меня китайский ST-LINK. Где купил — уже и не помню. Что-то типа такого StLink v2. Для состоятельных парней готовых заплатить в 10 раз больше — можно купить и оригинал Оригинальный ST-Link V2.
Мой выглядит вот так:
Для наших экспериментов достаточно подключить 4 вывода ST-LINK к соответствующим выводам контроллера.
ST-LINK | ST-LINK Pin | STM8 | STM8 Pin |
---|---|---|---|
RST | 1 | NRST | 4 |
SWIM | 3 | SWIM | 18 |
GND | 5 | Vss | 7 |
3.3V | 7 | Vcap | 8 |
Компилятор
Под Linux всё, что нам доступно это компилятор sdcc
. В моём ArchLinux-е стандартный пакет sdcc
работал, но напрочь отказывался линковать код. Это подтверждённый баг в определённых версиях sdcc, поэтому если при линковке вы не получите на выходе файлы *.ihx
, то просто попробуйте откатиться до более старой версии. Ну или до более новой — я просто скачал текущий девелоперский релиз отсюда и всё заработало.
Позже в ArchLinux нашёл пакет sdcc-svn
который фактически тянет и собирает текущий код проекта. Он тоже оказался работоспособным и в конечном итоге остановился именно на нём. Я всё-таки предпочитаю использовать средства операционной системы, а не городить собственные велосипеды.
Прошивка
Выше уже написал, что для прошивки пользуюсь китайским клоном ST-LINK. Для работы с ним в Linux у нас есть проект https://github.com/vdudouyt/stm8flash, который и позволяет нам заливать прошивку в устройство.
По счастью для Arch Linux-а есть готовый пакет и руками собирать ничего не надо.
1 | $ yaourt -S stm8flash-git |
Как-то бы надо проверить работает ли оно вообще. Поэтому цепляем St-Link и пробуем прочитать содержимое контроллера. Но для начала на всякий пожарный пробуем его разблокировать.
1 | $ stm8flash -c stlinkv2 -p stm8s003f3 -u |
Видим дамп заполненный нулями, что собственно нам и нужно.
В данном случае я в качестве устройства выбрал stm8s003f3 т. к. именно такой контроллер у меня в наличии. Полный же список поддерживаемых устройств можно посмотреть так:
1 | $ stm8flash -l |
Стандартная библиотека
Ну что — железо есть, есть чем заливать прошивку в контроллер. Дело за малым — написать программу. Но для написания кода крайне желательно иметь уже готовую библиотеку стандартных функций. Для STM8 такая библиотека есть. Установка её не вполне тривиальная задача, поэтому остановлюсь на ней поподробнее.
Основная проблема этой библиотеки это то, что она изначально разрабатывалась под коммерческие компиляторы и соответственно с sdcc
работать не будет. Но мир не без добрых людей и нашлись умельцы, доработавшие её до полной совместимости. Но тем не менее все изменения нам придётся вносить вручную … ну или почти вручную.
Сборка вручную
Существует несколько патчей от разных умельцев. Изначально я писал эту статью 2 года назад и всё было несколько проще. Но попробовав воспроизвести написанные мной же действия понял, что слишком много воды утекло и данные устарели. Поэтому пришлось перебрать несколько вариантов прежде чем получить нужный результат. Здесь выложу только последний — успешный вариант.
Итак для начала нам нужно зарегистрироваться на сайте www.st.com. Раньше это не было обязательным, но сейчас вот оно вот так — деваться некуда. Сам я выкачать и выложить библиотеку не рискну, ибо обвинения в пиратстве мне не нужны. Придётся каждому делать это самостоятельно.
После успешной регистрации весь софт с примерами можно найти на этой странице:
http://www.st.com/en/embedded-software/stm8-embedded-software.html? querycriteria=productId=SC1807
Соответственно для STM8S ищем там STSW-STM8069 (STM8S/A Standard peripheral library).
Прямая ссылка — http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm8-embedded-software/stsw-stm8069.html
И качаем оттуда архив en.stsw-stm8069.zip.
Для работы нам понадобятся утилиты make
, unzip
и patch
. Они уже должны быть установлены в системе.
Итак создадим папку и скачиваем туда файл en.stsw-stm8069.zip
. Туда же скачиваем мой Makefile. В Makefile-е нужно поправить имя используемого чипа, которое должно быть одним из следующих.
1 | STM8S208 /* STM8S High density devices with CAN */ |
Имя чипа нужно указать в переменной CHIP
1 | CC = sdcc |
Далее просто запускаем командой make
сборку библиотеки.
Собственно что при этом происходит? Файл распаковывается, выкачивается нужный патч, накладывается на исходники библиотеки, библиотека собирается, финальный файл вместе с исходниками и заголовочными файлами переносится в папку ./<название чипа>_stdlib
и затем удаляется весь мусор.
1 | $ ls -l |
Готовые файлы будут в папке ./<название чипа>_stdlib
. В моём случае это STM8S003_stdlib
. Внутри будет бинарник библиотеки, заголовочные файлы и исходники (они не нужны, но бывает полезно в них поковыряться, поэтому оставляю их).
Готовый проект на github
Нашёл слишком поздно — тут уже готовая пропатченная библиотека. Знал бы раньше не занимался бы геморроем выше. Справедливости ради должен сказать, что в работе её не проверял.
Итоги
Итого у нас всё готово для дальнейшей разработки. В следующих статьях постараюсь показать как это всё использовать.
Комментарии