Elektronika, ukázky pro STM8S103F3, plus programování v assembleru.


Jak začít s STM8 v assembleru

tyto stránky jsou provozovány jako hobby, bez reklam a bez sběru osobních dat
STM8

Jak začít? Tím nejjednodušším. Modul mikrokontroléru STM8S103F3 je osazen interní led diodou, která je "pověšena" na pin B5 (port B bit 5). Takže se pokusím předvést prográmek, který ji rozbliká.

K programování, vypalování a ladění STM8 je potřeba mimo samotného modulu mikrokontroléru, těchto pár věcí:
  • programátor ST-Link/v2, nutný pro nahrávání (vypalování) programu do STM8
  • stáhnout a nainstalovat ovladač pro ST-Link, ten by měl být ke stažení v obchodě, kde jej zakoupíte
  • stáhnout a nainstalovat vývojové prostředí ST Visual Develop, pro programování, ladění i vypálení
  • stáhnout a nainstalovat utilitu ST Visual Programmer, nastavení parametrů (option), další možnost vypálení
  • doporučuji se seznámit s manuály výrobce

Kromě programátoru ST-Link (cena kolem stokoruny) je vše ostatní zdarma. Programátor stačí mít pouze jeden, po vypálení programu do čipu a po případném odladění vypáleného kódu se může odpojit. Stažení vývojového prostředí ST Visual Develop a utilita ST Visual Programmer možná podléhá nějaké registraci, nicméně ta je zdarma.

Jak vytvořit projekt ve vývojovém prostředí ST Visual develop::
  • Po úspěšné instalaci spustit ST Visual Develop
  • V Hlavním menu vybrat File a New workspace.
  • Zvolit položku Create workspace and project
  • Objeví se dialog pro zadání skupiny projektů.
  • Vyplňte pole workspace filename (název skupiny projektů
       například "projekty")
  • Vyyplňte pole workspace location (složka pro umístění
       například C:\DEVELOP)
  • Naskočí další okno pro projekt.
  • Vyplňte pole project filename (název projektu)
       například "blikac")
  • Vyplňte pole project location (složka pro umístěni projektu, zde doporučuji vybrat podsložku skupiny projektů
       například C:\DEVELOP\BLIKAC).
  • Do pole toolchain vyberte ST Assembler Linker.
  • Pole toolchain root ponechte nezměněno.
  • Naběhne výběr pro konkrétní CPU.
  • Vyberte v něm STM8S103F3P.
Tím se vytvoří projekt ve stromové struktuře viz obrázek "workspace". Pokud se vám toto okno (viz obrázek vlevo) nezobrazí, rozbalte hlavní menu-view a klikněte na "workspace". V projektu jsou automaticky vygenerovány dva krátké zdrojáčky mapping.asm a mapping.inc..workspace Definují konkrétní adresy segmentů v paměti pro zde použitý modul STM8S103F3P (viz tabulka níže). Nedoporučuji tyto dva soubory nějak měnit, nebo do nich přidávat vlastní kód. Systém je totiž přepisuje. Ukázkový program zde je velmi jednoduchý a vystačí si pouze se dvěma segmenty - ram0 a rom.
Ke vkládání kódu je určen soubor main.asm. Když jej otevřete, je předvyplněn defaultním kódem, který celý vymažte a místo něj tam vložte přes copy-paste níže uvedený zdroják a vše uložte. Rozbalte hlavní menu File a dejte Save Workspace a potom Save TextFile.
U rozsáhlejších projektů, což není tento případ, je možné do větve "Source Files" přidávat další .asm soubory, jako jsou různé samostatné moduly a podobně. Další podrobnosti jsou k dispzici v manuálech výrobce.
Každý program musí mít inicializační část (SETUP), kde jsou definovány adresy segmentů a je nastaven vrchol zásobníku. Toto především. Pak je vynulována paměť ram, nastaví se rychlost CPU a proběhne základní nastavení použitého hardware (systémových registrů). V tomto příkladu je to GPIO input/output, ale může zde být nastavení UARTu, sběrnice SPI, nebo I2C, timerů, atd. K tomu slouží systémové registry, což je vlastně adresa, se kterou se pracuje úplně stejně jako s pamětí. Může se číst i zapisovat, nahazovat jednotlivé bity a podobně. Tyto adresy jsou popsány v datasheetu STM8S103F3 v kapitole 6.2 Register map.
V nekonečné smyčce (LOOP) se pak provádi samotná činnost, zde blikání LED. Je to velmi podobné klasickému Arduinu.
Překlad a sestavení:
Po vložení zdrojáku pro blikání (do main.asm) je projekt nutno přeložit: hlavní menu-Build-Compile, nebo tlačtkem "přeložit" na nástrojové liště, viz obrázek. Pokud překlad proběhne bez chyby, je nutné projekt sestavit: hlavní menu-Build-Build, nebo tlačítkem "přeložit a sestavit", viz stejný obrázek. Tím se na disku vytvoří soubor s příponou .s19, který je již možně vypálit do mikrokontroléru.
Nahrání (vypálení) do čipu:
K nahrávání a ladění programu do vývojové desky STM8S103F3 je nutný programátor ST-Link. K tomu jsou určeny čtyři piny na ST Link/v2 vývojové desce vpravo: 3V3, SWIM, GND a NRST (propojení viz tabulka vpravo).
Již přeložený a sestavený projekt se přímo z prostředí "ST Visual Developu" nahraje spuštěním debuggeru z buď z hlavního menu Debug-Start debugging, nebo tlačítkem na nástrojové liště viz obrázek. Tím se projekt nahraje (vypálí), naskočí okno debuggeru, projekt můžete buď spustit (F5), nebo krokovat (F10).
Vypálit program do STM8 se dá i pomocí ST Visual Programmer, pokud máte k dispozici
propojení modulu STM8 s programátorem
modul STM8konektor ST-Link
3V3 napájení 3.3V3.3V
SWIM (data)SWIM
GND (zem)GND
NRST (reset)RST
pořadí pinů na konektoru ST-Link/v2 se může lišit
již "visual developem" přeložený soubor s příponou *.s19. Tento vznikne v podsložce projektu DEBUG, nebo RELEASE. Otevřete jej přes hlavní menu-File-Open a přes hlavní menu-Program-Current tab program vypálíte. Případně ještě můžete správnost vypálení ověřit pomocí hlavní menu-Verify-Current tab. Další podobnosti odhledně používání ST Visual Programmeru jsou v jeho nápovědě: hlavní menu-Help-Index.
Pozor: pokud se během nahrávání do čipu objeví chybová hláška "The device is protected" je čip uzamčen pro zápis a je třeba jej odemknout. Výrobce totiž některé moduly STM8 z nějakého důvodu uzamknul proti zápisu a nešlo by tedy do něj nahrávat kód. Odemčení pro zápis zároveň vymaže paměť ROM, nedá se tedy normálně zjistit, co tam původně bylo. Slouží to jako ochrana software.


Zdrojový kód blikače

Pokud Vám bude kód blikače připadat nějaký složitý, je to jen zdání. Většina kódu se v každém projektu opakuje, což jsou definice segmentů, deklarace konstant, inicializace zásobníku, vynulování paměti RAM a také tabulka vektorů přerušení viz šablona projektu. Samotný výkonný kód pro blikač má všeho všudy dvanáct řádků, viz hlavní smyčka LOOP.

Proměnné a konstanty ve zdrojáku jsou pouze ilustrační a v programu jinak použity nejsou. Pouze ukazují, jakým způsobem se deklarují. Proměnné jsou v segmentu ram0 a konstanty v segmentu rom. Seznam možných paměťových segmentů, viz tabulka níže. Pokud se překlad a nahrání programu do čipu povedlo, interní ledka začne blikat v rychlém rytmu.


Šablona pro nový projekt

pro vytváření vlastních projektů

Vzhledem k tomu, že každý program má více-méně stejnou strukturu, to je inicializační část (SETUP) a výkonnou část (LOOP), dá se vytvořit jakási univerzální šablona programu. V inicializační části se definují adresy segmentů, nastaví se vrchol zásobníku, vynulují se paměťi RAM a nastaví se tabulka vektorů přerušení. Toto se může převzít beze změny 1:1. V šabloně je ještě nabídnuta rychlost CPU na 2MHz, což se dá změnit, maximální rychlost je 16MHz, viz Reference manual kapitola 9).
Výkonná část nedělá nic, je zde jen prázdná smyčka. Jde jen pouze můj malý návrh, takovou šablonu si můžete napsat podle svého. Tato šablona je použita ve všech ukázkách na těchto stránkách.
Nejprve je nutno v ST Visual Develop vytvořit nový workspace plus nový projekt, nebo nový projekt do existujícího workspace. Po vytvoření otevřít soubor main.asm, vymazat celý jeho obsah a vložit do něj zdroják níže.

Segmenty paměti RAM, ram0 a ram1 neobsahují nic, jsou jen připraveny k definování proměnných. Deklarovat proměnné můžete v obou, nebo pouze v jednom. Výrobce tvrdí, že přístup do ram0 je rychlejší, protože se adresuje jediným bajtem (adresy 0x00 až 0xFF).
Úplně na konci je tabulka vektorů přerušení v segmentu vectit s popisy, které zařízení může přerušení vyvolat. Všechny vektory přerušení ukazují do funkce NonHandledInterrupt, která nedělá nic a okamžitě se vrací do hlavního programu. Pokud váš projekt žádná přerušení nepoužívá, tento segment není třeba deklarovat vůbec, stejně jako funkci interrupt NonHandledInterrupt. V případě, že nějaké přerušení je použito, musi se napsat funkce, která jej obslouží. Na těchto stránkách je několik projektů, ktré jej používají. Například svítilna spínaná pohybovým čidlem.


Přílohy

obrázky a tabulky

Obrázek 1, vývojové prostředí ST Visual Develop
ST Visual Develop


Tabulka 1, paměťové segmenty pro STM8S103F3:
  • ram0: paměť RAM0 adresa 0x00 až 0xFF (adresace jediným bajtem)
  • ram1: bezprosředně za ní navazuje RAM1 0x100 až 0x1FF
  • stack: následuje zásobník 0x200 až 0x3FF, není nutné jej deklarovat
  • eeprom: paměť EEPROM 0x4000 až 0x427F, 640 byte, také není nutno deklarovat
  • rom: prostor pro vlastní kód, ukládá se od adresy 0x8080 po 0x9FFF
  • vectit: tabulka vektorů přerušení je na 0x8000 až 0x807F, není povinná, pokud přerušení není použito

Tabulka 2, manuály výrobce
Na stránkách výrobce ST Microelectronics jsou ke stažení kromě vývojového prostředí ST Visual develop i velmí podrobné manuály v PDF (v angličtině) odledně popisu mikrokontroléru, instrukčního souboru a popisu jazyka.

Obrázek 2, modul mikrokontroléru STM8S103F3P
určení jednotlivých pinů
Napájení5V, 3V3 a zem GND
GPIOvšechny piny An, Bn, Cn, Dn
UARTTX=pin D5, RX=pin D6
SPIMISO=pin C7, MOSI=pin C6, SCK=C5, CS/SS=pin A3
I2CSCL=pin B4, SDA=pin B5
ANALOGA0=pin C4, A1=pin D2, A2=pin D3, A3=pin D5, A4=pin D6
ST-LINKpiny pro programátor SWIM a NRST
STM8
vyhledat na internetu

Tabulka 3, jak vytvořit nový projekt v prostředí ST Visual Develop:
  • V Hlavním menu vybrat File a New workspace
  • Zvolit položku Create workspace and project
  • Objeví se dialog pro zadání skupiny projektů.
  • Vyplňte pole workspace filename název skupiny projektů (například "projekty")
  • Vyyplňte pole workspace location složka pro umístění (například C:\DEVELOP)
  • Naskočí další okno pro projekt.
  • Vyplňte pole project filename název projektu [název souboru]
  • Vyplňte pole project location složka pro umístěni projektu (nejlépe C:\DEVELOP\[název souboru])
  • Do pole toolchain vyberte ST Assembler Linker.
  • Pole toolchain root ponechte nezměněno.
  • Naběhne výběr pro konkrétní CPU.
  • Vyberte v něm STM8S103F3P.

Tabulka 4, jak vložit nový projekt do existujícího workspace v prostředí ST Visual Develop:
  • V Hlavním menu vybrat File a Open workspace vyberte a otevřete soubor .stw
  • Zvolit položku Project a Add new project to workspace
  • Naskočí další okno pro nový projekt.
  • Vyberte ikonu New Project
  • Naskočí další okno pro projekt.
  • Vyplňte pole project filename název projektu [název souboru]
  • Vyplňte pole project location složka pro umístěni projektu (nejlépe C:\DEVELOP\[název souboru])
  • Do pole toolchain vyberte ST Assembler Linker.
  • Pole toolchain root ponechte nezměněno.
  • Naběhne výběr pro konkrétní CPU.
  • Vyberte v něm STM8S103F3P.

Tabulka 5, jak odenknout STM8 uzamčený pro zápis:
  • Připojte STM8 přes ST-Link k počítači
  • Spusťte ST Visual Programmer
  • Naskočí-li okno Configuration, vyberte mód a typ mikrokontroléru, což je USB, ST-LINK, SWIM a STM8S103F3
  • Klikněte na OK
  • Otevřete záložku OPTION BYTE
  • Načtěte OPTION byte pomocí menu Read - Current tab
  • V seznamu na pravé straně do pole ROP vyberte Read Out Protection OFF
  • Uložte OPTION pomocí menu Program - Current tab

Tabulka 6, automaticky generovaný zdroják mapping.inc:
        ;------------------------------------------------------
        ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD
        ; SHOULD NOT BE MANUALLY MODIFIED.
        ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED.
        ;------------------------------------------------------
        #define RAM0 1
        #define ram0_segment_start 0
        #define ram0_segment_end FF
        #define RAM1 1
        #define ram1_segment_start 100
        #define ram1_segment_end 1FF
        #define stack_segment_start 200
        #define stack_segment_end 3FF

Tabulka 7, automaticky generovaný zdroják mapping.asm:
stm8/
        ;------------------------------------------------------
        ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD
        ; SHOULD NOT BE MANUALLY MODIFIED.
        ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED.
;------------------------------------------------------
        #include "mapping.inc"

        BYTES			; The following addresses are 8 bits long
        segment byte at ram0_segment_start-ram0_segment_end 'ram0'

        WORDS			; The following addresses are 16 bits long
        segment byte at ram1_segment_start-ram1_segment_end 'ram1'

        WORDS			; The following addresses are 16 bits long
        segment byte at stack_segment_start-stack_segment_end 'stack'

        WORDS			; The following addresses are 16 bits long
        segment byte at 4000-427F 'eeprom'

        WORDS			; The following addresses are 16 bits long
        segment byte at 8080-9FFF 'rom'

        WORDS			; The following addresses are 16 bits long
        segment byte at 8000-807F 'vectit'

        END


Vzkazník - dotazy, názory, připominky, hlášení chyb, atd:
případný E-mail nebude nikde zveřejněn, uveďte jej, pouze pokud si přejete odpověď.

Elektronika, ukázky pro Arduino a STM8, plus programování v Delphi (Lazarusu).
Všechna zapojení modulů v ukázkách (viz elektrická schémata) pracují s velmi malým napětím 3.3V až 12V a neobsahují návod na napájecí zdroj. Pokud se rozhodnete některé z těchto zařízení postavit, důrazně doporučuji používat zdroje s výstupním napětím maximálně 12V, podle schválených norem platných v ČR. Autor návodů za případné škody nepřebírá žádnou odpovědnost.
nahoru
tyto stránky jsou provozovány jako hobby, bez reklam a bez sběru osobních dat (c) 2026 iisivak.xf.cz