= HF8V = / = SP8WJT = / = SP0106RZ =


HF-12227


PROJECT: HF-12227
DESCRIPTION: Universal Microprocessor Module STM8S003F3
STATUS: u
PROJECT START DATE: 2012
LOCALISATION: PI
DOCUMENTATION: TM HF-122xx
PCB: TPD10220
DIMENSIONS: 27 x 20 mm

UC parameters

UC NAME: STM8S003F3
CPU BRAND: ST
FAMILY: STM8
FLASH: 8K
RAM: 1K
EEPROM: 128
MAX CLOCK: 16 MHz
CPU CATALOG NUMBER: UC-143...UC-146
THN ADDRESS: 0x44 - 0x47
UC TYPE: 0x09


Wykonane moduły

PROJECTPARTIASTATUSZASTOSOWANIEPCBUC-###THN ADRREMARKS
HF-12227#1PARTIA1urezerwa/testy THOSTPD10220#1UC-1430x44
HF-12227#2PARTIA2urezerwa/testy THOSTPD10220#3UC-1440x45
HF-12227#3PARTIA3urezerwaTPD10220#4UC-1450x46
HF-12227#4PARTIA3urezerwaTPD10220#5UC-1460x47




Project Info

Mikroprocesor STM8S003F3 jest dość małym ale ciekawym CPU. Można je nabyć bardzo tanio u naszy chińskich Towarzyszy na Aliexpress, co oznacza że są bardzo dobrym wyborem (kapitalistycznym Wyzyskiwaczom z Allegro mówimy stanowcze NIE).
Ja jednak miałem już wcześniej około 30 tych układów z jakiś końcówek produkcyjnych, co wymaga testowania układów bo część jest z wylutu. Z tego powodu wykonałem moduły na uniwersalnej płytce projektu TPD10220, jest to uniwersalna plytka dla TSSOP20, dlatego montaż jest dość nieoptymalny. Dopiero później zakupiłem na Aliexpress gotowy moduł z tym procesorem (desygnator projektu HF-17599), trudno się nie skusić na ceny rzędu 2-3 PLN, chciałem też trochę podpatrzeć projekt płytki.
Obecnie mam więc 5 działających modułów i mogę na nich dowolnie eksperymentować.


Uruchomienie

Moduły HF-12227 uruchomiłem najpierw w debuggerze ST który nazywa się STVD, ma on bardzo fajną funkcję programowanbia "w locie". Pisząc w nowym assemblerze dobrze jest się go uczyć na debuggerze bo sporo rzeczy jest na początku niejasnych. Z miejsca napisałem 2 delaye i testowanie portów (zwyczajowo nazywane "Hello World"). Porty sprawdza się próbnikiem logicznym, co jest ważne gdyż część procesorów mam z wylutu i nie mam pewności czy nie były z jakiegoś odrzutu na linii produkcyjnej. Aczkolwiek uszkodzonych portów jak na razie nie wykryłem. Programowanie/debugowanie odbywa się za pomocą ST-LINK2 i protokołu SWIM. ST dostarcza także programator w swoim firmowym IDE o nazwie STVP, ale po kilku wgraniach kodu, wgrałem nowszy soft do ST-LINK2 i IDE odmówiło dalszej współpracy... oto jak dzisiaj programiści klepią oprogramowanie.

Wydajność kodu

Wydajność kodu w STM8 zaskoczyła mnie pozytywnie. Wcześniej myślałem ze będzie gorsza od AVR bo nie bedzie im się chciało pisać bardzo wydajnego zestawu rozkazów dla tak małego procesora, jednak było odwrotnie. W celu przetestowania wydajności kodu przetłumaczyłem bardzo "klasyczną", niskopoziomową funkcję WRT_HEX z HF-6030 na kod STM8. Funkcja konwertuje i wyświetla liczbę binarną w formacie hex i w AVR zabiera 11 instrukcji czyli dokładnie 22 bajty bo AVRy wszystkie (nie rozszerzone) instrukcje mają równomierne po 16 bitów:

OFFSETMNEMONICREMARKS
wrt_hex:
0000: push wreg
0002: andi wreg,0xF0
0004: swap wreg
0006: rcall bin2hex2
0008: pop wreg
000A: andi wreg,0x0F
bin2hex2:
000C: ori wreg,0x30
000E: cpi wreg,0x3A
0010: brlo hex_rdi
0012: subi wreg,-7
hex_rdi:
0012: rjmp wrt_char


W STM8 ta funkcja wygląda tak:


ADRCODEMNEMONICREMARKS
WRT_HEX:WE: A
0x9880 0x88 PUSH A
0x9881 0xA4F0 AND A,#0xf0
0x9883 0x4E SWAP A
0x9884 0xAD03 CALLR 0x9889
0x9886 0x84 POP A
0x9887 0xA40F AND A,#0x0f
0x9889 0xAA30 OR A,#0x30
0x988B 0xA13A CP A,#0x3a
0x988D 0x2502 JRC 0x9891
0x988F 0xAB07 ADD A,#0x07
0x9891 0x206D JRT 0x9900 WRT_CHAR

I ma tylko 19 bajtów. To aż 3 bajty optymalizacji! Całkiem sporo, bo to optymalizacja aż o 15.8%. W skali 8KB oznacza to zaoszczędzony dodatkowy 1KB dla kodu.
Jak widać projektanci rozkazów procesora bardzo dobrze zaalokowali krótkie 1-bajtowe opkody dla najpopularniejszych instrukcji i to bardzo zoptymalizowało kod.


Ciekawostki mikroprocesora

- STM8S003F3 automatycznie inicjuje stos przy resecie. Jeśli nie przewidujemy zimnego resetu nie trzeba pisać inicjacji stosu.
- Posiada sprzętowy BEEP, nie musimy generować tonu w pętli, wystarczy go tylko skonfigurować i właczyć/wyłączyć.
- Umożliwia wykonywanie kodu w RAMie i EEPROMie, coś czego AVRy nie potrafią. Można ładować własny program do RAMu z zewnętrznej pamięci i go wykonywać bez programowania flashu.
- Kluczowe informacje można znaleść w [1][2][3]. Ostatnia pozycja jest najmniej szczegółowa i miejscami wygląda jak ulotka reklamowa a 2 pierwsze zbyt szczegółowo napisane. Jednak bardziej mi odpowiada styl pisania dokumentacji ATMEL, tam wszystko można znaleść od razu...



Sources:
[1] RM044 - Programming Manual
[2] RM016 - Family Reference
[3] STM8S003F3 datasheet
[4] Standard HF-10220
[5] TPD10220


Prefix 122

HF Register

Microcontrollers in my constructions

UC Database - my CPU collection

Electronics

Main Page