{"id":4072,"date":"2022-02-28T12:59:41","date_gmt":"2022-02-28T10:59:41","guid":{"rendered":"https:\/\/www.dclabs.lt\/dainiaus\/?p=4072"},"modified":"2022-03-04T13:01:18","modified_gmt":"2022-03-04T11:01:18","slug":"stm32f466re-hello-world-su-lcd","status":"publish","type":"post","link":"https:\/\/www.dclabs.lt\/dainiaus\/stm32f466re-hello-world-su-lcd\/","title":{"rendered":"STM32F466RE Hello World su LCD"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Jau ra\u0161iau apie pa\u010di\u0105 prad\u017ei\u0105, <a href=\"https:\/\/www.dclabs.lt\/dainiaus\/?p=4023\">STM32F466RE Hello World su LED!<\/a>, o dabar paband\u017eiau pasiai\u0161kinti, kaip su \u0161ituo moduliu ir procesoriumi pasijungti prie LCD ir gauti t\u0105 pat\u012f &#8222;Hello world&#8221;. Solidarizuodamasis su dabartiniais \u012fvykiais ir tas Hello World bus truput\u012f kitoks. Pradedam nuo grafin\u0117s konfig\u016bracijos.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-1.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-1-1024x975.png\" alt=\"\" class=\"wp-image-4075\" width=\"425\" height=\"404\" srcset=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-1-1024x975.png 1024w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-1-300x286.png 300w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-1-768x731.png 768w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-1.png 1298w\" sizes=\"auto, (max-width: 425px) 100vw, 425px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Mums reikalingi kontaktai:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>HEARTBEAT<\/li><li>TFT_Backlight<\/li><li>TFT_SCK<\/li><li>TFT_MISO<\/li><li>TFT_MOSI<\/li><li>TFT_D-C<\/li><li>SD_CS<\/li><li>TFT_CS<\/li><li>TFT_Reset<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Kiti kontaktai ten &#8222;atsiranda&#8221; gamykli\u0161kai, pasirinkus modul\u012f. Kol kas viskas paprasta, t\u0105 HEARBEAT naudojau miks\u0117ti modulio LEDuku, kad indikuoti reikiamas operacijas, ra\u0161ymus ir pan. Indikavimo vieta kode vis kitur buvo, pagal tai, k\u0105 noriu indikuoti. Visi kiti kontaktai ai\u0161k\u016bs pagal pavadinimus. SPI konfig\u016bracija:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-2.png\" alt=\"\" class=\"wp-image-4077\" width=\"488\" height=\"395\" srcset=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-2.png 971w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-2-300x243.png 300w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-2-768x622.png 768w\" sizes=\"auto, (max-width: 488px) 100vw, 488px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Full-Duplex nereikalingas, nes i\u0161 displ\u0117jaus nieko neskaitau ir Baud Rate Prescaler gali b\u016bti ma\u017eesnis, bet \u010dia maksimali\u0173 parametr\u0173 veikimo testas. I\u0161 konfig\u016bravimo tiek, toliau pereiname prie programos. \u017dinau, kad displ\u0117jaus valdiklis yra ST7735. <a rel=\"noreferrer noopener\" href=\"http:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/ST7735_v2.1.pdf\" data-type=\"URL\" data-id=\"http:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/ST7735_v2.1.pdf\" target=\"_blank\">Valdiklio apra\u0161ymas yra \u010dia<\/a> (viena i\u0161 versij\u0173). Yra prikurta ir gatav\u0173 bibliotek\u0173, to valdiklio valdymui, bet &#8211; su biblioteka displ\u0117jus neveik\u0117, vaizdelis buvo toks:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/IMG_20220225_164132.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"461\" src=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/IMG_20220225_164132.jpg\" alt=\"\" class=\"wp-image-4082\" srcset=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/IMG_20220225_164132.jpg 576w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/IMG_20220225_164132-300x240.jpg 300w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-video\"><video height=\"786\" style=\"aspect-ratio: 1032 \/ 786;\" width=\"1032\" controls src=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/ezgif.com-gif-maker.mp4\"><\/video><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tos linijos ne d\u0117l fotografavimo\/filmavimo kadravimo ypatum\u0173, jos i\u0161 tikr\u0173j\u0173 yra. Kadangi paprastai kei\u010diant bibliotekos standartinius nustatymus vaizdelio pataisyti nepavyko, matyt ka\u017ekas priburta su inicializavimu, sugalvojau pats pasira\u0161yti displ\u0117jaus inicializavimo kod\u0105. Tam tereikia valdiklio apra\u0161ymo, kur\u012f jau \u012fd\u0117jau. Inicializavimo logika:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-3.png\" alt=\"\" class=\"wp-image-4085\" width=\"453\" height=\"413\" srcset=\"https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-3.png 1025w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-3-300x274.png 300w, https:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/image-3-768x701.png 768w\" sizes=\"auto, (max-width: 453px) 100vw, 453px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Sutinku, girto narkomano briedas. Melejonas b\u016bsen\u0173, pasirinkim\u0173 ir konfig\u016bracij\u0173. O tas &#8222;Sleep Out&#8221; rei\u0161kia &#8222;Power ON&#8221;. Bet kol da\u0117jo&#8230; Kad nei\u0161silau\u017eti smegen\u0173, metam lauk t\u0105 diagram\u0105 ir einam \u012f Command skyri\u0173. Prad\u017eiai, kad b\u016bt\u0173 suprantamiau, apsira\u0161om komandas, priskiriant standartinius sutrimpinumus.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define NOP     \t0x00 \/\/ DC = 0\n#define SWRESET \t0x01 \/\/ DC = 0\n#define RDDID   \t0x04 \/\/ DC = 0 + 1\n#define RDDST   \t0x09 \/\/ DC = 0 + 1\n#define RDDPM   \t0x0A \/\/ DC = 0 + 1\n#define RDDMADCTL       0x0B \/\/ DC = 0 + 1\n#define RDDCOLMOD       0x0C \/\/ DC = 0 + 1\n#define RDDIM   \t0x0D \/\/ DC = 0 + 1\n#define RDDSM  \t\t0x0E \/\/ DC = 0 + 1\n#define SLPIN   \t0x10 \/\/ DC = 0\n#define SLPOUT  \t0x11 \/\/ DC = 0\n#define PTLON   \t0x12 \/\/ DC = 0\n#define NORON   \t0x13 \/\/ DC = 0\n#define INVOFF   \t0x20 \/\/ DC = 0\n#define INVON   \t0x21 \/\/ DC = 0\n#define GAMSET \t\t0x26 \/\/ DC = 0 + 1\n#define DISPOFF \t0x28 \/\/ DC = 0\n#define DISPON  \t0x29 \/\/ DC = 0\n#define CASET   \t0x2A \/\/ DC = 0 + 1\n#define RASET   \t0x2B \/\/ DC = 0 + 1\n#define RAMWR   \t0x2C \/\/ DC = 0 + 1\n#define RAMRD   \t0x2E \/\/ DC = 0 + 1\n#define PTLAR   \t0x30 \/\/ DC = 0 + 1\n#define TEOFF  \t\t0x34 \/\/ DC = 0\n#define TEON  \t\t0x35 \/\/ DC = 0 + 1\n#define MADCTL  \t0x36 \/\/ DC = 0 + 1\n#define IDMOFF  \t0x38 \/\/ DC = 0\n#define IDMON  \t\t0x39 \/\/ DC = 0\n#define COLMOD  \t0x3A \/\/ DC = 0 + 1\n#define FRMCTR1  \t0xB1 \/\/ DC = 0 + 1\n#define FRMCTR2  \t0xB2 \/\/ DC = 0 + 1\n#define FRMCTR3  \t0xB3 \/\/ DC = 0 + 1\n#define INVCTR  \t0xB4 \/\/ DC = 0 + 1\n#define DISSET5  \t0xB6 \/\/ DC = 0 + 1\n#define PWCTR1  \t0xC0 \/\/ DC = 0 + 1\n#define PWCTR2  \t0xC1 \/\/ DC = 0 + 1\n#define PWCTR3  \t0xC2 \/\/ DC = 0 + 1\n#define PWCTR4  \t0xC3 \/\/ DC = 0 + 1\n#define PWCTR5  \t0xC4 \/\/ DC = 0 + 1\n#define VMCTR1  \t0xC5 \/\/ DC = 0 + 1\n#define VMOFCTR  \t0xC7 \/\/ DC = 0 + 1\n#define WRID2\t  \t0xD1 \/\/ DC = 0 + 1\n#define WRID3   \t0xD2 \/\/ DC = 0 + 1\n#define PWCTR6   \t0xFC \/\/ DC = 0 + 1\n#define NVCTR1   \t0xD9 \/\/ DC = 0 + 1\n#define NVCTR2   \t0xDE \/\/ DC = 0 + 1\n#define NVCTR3   \t0xDF \/\/ DC = 0 + 1\n#define RDID1   \t0xDA \/\/ DC = 0 + 1\n#define RDID2   \t0xDB \/\/ DC = 0 + 1\n#define RDID3   \t0xDC \/\/ DC = 0 + 1\n#define GAMCTRP1   \t0xE0 \/\/ DC = 0 + 1\n#define GAMCTRN1   \t0xE1 \/\/ DC = 0 + 1\n#define EXTCTRL   \t0xF0 \/\/ DC = 0 + 1\n#define VCOM4L   \t0xFF \/\/ DC = 0 + 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u010cia komandos i\u0161 apra\u0161ymo, o komentarus pasira\u0161iau kad \u017eino\u010diau ar tai yra tik komanda ar ji dar turi koki\u0173 parametr\u0173, it tuo pa\u010diu kaip jungin\u0117ti TFT_D-C kontakt\u0105. Jeigu tik komanda &#8211; DC = 0, jeigu komanda turi dar ir papildomus parametrus DC = 1, tai ten kur yra 0 + 1 rei\u0161kia komanda tur\u0117s papildom\u0173 duomen\u0173. O toliau skaitom apra\u0161ym\u0105 ir paeiliui renkam\u0117s pagal savo supratim\u0105 ir logik\u0105, ko gali reik\u0117ti. Geras dalykas tame, kad ka\u017eko nesukonfog\u016bravus, po HW RESET ir\/arba SW RESET displ\u0117jaus valdiklis pasiima defaultinius nustatymus, tai gal ka\u017ek\u0105 ir praleidau, bet tam reik\u0117s papildom\u0173 eksperiment\u0173.  Vis\u0105 ta inicializavim\u0105 suki\u0161au \u012f &#8222;void TFT_start_init(void)&#8221;. Pasianalizuojam.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\tHAL_GPIO_WritePin(GPIOB, TFT_Reset_Pin, RESET);\t\/\/ RS - active low, thus resetting display with low\n\tHAL_Delay(20);\t\t\t\t\t\/\/ Min reset time 10 ms, doubled to be sure\n\tHAL_GPIO_WritePin(GPIOB, TFT_Reset_Pin, SET);\/\/ RS - active low, thus defaulting to high\n\tHAL_Delay(120);\t\t\t\t\t\t\t\t\/\/ After HW reset time 120 ms\n\n\tSPI_sendCommand(SWRESET);\t\t\t\t\t\t\/\/ 0x01\n\tHAL_Delay(120);\t\t\t\t\t\t\t\t\t\/\/ After SWRESET time 120 ms\n\n\tSPI_sendCommand(SLPOUT);\t\t\t\t\t\t\/\/ 0x11\n\tHAL_Delay(120);\t\t\t\t\t\t\t\t\t\/\/ After SLPOUT time 120 ms<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beje, komentarus ka\u017ekaip beveik visada ra\u0161au angli\u0161kai&#8230; Taip patogiau. Taigi, patampom u\u017e RESETo, tada palaukiam 120 ms, kad displ\u0117jaus valdiklis persikraut sp\u0117t\u0173, tada darom programin\u012f perkrovim\u0105 SWRESET komanda (nesu tikras, kad b\u016btina, turb\u016bt u\u017etenka HWRESET). Dar palaukiam, kad sp\u0117t\u0173 persikrauti. Tada \u012fjungiam vidinius valdiklio modulius (\u012ftamp\u0173 generatorius, da\u017enio generatorius ir kt.) komanda SLPOUT. Dar palaukiam, kad sp\u0117t\u0173 \u012fsijungti. Laikai paimti i\u0161 apra\u0161ymo. Viskas, dabar jau ekraniuko valdiklis \u012fsijung\u0117 ir laukia konfig\u016bracijos. Einam per komandas, skaitom apra\u0161ymus ir pagal savo supratim\u0105 dedam \u012f komand\u0173 s\u0105ra\u0161\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\tSPI_sendCommand(FRMCTR1);\t\t\t\t\t\t\/\/ 0xB1\n\tuint8_t FRMCTR1data&#91;] = { 0x03, 0x01, 0x01 };\n\tSPI_sendData(FRMCTR1data, sizeof(FRMCTR1data));\n\n\tSPI_sendCommand(FRMCTR2);\t\t\t\t\t\t\/\/ 0xB2\n\tuint8_t FRMCTR2data&#91;] = { 0x03, 0x01, 0x01 };\n\tSPI_sendData(FRMCTR2data, sizeof(FRMCTR2data));\n\n\tSPI_sendCommand(FRMCTR3);\t\t\t\t\t\t\/\/ 0xB3\n\tuint8_t FRMCTR3data&#91;] = { 0x03, 0x01, 0x01, 0x03, 0x01, 0x01 };\n\tSPI_sendData(FRMCTR3data, sizeof(FRMCTR3data));\n\n\tSPI_sendCommand(INVCTR);\t\t\t\t\t\t\/\/ 0xB4\n\tuint8_t INVCTRdata&#91;] = { 0x07 };\n\tSPI_sendData(INVCTRdata, sizeof(INVCTRdata));\n\n\tSPI_sendCommand(PWCTR1);\t\t\t\t\t\t\/\/ 0xC0\n\tuint8_t PWCTR1data&#91;] = { 0x1D, 0x70, };\t\/\/ 1D = 3,35 V 0x11 = 1 uA\n\tSPI_sendData(PWCTR1data, sizeof(PWCTR1data));\n\n\tSPI_sendCommand(PWCTR2);\t\t\t\t\t\t\/\/ 0xC1\n\tuint8_t PWCTR2data&#91;] = { 0x05 };\t\t\t\t\/\/\n\tSPI_sendData(PWCTR2data, sizeof(PWCTR2data));\n\n\tSPI_sendCommand(PWCTR3);\t\t\t\t\t\t\/\/ 0xC2\n\tuint8_t PWCTR3data&#91;] = { 0x03, 0x00 };\t\t\t\/\/\n\tSPI_sendData(PWCTR3data, sizeof(PWCTR3data));\n\n\tSPI_sendCommand(PWCTR4);\t\t\t\t\t\t\/\/ 0xC3\n\tuint8_t PWCTR4data&#91;] = { 0x03, 0x00 };\t\t\t\/\/\n\tSPI_sendData(PWCTR4data, sizeof(PWCTR4data));\n\n\tSPI_sendCommand(PWCTR5);\t\t\t\t\t\t\/\/ 0xC4\n\tuint8_t PWCTR5data&#91;] = { 0x03, 0x00 };\t\t\t\/\/\n\tSPI_sendData(PWCTR5data, sizeof(PWCTR5data));\n\n\tSPI_sendCommand(VMCTR1);\t\t\t\t\t\t\/\/ 0xC4\n\tuint8_t VMCTR1data&#91;] = { 0x20, 0x64 };\t\t\t\/\/\n\tSPI_sendData(VMCTR1data, sizeof(VMCTR1data));\n\n\tSPI_sendCommand(INVOFF);\t\t\t\t\t\t\/\/ Color inversion\n\n\tSPI_sendCommand(MADCTL);\t\t\t\t\t\t\/\/ 0x36\n\tuint8_t MADCTLdata&#91;] = { 0x08 };\t\t\t\t\/\/\n\tSPI_sendData(MADCTLdata, sizeof(MADCTLdata));\n\n\tSPI_sendCommand(COLMOD);\t\t\t\t\t\t\/\/ 0x3A\n\tuint8_t COLMODdata&#91;] = { 0x05 };\t\t\t\t\/\/\n\tSPI_sendData(COLMODdata, sizeof(COLMODdata));\n\n\tSPI_sendCommand(CASET);\t\t\t\t\t\t\t\/\/ 0x2A\n\tuint8_t CASETdata&#91;] = { 0x00, 0x00, 0x00, 0x00 };\t\t\t\t\/\/\n\tSPI_sendData(CASETdata, sizeof(CASETdata));\n\n\tSPI_sendCommand(RASET);\t\t\t\t\t\t\t\/\/ 0x2B\n\tuint8_t RASETdata&#91;] = { 0x00, 0x00, 0x00, 0x00 };\t\t\t\t\/\/\n\tSPI_sendData(RASETdata, sizeof(RASETdata));<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kai kurios i\u0161 j\u0173 yra b\u016btinos, kai kurios \u010dia yra tik tam, kad naudosiu jas bandyme, o ne vien defaultines reik\u0161mes. Detaliau bus apra\u0161ymuose, a\u0161 tik papasakosiu apie pagrindinius dalykus. Atsimenate t\u0105 paveiksliuk\u0105 su br\u016bk\u0161niais, taip, \u0161itas dalykas susitvark\u0117 sud\u0117jus teisingus parametrus \u012f FRMCTR1-2-3. \u0160itie registrai atsakingi u\u017e kadravim\u0105, sinchronizavim\u0105 ir susijus\u012f vaizdo generavim\u0105, tod\u0117l netinkami parametrai juose sugadina vaizdel\u012f. PWCTR1-2-3-4-5 &#8211; ka\u017ekas apie \u012ftampas ir sroves, i\u0161 apra\u0161ymo taip ir nesupratau, kokie konkre\u010diai turi b\u016bti ir kaip juos parinkti, turb\u016bt tas dalykas nustatomas pagal matricos tip\u0105, kurio a\u0161 ne\u017einau, taigi pa\u0117miau tokias vidutines arba palubinsko vertes. INVOFF komanda i\u0161jungia spalv\u0173 inversij\u0105, \u012fd\u0117jau inicializavime, nes po to cikle dar \u012fjungiau inversij\u0105. Bet ir inicializavime \u0161ita komanda neb\u016btina, po HW\/SW RESET ji jau b\u016bna i\u0161jungta pagal nutyl\u0117jim\u0105. CASET RASET &#8211; ka\u017ekokie kosminiai parametrai, \u012f kuriuos displ\u0117jus kol kas niekaip nereaguoja :D. Turb\u016bt reaguos, kai reiks pai\u0161yti rimtesn\u0119 grafik\u0105, paveiksliuk\u0105 ar video, d\u0117l to kol kas dumenyse tik nuliai. Ir dar liko COLMOD, 0x05 nustatymas valdiklio interfeisui, 16 bit\u0173 ta\u0161kui (pikseliui). Su 18 b\/pix &#8211; atsiranda artefaktai. Matyt irgi priklauso tik nuo matricos, tiksliau nuo jos pajungimo \u0161leifo plo\u010dio. Ir paskutin\u0117s dvi komandos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\tSPI_sendCommand(NORON);\t\t\t\t\t\t\t\/\/ 0x13\n\tHAL_Delay(10);\n\n\tSPI_sendCommand(DISPON);\t\t\t\t\t\t\/\/ 0x29\n\tST7735_FillScreen(ST7735_COLOR565(0, 0, 0));\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">NORON &#8211; Normal ON, irgi neb\u016btina, nes po RESET i\u0161 karto toks ir pasidaro, o vat DISPON tiesiog \u012fjungia vaizd\u0105 displ\u0117juje (Display ON). O teisingai sukonfig\u016bravus displ\u0117j\u0173, toliau jau galima naudoti bibliotekos komandas, nors turb\u016bt ir jas pasira\u0161ysiu savaip&#8230; Bet jau turime teising\u0105 vaizdel\u012f:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-video\"><video height=\"528\" style=\"aspect-ratio: 450 \/ 528;\" width=\"450\" controls src=\"http:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/U-LCD.mp4\"><\/video><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tik vietoje \u012fprastinio &#8222;Hello World&#8221; kuo geriausi palink\u0117jimai Ukrainai.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O <a href=\"http:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/LCD-Hello-World.zip\" data-type=\"URL\" data-id=\"http:\/\/www.dclabs.lt\/dainiaus\/wp-content\/uploads\/2022\/02\/LCD-Hello-World.zip\">\u010dia yra visi projekto failai<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jau ra\u0161iau apie pa\u010di\u0105 prad\u017ei\u0105, STM32F466RE Hello World su LED!, o dabar paband\u017eiau pasiai\u0161kinti, kaip su \u0161ituo moduliu ir procesoriumi pasijungti prie LCD ir gauti t\u0105 pat\u012f &#8222;Hello world&#8221;. Solidarizuodamasis su dabartiniais \u012fvykiais ir tas Hello World bus truput\u012f kitoks. Pradedam nuo grafin\u0117s konfig\u016bracijos. Mums reikalingi kontaktai: HEARTBEAT TFT_Backlight TFT_SCK TFT_MISO TFT_MOSI TFT_D-C SD_CS TFT_CS&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[],"class_list":["post-4072","post","type-post","status-publish","format-standard","hentry","category-stm32"],"_links":{"self":[{"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/posts\/4072","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/comments?post=4072"}],"version-history":[{"count":23,"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/posts\/4072\/revisions"}],"predecessor-version":[{"id":4135,"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/posts\/4072\/revisions\/4135"}],"wp:attachment":[{"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/media?parent=4072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/categories?post=4072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dclabs.lt\/dainiaus\/wp-json\/wp\/v2\/tags?post=4072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}