Elektronika, ukázky pro STM8S103F3, plus programování v assembleru. |
|
Tato ukázka se nezabývá podrobným popisem této sběrnice, jako jsou průběhy jednotlicých signálů a podobně. To by vydalo na celý samostatný manuál s množstvím diagramů.
Jde zde pouze o její použití ve vztahu k mikrokontroléru STM8S103 a jak jej v assembleru programovat pro tento účel.
Procedura SPI_INIT nastavuje režim SPI vzhledem k hodinám. Určí se klidová úroveň hodin (SPOL) a na jaké hraně, vzestupné, či sestupné se data čtou (CPHA). Nastavuje se také rychlost
sběrnice pomocí děličky rychlosti CPU (rychlost CPU/dělička). Také zde určí pin pro výběr modulu CS/SS, v této ukázce na A3 a je aktivní v LOW. Ukázka komunikace s SPI
...
;adresy systemovych registru sbernice SPI
SPI_CR1 equ $5200 ; SPI control register 1
SPI_CR2 equ $5201 ; SPI control register 2
SPI_SR equ $5203 ; SPI status register
SPI_DR equ $5204 ; SPI data register
;systemove adresy portu A pro CS/SS (muze byt i jiny)
PA_ODR equ $5000 ; Port A data output
PA_DDR equ $5002 ; Port A data direction register
PA_CR1 equ $5003 ; Port A control register 1
;... inicializacni cast programu ...
SPI_INIT ;pro CS/SS zde vybran port A3
bset PA_DDR, #3 ;pin 3 PA3/D2/SS output
bset PA_CR1, #3 ;pin 3 PA3/D2/SS push-pull mode
bset PA_ODR, #3 ;pin 3 PA3/D2/SS high
;nastavit SPI CPOL=0 (default), CPHA=1
mov SPI_CR2, #3 ; SSM + SSI, viz poznamka dole *)1
mov SPI_CR1, #$18 ; rychlost - divider 28=master/64, 18=master/16
bset SPI_CR1, #2 ; SPI master mode
bset SPI_CR1, #0 ; CPHA=1, cteni na sestupne hrane
bset SPI_CR1, #6 ; povoli SPI
;... vykonna cast programu ...
SPI_TRAN ;posle hodnotu v A a precte hodnotu do A
ld SPI_DR, A
wait_sent btjf SPI_SR, #1, wait_sent ;cekej na odeslani
nop
wait_recv btjf SPI_SR, #0, wait_recv ;cekej na precteni
ld A, SPI_DR
ret
;... procedury zavisle na typu modulu, viz jeho datasheet
READ_REG ;precte registr ulozeny v A, hodnotu vrati v Y
bres PA_ODR, #3 ;aktivuj CS (chip select)
or A, #$80 ;nahodit priznak cteni
callr SPI_TRAN ;pozadovany registr
push A
clr A
callr SPI_TRAN ;precte prvni byte MSB
ld YH, A ;MSB
clr A
callr SPI_TRAN ;precte druhy byte LSB
ld YL, A
bset PA_ODR, #3 ;dekativuj CS (chip select)
pop A
ret
;...
WRITE_REG ;zapise do registru A, hodnotu Y
bres PA_ODR, #3 ;aktivuj CS (chip select)
and A, #$7f ;shodit priznak cteni (zapis)
callr SPI_TRAN ;pozadovany registr
push A
ld A, YH
callr SPI_TRAN ;zapise prvni byte MSB
ld A, YL
callr SPI_TRAN ;zapise druhy byte LSB
bset PA_ODR, #3 ;deaktivuj CS (chip select)
pop A
ret
k poznámce *)1: SSM (Slave Select Management) a SSI (Internal Slave Select) souvisí s řízením signálu CS/SS (výběr modulu). Nastaveno je softwarové řízení, kdy výběr modulu určujeme sami v programu. Další podrobnosti jsou v datasheetu STM8S103F3 v kapitole ohledně sběrnice SPI (v angličtině). všeobecné informaceU modulů, které jsem v rámci svých možností odladil a otestoval, jsem vytvořil prográmek, který lze formou copy-paste vytáhnout (buď celý, nebo pouze potřebné kusy kódu) a použít jej v nějaké Vaší aplikaci. Zkopírovat se musí potřebný kód, proměnné v paměti a deklarace konstant (equ).
Na stránkách výrobce ST Microelectronics je ke stažení vývojové prostředí ST Visual develop
a dále jsou zde velmí podrobné manuály v PDF (v angličtině) odledně popisu mikrokontroléru a jeho instrukčního souboru.
Každý zde uváděný zdroják má stejnou strukturu. Na začátku jsou deklarace adres použitých systémových registrů (UART, I2C, GPIO...), což je klíčové. Tyto adresy jsou popsány
jednak v datasheetu STM8, a také jsou k dispozici ve zdrojovém kódu, který je nainstalován spolu s prostředím ST Visual develop ve složce
[Program Files]\ STMicroelectronics\ st_toolset\ asm\ include\ STM8S103F.asm). Asi je možné ji deklarovat jako include, ale zde jsou ve zdrojáku
definovány pouze ty, které jsou použity. Rychlý návod jak vytvořit nový projekt v prostředí ST Visual Dvelop:
Tím se vytvoří projekt. Na levé straně se objeví strom Workspace, kde ve větvi source files otevřete main.asm, které je hlavní zdroják
projektu. Je předvyplněn o počáteční definici segmentů a tabulku přerušení. Můžete jej vyčistit a pak do něj přes copy-paste (CTRL+A - CTRL+C -> CTRL+V) vložit některé s
zde uváděných mých (nebo Vašich) zdrojáků. Soubory mapping.asm a mapping.inc systém vytvořil automaticky a není doporučeno do nich zasahovat, protože systém je interně
přepisuje. Do téhož workspace můžete vkládat více projektů, každý však musí mít svou složku. Nahrání (vypálení) programu do modulu:
Dúležité upozornění: Zde presentovaný modul mikrokontroléru má výstupy 5V, 3V3 a GND. Na výstupu 5V ve skutečnosti není 5 voltů, ale vstupní napětí, kterým celý tento modul napájíte, buď přes piny +/-, nebo přes konektor mikroUSB, což může být 4.5 - 15V. Buďte opatrní, co k tomu pinu (5V) připojíte, připojovaný modul můžete tímto zničit. Doporučuji modul napájet výhradně z 5V zdroje. |
|
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.
(c) 2026 iisivak.xf.cz |