= 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
| PROJECT | PARTIA | STATUS | ZASTOSOWANIE | PCB | UC-### | THN ADR | REMARKS |
| HF-12227#1 | PARTIA1 | u | rezerwa/testy THOS | TPD10220#1 | UC-143 | 0x44 | |
| HF-12227#2 | PARTIA2 | u | rezerwa/testy THOS | TPD10220#3 | UC-144 | 0x45 | |
| HF-12227#3 | PARTIA3 | u | rezerwa | TPD10220#4 | UC-145 | 0x46 | |
| HF-12227#4 | PARTIA3 | u | rezerwa | TPD10220#5 | UC-146 | 0x47 | |
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:
| OFFSET | MNEMONIC | REMARKS |
| 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:
| ADR | CODE | MNEMONIC | REMARKS |
| 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