1. 基础信息
- LCD驱动芯片: ILI9325
- 蓝桥杯官方提供的LCD例程中有初始化函数和屏幕的显示函数.
- stm32与ILI9325通信使用的是并行i8080通信.
- 板子上只有HSE(8MHz),没有LSE!!!
- 液晶显示屏工作原理
- 配置代码参考
2. 芯片讲解
- ILI9325芯片是一个262k颜色的液晶驱动芯片,分辨率位240RGBx320,即一个点由RGB三个点构成.有172,800bytes用来存储240RGBx320的图像数据.有4种接口用来显示图片.
- 行驱动:gate-driver(G1-G320)打开关闭一行,列驱动:source-driver(S1-S720)1个点有3列,选择点的颜色.
- 蓝桥杯官方的板子没有引出ILI9325的IM[3:0] SDI SDO ENABLE DOTCLK VSYNC HSYNC FMARK信号,板子直接固定使用的是16-bit,system interface,i80通信协议.
3. 蓝桥杯官方板
- 管脚描述
- CS(PB9): 低电平有效
- RS(PB8): 寄存器选择信号,0:写寄存器地址.1:写data.
- WR/SCL(PB5): 0:使能写操作.SPI模式下:时钟同步信号SCL.
- RD(PB10): 0使能读操作.
- RESET: 直接接了stm32的复位信号.
- 通信
- system interface,16-bit并行同信.
- 读写操作
void My_LCD_WriteReg(u16 Reg_addr,u16 Reg_data){ u32 PCOUT = GPIOC->ODR; LE = 0;//避免LCD对LED的影响. CS = 0; RS = 0; WR = 1; //Ready to write address GPIOC->ODR = Reg_addr; //Wrte reg address WR = 0; WR = 1; //没有延时,说明在一个指令周期内,可以写完16-bit数据 RS = 1; //Ready to write data GPIOC->ODR = Reg_data; WR = 0; WR = 1; RS = 1; //for next CS = 1; //finish write GPIOC->ODR = PCOUT; //复原LED管脚状态.}u16 My_LCD_ReadReg(u16 Reg_addr){ u16 Read_value = 0; u32 PCOUT = GPIOC->ODR; LE = 0;//避免LCD对LED的影响. CS = 0; RS = 0; WR = 1; //Ready to write address GPIOC->ODR = Reg_addr; //Wrte reg address WR = 0; WR = 1; //没有延时,说明在一个指令周期内,可以写完16-bit数据 GPIOC->CRL = 0x44444444;//set pin floating input GPIOC->CRH = 0x44444444; RD = 0; //Ready to read data Read_value = GPIOC->IDR; RD = 1; GPIOC->CRL = 0x33333333;//set pin pp output GPIOC->CRH = 0x33333333; CS = 1; //finish write GPIOC->ODR = PCOUT; //复原LED管脚状态. return Read_value;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 读寄存器操作
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 写寄存器操作
- 读写GRAM
void LCD_WriteRAM(u16 RGB_Code) { u32 PCOUT = GPIOC->ODR; LE = 0; GPIOB->BRR = 0x0200; GPIOB->BSRR = 0x0100; GPIOB->BSRR = 0x0020; GPIOC->ODR = RGB_Code; GPIOB->BRR = 0x0020; GPIOB->BSRR = 0x0020; GPIOB->BSRR = 0x0100; GPIOB->BSRR = 0x0200; GPIOC->ODR = PCOUT;} u16 LCD_ReadRAM(void) { u16 temp; u32 PCOUT = GPIOC->ODR; //½â¾öLCD¶ÔLEDµÆÓ°Ïì. LE = 0; GPIOB->BRR = 0x0200; GPIOB->BRR = 0x0100; GPIOB->BSRR = 0x0020; GPIOC->ODR = R34; GPIOB->BRR = 0x0020; GPIOB->BSRR = 0x0020; GPIOB->BSRR = 0x0100; LCD_BusIn(); GPIOB->BRR = 0x0400; temp = GPIOC->IDR; GPIOB->BSRR = 0x0400; LCD_BusOut(); GPIOB->BSRR = 0x0200; GPIOC->ODR = PCOUT; return temp; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
4. 官方液晶例程配置
- 坐标原点:竖着放左上方.
- R01h: 配置液晶点阵的驱动方向.SM=1(与GS结合设置扫描方向).SS=0(S1->S720).
- R60h,R61h,R6Ah: (R60h)SCN[5:0]=0,NL[5:0]=0,GS=1.(R61h)NDL=0,VLE=0,REV=1,(R6Ah)VL[8:0]=0.行扫描控制,图片竖直滚动设置,灰度区电压控制.
- NL[5:0]:以8行为间隔设置驱动LCD的函数.NL[5:0]=0,LCD驱动行数8 lines.
- NDL: 设置非显示区域电压的输出级别.
- VLE: 1:使能图片垂直滚动
- REV: 1:使能图像灰度翻转,即改变0x00000-0x3FFFF的source output的优先级.
- VL[8:0]: 设置有多少行的图片垂直滚动.
- SCN[5:0]: 选择gate-driver从哪一行开始扫描. 官方设置SCN=0,SM=0,GS=1:gate-driver从G320开始扫描,扫描方向G320->G1.
- R50h-R53h: 设置窗口图片显示的其实和结束地址.HSA[7:0]=0,HEA[7:0]=0,VSA[8:0]=0,VEA[8:0]=0
- R03h: BGR=1,I/D[1:0]=11,ORG=0,AM=0,TRI=0,DFM=0.设置数据进入GRAM模式.
- AM+I/D[1:0]一起控制GRAM的更新方向,用于连续写入. AM:0 逐列扫描,1 逐行扫描.I/D:控制地址计数器递增还是递减.
- ORG: 当ORG=1时根据I/D的值改变屏幕00000h的位置.
ID=00ID=01ID=10ID=11逐行R->L,D->UL->R,D->UR->L,U->DL->R,U->D逐列R->L,D->UL->R,D->UR->L,U->DL->R,U->D
- BGR: BGR=1时以BGR的顺序写入GRAM.
- TRI,DFM: 设置数据传送进RAM的模式.
- R04h: RCV[1:0]=0,RCH[1:0]=0,RSZ[1:0]=0设置图片的缩放.例程设置无缩放.
- R08h: FP[3:0]=2,BP[3:0]=7设置前肩,后肩的行数.
- R09h: ISC[3:0]=0,PTG[1:0]=0,PTS[2:0]=0 设置非显示区域的扫描周期(减少LCD的损害)官方设置:灰度区步进行扫描.
- R0Ah: FMARKOE=0帧同步信号的使能和周期控制.官方设置:不输出帧同步信号.
R0Ch:RIM[1:0]=01,DM[1:0]=00,RM=0,ENC[2:0]=0设置接口模式.
- R0Dh:FMP[8:0]=0设置FMARK输出位置.
- {R21h,R20h}:设置光标的初始位置.
5. 标准库函数一些特殊类型定义
|
|
2022-1-20 10:41:55
评论
举报
|
|
|