DiyTronic
Пару лет назад решил попробовать микроконтроллер 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-а есть готовый пакет и руками собирать ничего не надо.
Как-то бы надо проверить работает ли оно вообще. Поэтому цепляем St-Link и пробуем прочитать содержимое контроллера. Но для начала на всякий пожарный пробуем его разблокировать.
$ stm8flash -c stlinkv2 -p stm8s003f3 -u
Determine OPT area
Unlocked device. Option bytes reset to default state.
Bytes written: 11
$ stm8flash -c stlinkv2 -p stm8s003f3 -r test.hex
$ cat test.hex
:20800000000000000000000000000000000000000000000000000000000000000000000060
:20802000000000000000000000000000000000000000000000000000000000000000000040
:20804000000000000000000000000000000000000000000000000000000000000000000020
:20806000000000000000000000000000000000000000000000000000000000000000000000
:208080000000000000000000000000000000000000000000000000000000000000000000E0
:2080A0000000000000000000000000000000000000000000000000000000000000000000C0
:2080C0000000000000000000000000000000000000000000000000000000000000000000A0
.
Видим дамп заполненный нулями, что собственно нам и нужно.
В данном случае я в качестве устройства выбрал stm8s003f3 т. к. именно такой контроллер у меня в наличии. Полный же список поддерживаемых устройств можно посмотреть так:
$ stm8flash -l
stlux. a stm8af526? stm8af528? stm8af52a? .
Стандартная библиотека
Ну что — железо есть, есть чем заливать прошивку в контроллер. Дело за малым — написать программу. Но для написания кода крайне желательно иметь уже готовую библиотеку стандартных функций. Для STM8 такая библиотека есть. Установка её не вполне тривиальная задача, поэтому остановлюсь на ней поподробнее.
Основная проблема этой библиотеки это то, что она изначально разрабатывалась под коммерческие компиляторы и соответственно с sdcc работать не будет. Но мир не без добрых людей и нашлись умельцы, доработавшие её до полной совместимости. Но тем не менее все изменения нам придётся вносить вручную … ну или почти вручную.
Сборка вручную
Существует несколько патчей от разных умельцев. Изначально я писал эту статью 2 года назад и всё было несколько проще. Но попробовав воспроизвести написанные мной же действия понял, что слишком много воды утекло и данные устарели. Поэтому пришлось перебрать несколько вариантов прежде чем получить нужный результат. Здесь выложу только последний — успешный вариант.
Итак для начала нам нужно зарегистрироваться на сайте www.st.com. Раньше это не было обязательным, но сейчас вот оно вот так — деваться некуда. Сам я выкачать и выложить библиотеку не рискну, ибо обвинения в пиратстве мне не нужны. Придётся каждому делать это самостоятельно.
После успешной регистрации весь софт с примерами можно найти на этой странице:
Для работы нам понадобятся утилиты make , unzip и patch . Они уже должны быть установлены в системе.
Итак создадим папку и скачиваем туда файл en.stsw-stm8069.zip . Туда же скачиваем мой Makefile. В Makefile-е нужно поправить имя используемого чипа, которое должно быть одним из следующих.
STM8S208 /* STM8S High density devices with CAN */
STM8S207 /* STM8S High density devices without CAN */
STM8S007 /* STM8S Value Line High density devices */
STM8AF52Ax /* STM8A High density devices with CAN */
STM8AF62Ax /* STM8A High density devices without CAN */
STM8S105 /* STM8S Medium density devices */
STM8S005 /* STM8S Value Line Medium density devices */
STM8AF626x /* STM8A Medium density devices */
STM8AF622x /* STM8A Low density devices */
STM8S103 /* STM8S Low density devices */
STM8S003 /* STM8S Value Line Low density devices */
STM8S903 /* STM8S Low density devices */
Имя чипа нужно указать в переменной CHIP
CC = sdcc
AR = sdar
CHIP = STM8S003
.
Далее просто запускаем командой make сборку библиотеки.
Собственно что при этом происходит? Файл распаковывается, выкачивается нужный патч, накладывается на исходники библиотеки, библиотека собирается, финальный файл вместе с исходниками и заголовочными файлами переносится в папку ./_stdlib и затем удаляется весь мусор.
$ ls -l
итого 10912
-rw-r—r— 1 roman roman 11164420 дек 23 00:18 en.stsw-stm8069.zip
-rw-r—r— 1 roman roman 2680 дек 24 20:29 Makefile
drwxr-xr-x 5 roman roman 4096 дек 24 20:58 STM8S003_stdlib
Готовые файлы будут в папке ./_stdlib . В моём случае это STM8S003_stdlib . Внутри будет бинарник библиотеки, заголовочные файлы и исходники (они не нужны, но бывает полезно в них поковыряться, поэтому оставляю их).
Готовый проект на github
Нашёл слишком поздно — тут уже готовая пропатченная библиотека. Знал бы раньше не занимался бы геморроем выше. Справедливости ради должен сказать, что в работе её не проверял.
Итоги
Итого у нас всё готово для дальнейшей разработки. В следующих статьях постараюсь показать как это всё использовать.
Источники
Микроконтроллеры STM8. Первая программа.
Микроконтроллеры STM8. Первая программа.
Здравствуйте,
Сегодня мы с вами поговорим об аппаратных средствах разработки для микроконтроллеров STM8S и создадим первый проект.
Для начала стоит определится с аппаратной платформой, потому что симулятор это хорошо, но, в любом случае, в итоге всё будет воплощено именно в железе. Для этого нам нужен программатор и отладочная плата. Как я уже упоминал в предыдущей статье, собрать самостоятельно программатор для STM8 – задача совершенно не простая, и требует серьезных знаний и больших усилий. В продаже присутвуют серьезные отладочные комплекты, наподобие STM8/128-EVAL, и универсальный программатор ST-Link, но, для быстрого старта ST выпустила два дешевых отладочных комплекта STM8S-Discovery и STM8L-Discovery. В них изначально встроена обрезанная версия ST-Link, и, таким образом, на одной плате мы получаем программатор и собственно целевой контроллер, готовый к программированию. И все это богатство стоит совершенно небольшие деньги: например, STM8S-Discovery достался мне за 115 грн. (около 14$). Разница между STM8S-Discovery и STM8L-Discovery состоит, кроме несущественных мелочей, в типе установленного контроллера, а также в том, что на STM8L-Discovery установлен энергосберегающий ЖК-индикатор. Первые шаги мы будем делать именно с использованием STM8S-Discovery, а потом соберем свою отладочную плату. Итак, что же у нас есть на этой замечательной платке?
STM8S-Discovery. Обзор платы.
С первого момента плата оставляет очень приятное впечатление. В комплект поставки ничего, кроме платы не входит, но это и не удивительно, учитывая цену. Плата упакована в пластиковую коробочку, знакомую многим по STM32VL-Discovery. Про кабель для связи с компьютером следует позаботится заранее – требуется самый обыкновенный A-B USB шнурок, каким, например, подключается принтер.
Глядя на плату, мы видим, что она разделена на две области – программатора и собственно отладочную плату. С платой стоит обращаться аккуратно, дабы не поломать ее на две части раньше времени.
Программатор работает по двухпроводному SWD-интерфейсу и позволяет прошивать не только встроенный контроллер, но и, при замыкании соответствующих перемычек, внешние устройства, чем мы в будущем непременно воспользуемся. Программатор работает со всеми семействами микроконтроллеров STM8, и ходят слухи, что скоро его взломают, и он сможет шить и STM32.
На отладочной плате установлен микроконтроллер STM8S105C6T6, внешний кварц на 16 МГц, сенсорная кнопка и светодиод. На разъемы выведены все выводы микроконтроллера. Внизу платы находится небольшая макетная область с футпринтом для микросхем в корпусе SO 16 и небольшим количеством металлизированных отверстий.
Изначально в контроллер залита программа, которая позволяет касанием к сенсорной кнопке менять частоту мигания светодиода. Но к сенсорной кнопке мы вернемся намного позже, а сейчас создадим первую программу для STM8. Создание проекта для STM8 подобно созданию проектов в IAR для других платформ, но я повторюсь, чтобы не прерывать последовательность курса.
Создание первого проекта в IAR.
Запустим среду IAR Embedded Workbench for STMicroelectronics STM8. Текущая версия -1.20. После загрузки мы видим следующее окно:
Не стоит пренебрегать размещенными в основном окне программы на желтом фоне. Особенно важными являются разделы Getting Started и User Guides. В них содержатся масса полезной информации по самой среде разработки, а также гайды по Си, С++ и ассемблеру. В разделе Example Projects Капитан Очевидность разместил примеры проектов.
Создадим новый проект: идем в меню «Project», где выбираем пункт меню «Create new project…».
В появившемся окошке выбираем шаблон для языка Си, после чего нам предлагают сохранить нашу рабочую область – Workspace, с расширением *.eww. Сохраняем, выскакивает окошко с запросом сохранения проекта, сохраняем и его. Проекты IAR имеют расширение *.ewp.
Перед нами появилось такое окошко:
Это шаблон пустого Си-файла. Сами шаблоны находятся в папке %Путь к IAR% IAR Systems\Embedded Workbench 6.0 Kickstart\stm8\config\template\project. Если у вас от проекта к проекту повторяются какие-то заготовки – можете создать свои шаблоны, и выбирать их при создании нового проекта.
Наберем следующий код, после чего сохраним проект:
#include "iostm8.h" // подключение заголовочного файла с объявлениями регистров, масок и битов int main( void ) // Основная программа < PD_DDR_bit.DDR0 = 1; // Ножка PD0 конфигурируется на вывод while(1) // Бесконечный цикл < PD_ODR ^= MASK_PD_ODR_ODR0; // Переключение уровня напряжения на ножке на противоположное // при помощи операции Исключающее ИЛИ (XOR) >>
Программа короткая, каждая строка откомментирована, поэтому дополнительных объяснений я приводить не буду, если появятся вопросы – я отвечу на них в комментариях.
По умолчанию, наш код после компиляции будет запущен в симуляторе. Настроим наш проект для выполнения в железе. Для этого в окне workspace выберем пункт контекстного меню «Options», причем нажать правой кнопкой мыши нужно именно на самом проекте, а не на файлы, которые в него входят. Для достижения того же эффекта можно нажать Alt+F7.
На странице General, вкладке Target выберем модель нашего контроллера: STM8S — > STM8S105C6.
Выберем наш отладчик на странице Debugger, вкладке Setup: ST-Link.
Нажимаем Оk. Теперь самое время запустить нашу программу.
На основной панели инструментов нажимаем кнопку «Download and Debug» в виде зеленого треугольника, и если никаких проблем не возникло, о чем IAR не преминет нам сообщить, то наша программа будет записана в микроконтроллер и мы увидим следующее окошко:
Справа мы видим окошко дизассемблера, по центру – окно основной программы. Строка, подсвеченная зеленым, выполнится на следующем шаге. Пошагаем по программе при помощи кнопки «Step Over» (F10), и увидим, что светодиод на плате мигает.
Соответственно, программа работает правильно. Выйти из режима отладки можно нажав кнопку «Stop Debugging» в виде красного крестика.
На сегодня все, а в следующей статье мы подробнее рассмотрим порты ввода-вывода, а также Firmware Library для STM8.