Этот гайд был написан для (и на) Linux Arch, Ubuntu, Mint. Я не тестировал процедуру на других архитектурах Linux или дистрибутивах. Пользователи других дистрибутивов могут найти, что некоторые инструкции не работают буквально. Адаптируйте как можно.
Серия микроконтроллеров STM8 компании ST Microelectronics очень доступна по цене и мощна одновременно. Их вычислительная мощность ничуть не уступает Arduino, при этом потребление энергии значительно ниже. Эти характеристики делают микроконтроллеры STM8 отличным выбором для многих хобби-проектов и серьёзных задач. В этом учебнике вы узнаете, как установить среду разработки и программирования для STM8 на системах на базе Linux.
Вот необходимые инструменты, которые использовались в этом учебнике:
Visual Studio Code — это кросс-платформенный, бесплатный и открытый текстовый редактор, разработанный компанией Microsoft и расширяемый при помощи расширений, которые можно просматривать непосредственно внутри редактора (через его галерею расширений) или на сайте https://marketplace.visualstudio.com/VSCode. Хотя он является открытым проектом, компания Microsoft также предоставляет проприетарную версию (лицензированную под соглашением об использовании конечного пользователя) и использует её как основу для пакета visual-studio-code-bin [AUR]. Для объяснения смешенной лицензии, обратитесь к этому комментарию на GitHub comment.
Установка
# Arch Linux
$ yaourt -S visual-studio-code-bin
# Ubuntu и Mint Linux
$ wget https://go.microsoft.com/fwlink/?LinkID=760868 -O vscode.deb
$ sudo dpkg -i vscode.deb
Использование
$ code
Добавление расширения
нажмите (Ctrl + Shift + X), затем найдите и установите следующие расширения:
SDCC — это перезапускаемый компилятор ANSI C (C89, C99, C11) с оптимизацией, который предназначен для микроконтроллеров STMicroelectronics STM8.
Скачайте и установите версию SDCC 3.7.0 или выше. Для более высокой оптимизации используйте сборочные образцы с SourceForge.```shell
$ tar -xjf ./sdcc-snapshot-amd64-unknown-linux2.5-20210621-12488.tar.bz2 $ sudo mv sdcc /opt $ echo "export PATH=$PATH:/opt/sdcc/bin" >> ~/.bashrc $ source ~/.bashrc
$ sdcc -v
SDCC : mcs51/z80/z180/r2k/r2ka/r3ka/gbz80/tlcs90/ez80_z80/z80n/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8/pdk13/pdk14/pdk15 4.1.6 #12488 (Linux) опубликовано под лицензией GNU General Public License (GPL)
> [SDCC](http://sdcc.sourceforge.net) SourceForge
> Документация SDCC Мануал [PDF](http://sdcc.sourceforge.net/doc/sdccman.pdf)
### Скачивание библиотеки стандартных периферий STM8 [SPL]
SDCC поддерживает STM8, но по причинам лицензирования (ах, ST!) [Стандартная библиотека периферий (SPL)](https://my.st.com/content/my_st_com/en/products/embedded-software/mcus-embedded-software/stm8-embedded-software/stsw-stm8069.html) отсутствует.
Кто-то разработал патч, который делает SPL совместимой с SDCC, доступен здесь: [SPL_2.2.0_SDCC_patch](https://github.com/gicking/SPL_2.2.0_SDCC_patch).
### Программатор
#### ST-LinkПрограмматор ST-Link или его клон, используемый для записи вашего скомпилированного кода (файлы) в микроконтроллер.
Для программатора вам нужен тот, который поддерживает режим SWIM (Single Wire Interface Module). Вы можете (рекомендуется) использовать оригинальный отладочный модуль STMicroelectronics — ST-Link V2 (вы можете приобрести этот вариант б/у за 20$ или меньше). Если вы хотите сэкономить средства, можно купить подделку стоимостью менее 10$ (пожалуйста, обратите внимание, что эти дешевые отладочные модули поддерживают только программный режим, что работает хорошо, но не обеспечивает полной функциональности и скорости оригинальных отладочных модулей ST). Также вы можете самостоятельно собрать открытые источники Stlink Tools.> Обновление прошивки ST-LINK/V2-1 [STSW-LINK007](https://www.st.com/en/development-tools/stsw-link007.html).
> Открытая версия инструментов STMicroelectronics Stlink доступна [здесь](https://github.com/texane/stlink)
> Black Magic Probe, открытый JTAG & SWD ГНУ отладчик и программатор [здесь](https://github.com/blacksphere/blackmagic/wiki).#### STM8FLASH
Это единственная программа, способная общаться через интерфейс SWIM ST-LINK для загрузки скомпилированного кода (прошивки) в микроконтроллер.
> **libusb-1.0-0-dev** необходим для компиляции stm8flash
Установите **stm8flash** из пакета [AUR].
```shell
## Arch Linux
$ yaourt -S aur/stm8flash-git
## Ubuntu, Mint Linux
## Установка из исходников git репозитория
$ git clone https://github.com/vdudouyt/stm8flash.git
$ cd stm8flash
$ make
$ sudo make install
Программное обеспечение с открытым исходным кодом GitHub распространяется по адресу vdudouyt/stm8flash.
Чтобы решить проблему получения прав записи для устройства USB
libusb: ошибка [_get_usbfs_fd] libusb не может открыть USB устройство /dev/bus/usb/003/004: Операция запрещена. libusb: ошибка [_get_usbfs_fd] libusb требует права записи для узлов USB устройств. Невозможно открыть USB устройство.
Создайте файлы со следующим содержанием:
# STM32 discovery boards, с встроенным st/linkv1
# Например, STM32VL.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv1_%n"
# STM32 discovery boards, с встроенным st/linkv2
# Например, STM32L, STM32F4.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv2_%n"
# STM32 nucleo boards, с встроенным st/linkv2-1
# Например, STM32F0, STM32F4.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv2-1_%n"
``````markdown
# Подсистемы
```shell
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv2-1_%n"
# Подсистемы для устройств ST-Link/V3 (отдельные и встроенные) в режиме USBLoader и стандартном (отладочном) режиме
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv3loader_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", \
MODE="660", GROUP="plugdev", TAG+="uaccess", \
SYMLINK+="stlinkv3_%n"
Создайте 49-stlinkv1.rules
, 49-stlinkv2.rules
, 49-stlinkv2-1.rules
и 49-stlinkv3.rules
и скопируйте их в /etc/udev/rules.d/
, затем перезагрузите udevadm
.
$ sudo mv *.rules /etc/udev/rules.d/
$ sudo udevadm control --reload-rules && sudo udevadm trigger
Обратите внимание, что предоставляется файл для ST-Link/V1 (idProduct=3744), хотя большинство наборов инструментов его не поддерживают.
STM8S-DISCOVERY помогает вам открыть возможности STM8S и развивать и делиться своими собственными приложениями. В моем случае используется STM8S003F3P6 STM8S Минимальная система разработки. Это стоит около $1-$5 с AliExpress.
Обычно первым шагом к обучению программированию на микроконтроллере является просто мигание светодиода, как аналог "Привет, мир!" примера, используемого в языках программирования для ПК. На этот раз мы рассмотрим, как начать программировать и разрабатывать на микроконтроллерах серии STM8 компании STMicroelectronics.
На этом этапе вы должны иметь рабочую среду разработки и можете приступить к экспериментам с платой.
[Руководство по STM8S](https://www.st.com/content/ccc/resource/technical/document/reference_manual/9a/1b/85/07/ca/eb/4f/dd/CD00190271.pdf/files/CD00190271.pdf/jcr:content/translations/en.CD00190271.pdf)
##### stm8_blinky.c
```c
#include "stm8l.h"
#define Led_Init GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST)
#define Led_ON GPIO_WriteHigh(GPIOD, GPIO_PIN_1)
#define Led_OFF GPIO_WriteLow(GPIOD, GPIO_PIN_1)
#define Led_TOG GPIO_WriteReverse(GPIOD, GPIO_PIN_1)
void main(void)
{
// Инициализация порта светодиода, пина
Led_Init;
// Включение светодиода
Led_ON;
// Цикл
while(1){
// Переключение светодиода вкл/выкл
Led_TOG;
// Пауза
for(uint16_t d = 0; d < 19000; d++) {
for(uint8_t c = 0; c < 5; c++);
}
}
}
$ sdcc -lstm8 -mstm8 --opt-code-size --std-sdcc99 --nogcse --all-callee-saves --debug --verbose --stack-auto --fverbose-asm --float-reent --no-peep -I./ -I./STM8S_StdPeriph_Driver/inc -D STM8S003 ./stm8_blinky.c
Из коробки каждая плата прошита демонстрационной программой, которая должна начать мигать сразу после подключения USB. Мы же не будем использовать USB, так что отключите его снова и подготовьте ваш ST-Link и соединительный кабель, который шёл вместе с платой.Также вам потребуется припаять некоторые шлейфы к вашей плате STM8, как минимум шлейф для программирования (противоположная сторона USB). Оба — пины джентльмана и шлейфа для программирования — явно помечены, поэтому вы не должны столкнуться с проблемами.
Если вы используете клон ST-Link программатора, не подключайте линию 3V3 от шлейфа джентльмана к плате при питании платы через USB. Теоретически ничего плохого случиться не должно, но вы подключаете два регулятора напряжения параллельно, а это плохая идея.
Просто оставьте пин 3V3 шлейфа для программирования неподключенным в этом случае.
Плата должна начать мигать сразу. Но первым шагом будет очистка чипа, поскольку заводская загрузочная прошивка защищена от чтения и вы ничего сделать не сможете, пока она заблокирована.
Чтобы разблокировать чип, используйте опцию флэшера -u
(для получения более подробной информации запустите stm8flash -h
):
$ stm8flash -c stlinkv2 -p stm8s003f3 -u
Определение области OPT
Разблокированное устройство. Опция байты сброшены до состояния по умолчанию.
Записано байт: 11
Плата прекратит мигание, вы просто «забили» её. О нет! Но мы быстро исправим это.
Вы можете теперь загрузить свою собственную прошивку с помощью команды make flash
, или если вы скачали HEX файл самостоятельно:```shell
$ stm8flash -c stlinkv2 -p stm8s003f3 -s flash -w stm8_blinky.ihx
Определение области FLASH
Запись файла Intel hex 655 байт по адресу 0x8000... Успешно
Записано байт: 655
## Расширенное использование
### Отладчик GDB

GDB предоставляет широкие возможности для отслеживания и изменения выполнения программ. Пользователь может наблюдать и изменять значения внутренних переменных программы, а также вызывать функции независимо от обычного поведения программы.
#### OpenOCD
Установите **openocd** с **[github.com/sysprogs/openocd](https://github.com/sysprogs/openocd)** для последнего обновления, чтобы использовать устройства **STM8**
```shell
$ git clone git@github.com:sysprogs/openocd.git
или
$ git clone git@github.com:ntfreak/openocd.git
$ cd openocd
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
Исходный код доступен на OpenOCD.
Скачайте последние исходники stm8 binutils-gdb с официального сайта или напрямую с SourceForge.
Процесс сборки бинарников включает скачивание исходников и применение патчей. Есть помощные скрипты для упрощения процесса.
$ wget https://sourceforge.net/projects/stm8-binutils-gdb/files/stm8-binutils-gdb-sources-2020-03-22.tar.gz/download -O stm8-binutils-gdb-sources-2018-03-04.tar.gz
$ tar -xf stm8-binutils-gdb-sources-2020-03-22.tar.gz
$ cd stm8-binutils-gdb-sources
$ ./patch_binutils.sh
$ ./configure_binutils.sh
Также обратите внимание, что вам потребуются некоторые библиотеки для работы режима TUI. В их числе ncursesw.
```shell
$ cd binutils-2.30
$ make
$ sudo make install
Исходники доступны на stm8-binutils-gdb.
Компиляция и генерация файла elf с аргументом --out-fmt-elf
$ sdcc -mstm8 led.c --out-fmt-elf --all-callee-saves --debug --verbose --stack-auto --fverbose-asm --float-reent --no-peep
Запустите openocd во втором окне командной строки:
$ openocd -f interface/stlink.cfg -f target/stm8s105.cfg -c "init" -c "reset halt"
или если вы предпочитаете общую конфигурацию для stm8s (для средних размеров флэш-памяти stm8s), замените stm8s105.cfg на stm8s.cfg
На данный момент доступны конфигурационные файлы для stm8s003, stm8s105 и stm8l152.
Затем запустите gdb:
$ stm8-gdb test.elf --tui
start
или если вы предпочитаете загрузку вручную:
$ stm8-gdb test.elf --tui
target extended-remote localhost:3333
load
break main
continue
Перейдите к [Отладка > Добавить Конфигурацию...]
{
"name": "STM8-gdb",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/main.elf",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "stm8-gdb",
"setupCommands": [
{
"description": "Подключение к цели",
"text": "-target-select extended-remote localhost:3333",
"ignoreFailures": true
}
],
"logging": {
"moduleLoad": true,
"trace": true,
"engineLogging": true,
"programOutput": true,
"exceptions": true
}
}
Затем выберите [Отладка > Начать отладку] или нажмите F5
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )