移植st7789屏幕驅(qū)動(dòng)
真的不要太簡(jiǎn)單~
ST7789是一款高度集成的彩色TFT液晶顯示屏控制器芯片,通常用于驅(qū)動(dòng)小到中等尺寸的液晶屏。例如淘寶上常見(jiàn)的1.4寸、1.47寸、1.69寸屏幕等等。
為什么RES引腳直接接的VCC,因?yàn)椴恢谰唧w是哪一塊出了問(wèn)題。RES引腳接到推挽輸出的IO引腳后,屏幕也能點(diǎn)亮,但是亮度莫名其妙很低。手上幾個(gè)屏都測(cè)試了一下,都這樣。
1st7789驅(qū)動(dòng)
移植
現(xiàn)在就開(kāi)始吧,首先新建st7789.c和st7789.h文件。然后創(chuàng)建用于初始化st7789芯片的命令序列表。
static lcd_init_cmd_t st7789_init_cmds[] = { {0x01, {0}, 0x80, 120}, /* Sleep Out */ {0x11, {0}, 0x80, 120}, /* Memory Data Access Control, MX=MV=1, MY=ML=MH=0, RGB=0 */ {0x36, {0x00}, 1}, /* Interface Pixel Format, 16bits/pixel for RGB/MCU interface */ {0x3A, {0x05}, 1},
這個(gè)序列表使用的是這樣的數(shù)據(jù)結(jié)構(gòu):
在創(chuàng)建列表后編寫(xiě)初始化函數(shù),這里把gpio和spi的初始化也都放在里面了。
然后就是編寫(xiě)一下寫(xiě)命令和寫(xiě)數(shù)據(jù)的函數(shù),寫(xiě)命令時(shí)需要設(shè)置一下DC引腳,然后寫(xiě)完立即將DC引腳切換回高電平。
static void st7789_send_cmd(uint8_t cmd) { gpio_set_level(disp_pin_dc, 0); dirver_spi_send_data(&cmd, 1); gpio_set_level(disp_pin_dc, 1); } static void st7789_send_data(void *data, uint16_t length) { dirver_spi_send_data(data, length); }
編寫(xiě)屏幕翻轉(zhuǎn)配置函數(shù):
printf("Display orientation: %s ", orientation_str[orientation]); uint8_t data[] = {0xC0, 0x00, 0x60, 0xA0}; printf("0x36 command value: 0x%02X ", data[orientation]); st7789_send_cmd(ST7789_MADCTL); st7789_send_data((void *)&data[orientation], 1);
最后再寫(xiě)一下寫(xiě)屏函數(shù)即可,這里為了快速刷屏,設(shè)置了比較大的緩存區(qū)。目前還不會(huì)使用XR806的DMA,學(xué)會(huì)了可以減少緩存RAM的大小。
uint8_t data[4] = {0}; uint16_t offsetx1 = x1; uint16_t offsetx2 = x2; uint16_t offsety1 = y1; uint16_t offsety2 = y2; #if (TFT_DISPLAY_OFFSETS) offsetx1 += TFT_DISPLAY_X_OFFSET; offsetx2 += TFT_DISPLAY_X_OFFSET; offsety1 += TFT_DISPLAY_Y_OFFSET; offsety2 += TFT_DISPLAY_Y_OFFSET;
2刷屏函數(shù)
添加
還需要添加一個(gè)刷屏函數(shù)作為測(cè)試,現(xiàn)在補(bǔ)一下。
由于1.69寸屏幕不需要設(shè)置屏幕窗口偏移量,就直接按滿屏來(lái)刷了。
void lcd_clear(uint16_t color) { st7789_flush(0, 240, 0, 320, color); }
然后在main.c里調(diào)用屏幕初始化和刷屏函數(shù)就可以啦。
3刷屏效果
展示
經(jīng)過(guò)測(cè)試,手上的1.47寸屏幕和1.69寸st7789屏幕都可以正常驅(qū)動(dòng)。就是偏移值和屏幕分辨率設(shè)置需要再優(yōu)化一下代碼。
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
114文章
16821瀏覽量
182135 -
液晶屏
+關(guān)注
關(guān)注
18文章
723瀏覽量
43527 -
屏幕
+關(guān)注
關(guān)注
7文章
1206瀏覽量
56252 -
移植
+關(guān)注
關(guān)注
1文章
391瀏覽量
28500 -
TFT
+關(guān)注
關(guān)注
10文章
387瀏覽量
111979
原文標(biāo)題:移植手表屏驅(qū)動(dòng)步驟方法詳解
文章出處:【微信號(hào):gh_79acfa3aa3e3,微信公眾號(hào):全志在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
st7789軟件包不能添加是怎么回事?
如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外設(shè)與ST7789通信
STM32 SPI如何驅(qū)動(dòng)ST7789 LCD ISP TFT液晶屏幕?
實(shí)現(xiàn)ST7789圖像顯示的方法
請(qǐng)問(wèn)CH579可以使用LVGL庫(kù)嗎?可以通過(guò)SPI驅(qū)動(dòng)ST7789屏嗎?
求助,請(qǐng)問(wèn)CH579硬件SPI可以驅(qū)動(dòng)ST7789屏嗎?
在全志XR806上移植st7789屏幕驅(qū)動(dòng)
STM32單片機(jī)基礎(chǔ)17——使用硬件SPI驅(qū)動(dòng)TFT-LCD(ST7789)

【STM32Cube_17】使用硬件SPI驅(qū)動(dòng)TFT-LCD(ST7789)

STM32:FSMC驅(qū)動(dòng)TFTLCD(ST7789)

使用Visuino程序?qū)SD1331 OLED和ST7789顯示器連接到Arduino

讓我們?yōu)锳rduino和ST7789顯示器設(shè)計(jì)一個(gè)盾牌

【XR806開(kāi)發(fā)板試用】移植st7789屏幕驅(qū)動(dòng)

評(píng)論