sobota, 2 października 2021

[27a] STM32F7 - M7 AXA Generowanie czcionek

W tym poście chciałbym opisać sposób generowania czcionek dla wyświetlacza M7 AXA. 

[Źródło: http://www.st.com/en/evaluation-tools/32f746gdiscovery.html]
[Źródło: http://www.artronic.eu/pl/p/LCD-AG-TFTSD-UART-480272C-43TP-B/997]

Ten post jest kontynuacją wcześniejszego wpisu, w którym opisałem sposób obsługi wyświetlacza sterowanego przez interfejs UART. Sposób tworzenia czcionek testowałem dla wszystkich wielkości dostępnych domyślnie na wyświetlaczu, czyli 24, 32, 48 oraz 64. 

Wygenerowane czcionki muszą być jednakowej szerokości np. Lucida Console.

Do generowania czcionek potrzebne będą programy PCToLCD2002 oraz program do zamiany wartości na ASCII Hex na BIN np. WinHex.

PCToLCD2002 jest w języku chińskim. Co powoduje wyświetlenie wszystkich znaków jako pytajniki. Opis poszczególnych funkcji można znaleźć pod tymi linkami: link1, link2


Na powyższym obrazie została wybrana wspomniana wcześniej czcionka Lucida Console w rozmiarze 64x64 (rzeczywisty rozmiar to 32x64). W polu poniżej widoku czcionki należy wprowadzić znaki do wygenerowania. Następnie należy przejść do widoku ustawień, gdzie zostaną wprowadzone ustawienia dla przygotowywanej czcionki.



Powyższe ustawienia pozwolą na wygenerowanie poprawnych znaków dla opisywanego wyświetlacza. Najważniejsza jest lewa strona okna, z prawej opisane są sposoby formatowania tekstu, który można wyświetlić w dowolny sposób.

Następnie należy wrócić do ekranu głównego przez kliknięcie przycisku akceptacji zaznaczonego czerwonym kółkiem. 


Wygenerowanie czcionki następuje przez kliknięcie przycisku zaznaczonego czerwonym kółkiem.

Tak przygotowaną czcionkę należy przenieść do pliku tekstowego, przez zaznaczenie całości i skopiowanie. 

  1.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  2.  
  3. (0) !(1) "(2) #(3) $(4) %(5) &(6) '(7)
  4.  ((8) )(9) *(10) +(11) ,(12) -(13) .(14) /(15)
  5.  0(16) 1(17) 2(18) 3(19) 4(20) 5(21) 6(22) 7(23)
  6.  8(24) 9(25) :(26) ;(27) <(28) =(29) >(30) ?(31)
  7.  @(32) A(33) B(34) C(35) D(36) E(37) F(38) G(39)
  8.  H(40) I(41) J(42) K(43) L(44) M(45) N(46) O(47)
  9.  P(48) Q(49) R(50) S(51) T(52) U(53) V(54) W(55)
  10.  X(56) Y(57) Z(58) [(59) \(60) ](61) ^(62) _(63)
  11.  `(64) a(65) b(66) c(67) d(68) e(69) f(70) g(71)
  12.  h(72) i(73) j(74) k(75) l(76) m(77) n(78) o(79)
  13.  p(80) q(81) r(82) s(83) t(84) u(85) v(86) w(87)
  14.  x(88) y(89) z(90) {(91) |(92) }(93) ~(94) (95)
  15.  
  16.  
  17. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  18. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  19. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  20. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  21. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  22. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  23. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  24. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  25. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  26. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  27. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  28. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  29. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  30. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  31. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  32. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/

W celu dodania do czcionki z polskich znaków najprościej jest zastąpić znaki niewykorzystywane w tekście przez polskie litery np. @#$%^. Tutaj wszystko zależy od potrzebnego zestawu znaków na wyświetlaczu. Dodatkowo należy pamiętać, że opisywany wyświetlacz pozwala na wyświetlenie maksymalnie 100 znaków. Co oznacza, że podmiana znaków i tak będzie konieczna.

Ich generację należy przeprowadzić pojedynczo. W przypadku generowania ich ciągiem, litery nie będą wyświetlane poprawnie:


Tak wygenerowany znak należy skopiować do pliku tekstowego z docelową czcionką. Gdzie umieszczamy go w zastępstwie za wybrany znak. Operację należy powtórzyć dla wszystkich potrzebnych znaków. 

Gdy już cała czcionka jest gotowa z pliku txt należy usunąć wszystkie niepotrzebne znaki. Dla powyższych ustawień będą to:

  1.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  2.  
  3. (0) !(1) "(2) #(3) $(4) %(5) &(6) '(7)
  4.  ((8) )(9) *(10) +(11) ,(12) -(13) .(14) /(15)
  5.  0(16) 1(17) 2(18) 3(19) 4(20) 5(21) 6(22) 7(23)
  6.  8(24) 9(25) :(26) ;(27) <(28) =(29) >(30) ?(31)
  7.  @(32) A(33) B(34) C(35) D(36) E(37) F(38) G(39)
  8.  H(40) I(41) J(42) K(43) L(44) M(45) N(46) O(47)
  9.  P(48) Q(49) R(50) S(51) T(52) U(53) V(54) W(55)
  10.  X(56) Y(57) Z(58) [(59) \(60) ](61) ^(62) _(63)
  11.  `(64) a(65) b(66) c(67) d(68) e(69) f(70) g(71)
  12.  h(72) i(73) j(74) k(75) l(76) m(77) n(78) o(79)
  13.  p(80) q(81) r(82) s(83) t(84) u(85) v(86) w(87)
  14.  x(88) y(89) z(90) {(91) |(92) }(93) ~(94) (95)
  15.  
  16.  
  17. {
  18. 0x
  19. ,
  20. },
  21. /*...*/

oraz wszystkie znaki przejścia do nowej linii. W przypadku błędnego usunięcia danych, nie będzie możliwości poprawnego wygenerowania pliku binarnego.

Po usunięcie niepotrzebnych otrzymamy coś takiego jak poniżej:

  1. 00000000000000000000000000000000
  2. 00000000000000000000000000000000
  3. 00000000000000000000000000000000
  4. 00000000000000000000000000000000
  5. 00000000000000000000000000000000
  6. 00000000000000000000000000000000
  7. 00000000000000000000000000000000
  8. 00000000000000000000000000000000
  9. 00000000000000000000000000000000
  10. 00000000000000000000000000000000
  11. 00000000000000000000000000000000
  12. 00000000000000000000000000000000
  13. 00000000000000000000000000000000
  14. 00000000000000000000000000000000
  15. 00000000000000000000000000000000
  16. 00000000000000000000000000000000
  17. 00000000000000000000000000000000
  18. 000000000007C0000007C0000007C000
  19. 0007C0000007C0000007C0000007C000
  20. 0007C0000007C0000007C0000007C000
  21. 0007C0000007C0000007C0000007C000
  22. 0007C0000007C0000007C0000007C000
  23. 0007C0000007C0000007C0000007C000
  24. 0007C0000007C0000007C0000007C000
  25. 0007C000000780000003800000038000
  26. 00038000000380000000000000000000
  27. 00000000000000000000000000000000
  28. 000FE000000FE000000FE000000FE000
  29. 000FE000000FE000000FE00000000000
  30.  
  31. /*
  32. Pozostałe znaki
  33. */

Teraz plik należy otworzyć w program winhex, gdzie zostanie on zamieniony na plik binarny.


Tak przygotowaną czcionkę należy umieścić na karcie SD w folderze Font. Z nazwą ASCXX.bin, gdzie XX to wielkość czcionki. 

Powyższy sposób działa dla wszystkich wyświetlaczy z tej rodziny (4,3, 5 oraz 7 cali). 

Problem jaki może się pojawić to błędne wyświetlanie znaków, głównie dla czcionki o rozmiarze 64. Powodem błędu wyświetlana grafika razem z czcionką 64 to np format bmp, czy za długa nazwa pliku graficznego w innym formacie (przynajmniej takie błędy dotyczyły mojej aplikacji). Aby go rozwiązać najlepiej stosować krótkie nazwy plików graficznych umieszczonych w formacie png (grafika transparenta działa bez problemów na tych wyświetlaczach lub pliki jpg) oraz unikanie formatu bmp.