移植st7789屏幕驅動
真的不要太簡單~
ST7789是一款高度集成的彩色TFT液晶顯示屏控制器芯片,通常用于驅動小到中等尺寸的液晶屏。例如淘寶上常見的1.4寸、1.47寸、1.69寸屏幕等等。
為什么RES引腳直接接的VCC,因為不知道具體是哪一塊出了問題。RES引腳接到推挽輸出的IO引腳后,屏幕也能點亮,但是亮度莫名其妙很低。手上幾個屏都測試了一下,都這樣。
1st7789驅動
移植
現在就開始吧,首先新建st7789.c和st7789.h文件。然后創建用于初始化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},
這個序列表使用的是這樣的數據結構:
在創建列表后編寫初始化函數,這里把gpio和spi的初始化也都放在里面了。
然后就是編寫一下寫命令和寫數據的函數,寫命令時需要設置一下DC引腳,然后寫完立即將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); }
編寫屏幕翻轉配置函數:
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);
最后再寫一下寫屏函數即可,這里為了快速刷屏,設置了比較大的緩存區。目前還不會使用XR806的DMA,學會了可以減少緩存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刷屏函數
添加
還需要添加一個刷屏函數作為測試,現在補一下。
由于1.69寸屏幕不需要設置屏幕窗口偏移量,就直接按滿屏來刷了。
void lcd_clear(uint16_t color) { st7789_flush(0, 240, 0, 320, color); }
然后在main.c里調用屏幕初始化和刷屏函數就可以啦。
3刷屏效果
展示
經過測試,手上的1.47寸屏幕和1.69寸st7789屏幕都可以正常驅動。就是偏移值和屏幕分辨率設置需要再優化一下代碼。
審核編輯:湯梓紅
-
控制器
+關注
關注
112文章
15874瀏覽量
175326 -
液晶屏
+關注
關注
18文章
697瀏覽量
42499 -
屏幕
+關注
關注
6文章
1173瀏覽量
55565 -
移植
+關注
關注
1文章
375瀏覽量
28008 -
TFT
+關注
關注
10文章
381瀏覽量
110582
原文標題:移植手表屏驅動步驟方法詳解
文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論