niedziela, 29 stycznia 2017

[11] STM32F7 - Discovery - STemWin, Polska Czcionka

Ten post chciałbym poświęcić na opisanie generacji polskiej czcionki w bibliotece STemWin bardzo szybkim sposobem, bez konieczności zastosowania TTF. 

Na samym początku należy pobrać oprogramowanie FontCvtST. Można je znaleźć w paczce z wszystkimi sterownikami dla tego modelu dicovery. Są one do pobrania ze strony ST (link). 

Program wspomniany wcześniej znajduje się w lokalizacji:

en.stm32cubef7\STM32Cube_FW_F7_V1.5.0\Middlewares\ST\STemWin\Software


Generacja czcionki


Należy mieć czcionkę obsługująca polskie znaki, większość w windowsie spełnia te wymagania. Pod tym linkiem znajduje się całkiem przyjemna strona z różnymi czcionkami z polskimi znakami, bardzo szybkie do ściągnięcia w plikach TTF, które wystarczy zainstalować w systemie.

Teraz czas na program generujący, wspomniany wcześniej. Poniżej pokażę poszczególne kroki jakie należy w nim wykonać.


W kolejnym oknie pokaże się wybór typu czcionki jaka ma zostać wygenerowana oraz tryb dekodowania:


Następne okno pozwoli na wybranie konkretnej czcionki, jej rozmiaru oraz stylu.


Następne okno będzie zawierało wykaz poszczególnych znaków wraz z przypisanymi do nich numerami:


Tak wygeneorwaną czcionkę można teraz zapisać jako plik C (File->Save As). Następnie należy ją dołączyć do projektu np. do folderu src. 

Po jego dodaniu należy jeszcze wprowadzić modyfikację w dwóch miejscach w bibliotece GUI, tak aby czcionka była przez nią rozpoznawana.

W pliku GUI.h należy dopisać linijkę: 

  1. //W zależniści jakie czcionki będą wykorzystywane
  2. //Definicje czcionek już zdefiniowanych znajdują się
  3. //w linikach około 2000 pod tytułem Macros to be used
  4. /*********************************************************************
  5. *
  6. *       Macros to be used
  7. */
  8. //
  9. // Proportional fonts
  10. //
  11. #define GUI_FONT_8_ASCII        &GUI_Font8_ASCII
  12. //....
  13. //....
  14. //....
  15. #define GUI_ANDANA_14           &GUI_FontAndada14
  16. #define GUI_ANDANA_16           &GUI_FontAndada16
  17. #define GUI_ANDANA_44           &GUI_FontAndada44
  18. #define GUI_ANDANA_32           &GUI_FontAndada32

Druga zmiana w bibliotece znajduje się kilka linijek wcześniej, tutaj trzeba zaznaczyć że czcionka przechowywana jest w osobnym pliku wraz z jej strukturą:

  1. /*********************************************************************
  2. *
  3. *       Addresses of standard fonts
  4. */
  5. //
  6. // Proportional fonts
  7. //
  8. extern GUI_CONST_STORAGE GUI_FONT GUI_Font8_ASCII,        GUI_Font8_1;
  9. //...
  10. //...
  11. //...
  12. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada14;
  13. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada42;
  14. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada44;
  15. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada32;
  16. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada16;

Program

Po dołączeniu czcionek ich odpalenie z znakami polskimi jest bardzo proste. Wystarczy ją ustawić, po czym włączyć kodowanie UTF8, podobnie jak w HTML-u. Fragment programu wykonujący te czynności wygląda następująco:

  1. //Część inicjalizacji potrzebnych części sprzętowych 
  2. MX_LTDC_Init();                                 //Wlaczenie sterownika LTDC
  3. BSP_TS_Init(480, 272);                          //Wlaczenie modulu dotykowego
  4. __HAL_RCC_BKPSRAM_CLK_ENABLE();
  5. BSP_SDRAM_Init();                               //Wlaczenie modulu SDRAM
  6. __HAL_RCC_CRC_CLK_ENABLE();                     //Wlaczenie zegara dla CRC
  7. //Biblioteka STemWin
  8. WM_SetCreateFlags(WM_CF_MEMDEV);                //Ustawienie buforowania przed wgraniem na ekran
  9. GUI_Init();                                     //Inicjalizacja biblioteki graficznej
  10. GUI_Clear();                                    //Czyszczenie
  11. GUI_SetLayerVisEx(0, 1);                        //Wlaczenie warstwy 0
  12. GUI_SetLayerVisEx(1, 0);                        //Wylaczenie warstwy 1
  13. GUI_SetBkColor(GUI_MAKE_COLOR(Used_Kolor));     //Ustawienie koluru tla kolor custom
  14. TS_State.Layer = 2;                             //Wybranie wartstwy dla dotyku
  15. GUI_SetFont(&GUI_FontAndada16);                 //Wybranie domyslnej czcionki
  16. GUI_UC_SetEncodeUTF8();                         //Ustawienie kodowanie na UTF8
  17. GUI_DispStringAt("ŚśąęćĄĘĆóżź", 185, 5);     //Wyświetlenie tekstu

Dodatkowo do pliku main.c gdzie wywoływane będzie wypisanie tekstu można dołączyć wykorzystywane czcionki:

  1. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada14;
  2. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada16;
  3. extern GUI_CONST_STORAGE GUI_FONT GUI_FontAndada32;

Jeśli polska czcionka nie chciała by się pojawiać w tym pliku lub po wywołaniu funkcji wyświetlania znajdującej się w innym pliku to należy włączyć kodowanie UTF8 dla całego projektu, przynajmniej w eclipsie. Wykonuje się to poprzez wejście w zakładkę Window->Preferences->Workspace. Na dole w strony będzie się znajdowała kontrolka groupBox o nazwie Text file encoding. W niej należy zaznaczyć na Other z Default(Cp1250) po czym z listBoxa wybrac UTF-8. Następnie należy kliknąć OK po czym wyczyścić i zbudować projekt ponownie. Wszystkie polskie znaki zostaną zastąpione krzakami. Po ich ponownym wpisaniu program powinien działać jak należy.

Pod tym linkiem znajdują się przykładowe czcionki wygenerowane przeze mnie w wyżej wspomnianym programie.