打印
[HMI/GUI]

Nuvoton LCD开发篇 1 -- N9H30 RGB彩屏参数

[复制链接]
740|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本章节主要围绕N9H30进行展开,简单提下N9H30的特色如下:1、ARM926EJ-S内核,主频300 MHz;2、内置64 MB DDR-II,最大 216-pin LQFP封装;3、外设:11组 UART 、SDIO/eMMC 介面、NAND Flash 介面、16/18/24bit LCD RGB控制器、2组CAN, 2組10/100Mbps 以太网口和高速USB 2.0 Host/Device等;4、支持emwin GUI图形库。LCD显示图片就是对每个像素点的填充,比如800*480的彩屏,表示一行800个像素点,总共有480行,一帧图片就是从左到右,从上到下显示,当然这个是可以修改的,默认是按这样的方式显示。

分析LCD时钟,我们主要看这些参数:水平同步时钟 HSYNC、垂直同步时钟VSYNC、有效数据使能VDEN、HBP、HFP、VBP、VFP、CLK等,这几个参数大概什么意思呢?如下这个图片写的是非常清晰的,LCD的显示过程完成一行数据输出的过程中,需要先输出行同步信号HPW、HFP,然后才输出本行可视数据,可视数据输出完成后,又有HBP。完成一行的显示,开始第二行的显示,直到输出完成480行,这样算一帧图像的显示。如果要进行下一帧图像显示时,就要先输出垂直同步时钟VSYNC,再VFP,之后又是480行的输出,最后是VBP,这样又完成了一帧的图像。




使用特权

评论回复
沙发
東南博士|  楼主 | 2025-3-29 10:12 | 只看该作者
如下图片是基于ST7796S的规格书中,针对蓝色可视区域和不可视区域,其中我们调试彩屏的时候,如果显示出现偏差,就需要去调整不可视区域,可以如下图片当成一个A4纸。
VBP=上边距,VFP=下边距,HBP=左边距,HFP=右边距。这些参数都可以在LCD规格书找到范围值,再结合实际显示去调整各个参数大小。


1225467e75715a9e62.png (70.05 KB )

1225467e75715a9e62.png

使用特权

评论回复
板凳
東南博士|  楼主 | 2025-3-29 10:13 | 只看该作者
把LCD时序和参数搞清楚了,我们来看N9H30部分,目前涉及到这些时序参数的寄存器主要就是CRTC_SIZE、CRTC_DEND、CRTC_HR、CRTC_HSYNC、CRTC_VR。其中寄存器中对

这些参数的命名有些不同,但是意思一样的。比如针对320*960的尺寸屏,参数设计如下图,这些参数需要结合规格书和彩屏显示实际效果进行微调整,把可视区域完全显示即可。
VTT、HTT就是垂直和水平总长度;
VDEND、HDEND就是垂直和水平可视区域;
HRE、HRS就是HBP的宽度;
HYSNC_E、HYSNC_S就是HPW的宽度
VRE、VRS就是VS的宽度


5541667e75740bebc7.png (374.65 KB )

5541667e75740bebc7.png

使用特权

评论回复
地板
東南博士|  楼主 | 2025-3-29 10:18 | 只看该作者
LCD_SPI初始化,就是對螢幕初始化,這裡不一定是SPI,有些螢幕是I2C的初始化,目前新唐針對這部分的初始化已經做好了很多參考設計,如下圖,我這邊採用模擬SPI來初始化LCD,參考GIANTPLUS_GPM1006來修改初始化代碼。

6169467e7587e24fda.png (146.55 KB )

6169467e7587e24fda.png

使用特权

评论回复
5
東南博士|  楼主 | 2025-3-29 10:19 | 只看该作者
一、SPI管腳進行定義
//PB12
#define SPI_CS_SET() GPIO_OpenBit(GPIOB, BIT12, DIR_OUTPUT, PULL_UP)
#define SPI_CS_HIGH GPIO_SetBit(GPIOB,BIT12)
#define SPI_CS_LOW GPIO_ClrBit(GPIOB, BIT12)
//PB15
#define SPI_SDA_SET() GPIO_OpenBit(GPIOB, BIT15, DIR_OUTPUT, PULL_UP)
#define SPI_SDA_HIGH GPIO_SetBit(GPIOB,BIT15)
#define SPI_SDA_LOW GPIO_ClrBit(GPIOB, BIT15)
//PB13
#define SPI_CLK_SET() GPIO_OpenBit(GPIOB, BIT13, DIR_OUTPUT, PULL_UP)
#define SPI_CLK_HIGH GPIO_SetBit(GPIOB,BIT13)
#define SPI_CLK_LOW GPIO_ClrBit(GPIOB, BIT13)
//PG10
#define SPI_RES_SET() GPIO_OpenBit(GPIOG, BIT10, DIR_OUTPUT, PULL_UP)
#define SPI_RES_HIGH GPIO_SetBit(GPIOG,BIT10)
#define SPI_RES_LOW GPIO_ClrBit(GPIOG,BIT10)
//PB14
#define SPI_DOUT_SET() GPIO_OpenBit(GPIOB, BIT14, DIR_INPUT, NO_PULL_UP)

#define SPI_DOUT_HIGH GPIO_SetBit(GPIOB,BIT14)
#define SPI_DOUT_LOW GPIO_ClrBit(GPIOG,BIT14)
//PJ2
#define BACK_LIGHT_SET() GPIO_OpenBit(GPIOJ, BIT2, DIR_OUTPUT, NO_PULL_UP)
#define BACK_LIGHT_HIGH GPIO_SetBit(GPIOJ,BIT2)
#define BACK_LIGHT_LOW GPIO_ClrBit(GPIOJ,BIT2)

SPI 發送移位數據

8030367e758a464b1e.png (103.17 KB )

8030367e758a464b1e.png

使用特权

评论回复
6
東南博士|  楼主 | 2025-3-29 10:19 | 只看该作者
// SPI 寫命令

4378567e758b71880d.png (93.9 KB )

4378567e758b71880d.png

使用特权

评论回复
7
東南博士|  楼主 | 2025-3-29 10:20 | 只看该作者
// SPI 寫數據

5625367e758d165e12.png (81.94 KB )

5625367e758d165e12.png

使用特权

评论回复
8
東南博士|  楼主 | 2025-3-29 10:20 | 只看该作者
SPI初始化LCD

3469467e758e65b475.png (388.47 KB )

3469467e758e65b475.png

使用特权

评论回复
9
東南博士|  楼主 | 2025-3-29 10:21 | 只看该作者
上面兩個章節完成了LCD的初始化部分,現在開始移植emwin。
找到這個目錄下N9H30_NonOS-master\SampleCode\emWin_SimpleDemo就有emwin的參考工程,把剛才寫好的LCD驅動都移植到這裡。


379467e75911a93a5.png (116.47 KB )

379467e75911a93a5.png

使用特权

评论回复
10
東南博士|  楼主 | 2025-3-29 10:21 | 只看该作者
這裡有幾個參數需要修改:
1、找到LCDConf.h ,修改LCD解析度,按實際參數來寫

8961367e7592988e0d.png (53.5 KB )

8961367e7592988e0d.png

使用特权

评论回复
11
東南博士|  楼主 | 2025-3-29 10:21 | 只看该作者
2、在GUIConf.c裡面可以設置GUI使用的緩存大小和字庫

4123767e7593d2567b.png (120.89 KB )

4123767e7593d2567b.png

使用特权

评论回复
12
東南博士|  楼主 | 2025-3-29 10:22 | 只看该作者
3、需要增加定時器,因為emwin函數有些是需要使用定時器0計數。
OS_TimeMS = 0;

sysSetTimerReferenceClock(TIMER0, 12000000);
sysStartTimer(TIMER0, 1000, PERIODIC_MODE); /* 1000 ticks/per sec ==> 1tick/1ms */
sysSetTimerEvent(TIMER0, 1, (PVOID)TMR0_IRQHandler); /* 1 tick per call back */
sysSetTimerEvent(TIMER0, 20, (PVOID)TMR0_IRQHandler_TouchTask); /* 20 ticks per call back */
sysSetLocalInterrupt(ENABLE_IRQ);
同時在中斷函數裡面做處理
void TMR0_IRQHandler(void)
{
OS_TimeMS++;
}
如上操作基本完成emwin的工程創建和LCD的移植工作。

使用特权

评论回复
13
東南博士|  楼主 | 2025-3-29 10:22 | 只看该作者
現在emwin已經移植OK,我們開始製作圖片來進行顯示到彩屏上。找到BmpCvtNuvoton.exe這個工具,再找一張圖片,使用這個工具把JPEG的圖片轉成c文件。中間的數據不管,只需要獲取bmSAM名字的圖片即可。

使用特权

评论回复
14
東南博士|  楼主 | 2025-3-29 10:23 | 只看该作者
定義 extern GUI_CONST_STORAGE GUI_BITMAP bmSAM;

6781267e7597989812.png (46.3 KB )

6781267e7597989812.png

使用特权

评论回复
15
東南博士|  楼主 | 2025-3-29 10:23 | 只看该作者
在main函數裡面參考如下操作執行即可把圖片顯示,如下程序我還做了單色顯示、字符顯示和圖片顯示操作。

9194167e7599e82764.png (129.93 KB )

9194167e7599e82764.png

使用特权

评论回复
16
東南博士|  楼主 | 2025-3-29 10:23 | 只看该作者
這邊補充個內容,有些客戶反饋需要切換螢幕,比如從橫屏改成豎屏,這個使用emwin操作非常容易,找到LCDConf.c文件,DISPLAY_ORIENTATION打開,在LCD_X_Config裡面調用即可。

3303467e759b406632.png (77.26 KB )

3303467e759b406632.png

使用特权

评论回复
17
zhouyong77| | 2025-3-30 11:24 | 只看该作者
显示分辨率低了点,要是高点就好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

385

主题

6104

帖子

34

粉丝