1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hbendali-stm8_started

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 21 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 16.03.2025 00:34 e225250

Начало работы с инструментами разработки STM8 на GNU/Linux

Этот гайд был написан для (и на) Linux Arch, Ubuntu, Mint. Я не тестировал процедуру на других архитектурах Linux или дистрибутивах. Пользователи других дистрибутивов могут найти, что некоторые инструкции не работают буквально. Адаптируйте как можно.

stm8s003.png

Введение

Серия микроконтроллеров STM8 компании ST Microelectronics очень доступна по цене и мощна одновременно. Их вычислительная мощность ничуть не уступает Arduino, при этом потребление энергии значительно ниже. Эти характеристики делают микроконтроллеры STM8 отличным выбором для многих хобби-проектов и серьёзных задач. В этом учебнике вы узнаете, как установить среду разработки и программирования для STM8 на системах на базе Linux.

Вот необходимые инструменты, которые использовались в этом учебнике:

  • VS-Code (Visual Studio Code) — продвинутый текстовый редактор.
  • SDCC — компилятор версии 3.7.0 или выше.
  • STM8 Standard Peripheral Library [SPL], отредактированная для SDCC.
  • ST-LINK / STM8FLASH — для записи скомпилированного кода в микроконтроллер.
  • STM8-GDB / OPENOCD — для отладки.
  • Официальная плата оценки STM8 от ST или вы можете использовать бюджетные китайские платы стоимостью около 2$ вместе со шлюзом!

Подготовка необходимых инструментов

Установка VS-CodeVS-Code

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), затем найдите и установите следующие расширения:

  • C/C++ для Visual Studio Code
  • C++ IntelliSense
  • hexdump для VSCode
  • vscode-devdocs

Установка SDCC

SDCC — это перезапускаемый компилятор ANSI C (C89, C99, C11) с оптимизацией, который предназначен для микроконтроллеров STMicroelectronics STM8.
Скачайте и установите версию SDCC 3.7.0 или выше. Для более высокой оптимизации используйте сборочные образцы с SourceForge.```shell

скачивание последней версии

$ wget https://sourceforge.net/projects/sdcc/files/snapshot_builds/amd64-unknown-linux2.5/sdcc-snapshot-amd64-unknown-linux2.5-20210621-12488.tar.bz2

$ 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

$ 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-V2.jpg](assets/img/st-link_v2.png)Программатор 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

Чтобы решить проблему получения прав записи для устройства USB

libusb: ошибка [_get_usbfs_fd] libusb не может открыть USB устройство /dev/bus/usb/003/004: Операция запрещена. libusb: ошибка [_get_usbfs_fd] libusb требует права записи для узлов USB устройств. Невозможно открыть USB устройство.

Создайте файлы со следующим содержанием:

49-stlinkv1.rules
# STM32 discovery boards, с встроенным st/linkv1
# Например, STM32VL.

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", \
    MODE="660", GROUP="plugdev", TAG+="uaccess", \
    SYMLINK+="stlinkv1_%n"
49-stlinkv2.rules
# STM32 discovery boards, с встроенным st/linkv2
# Например, STM32L, STM32F4.

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
    MODE="660", GROUP="plugdev", TAG+="uaccess", \
    SYMLINK+="stlinkv2_%n"
49-stlinkv2-1.rules
# 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"

49-stlinkv3.rules

# Подсистемы для устройств 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), хотя большинство наборов инструментов его не поддерживают.

Устройства ST для STM8 Discovery

STM8S-DISCOVERY помогает вам открыть возможности STM8S и развивать и делиться своими собственными приложениями. В моем случае используется STM8S003F3P6 STM8S Минимальная система разработки. Это стоит около $1-$5 с AliExpress.

STM8S003F3P6.jpg

Начало работы

Ваш первый код

Обычно первым шагом к обучению программированию на микроконтроллере является просто мигание светодиода, как аналог "Привет, мир!" примера, используемого в языках программирования для ПК. На этот раз мы рассмотрим, как начать программировать и разрабатывать на микроконтроллерах серии 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.png](assets/img/gdb.png)
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-GDB

Скачайте последние исходники 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

Отладка в VSCode

Настройка

Перейдите к [Отладка > Добавить Конфигурацию...]

{
    "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
    }
}

Затем выберите [Отладка > Начать отладку] или нажмите F5debugging

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/hbendali-stm8_started.git
git@api.gitlife.ru:oschina-mirror/hbendali-stm8_started.git
oschina-mirror
hbendali-stm8_started
hbendali-stm8_started
master