完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` WB-7寸模块说明书(RA8875) 电阻屏 电容屏 1、介绍【模块特点】※支持电容屏和电阻屏可选 ※背光可调控(PWM) ※四个定位孔,方便安装定位 ※提供丰富的参考资料,应用例程 ※按工业级、EMC等标准设计,稳定抗干扰性强 【技术参数】※分辨率:800 x 480(Pixel) ※接口方式:16位8080并列式MCU接口 ※LCD控制芯片:RA8875 ※电容触控芯片:GT910 ※电阻触控芯片:XPT2046 ※工作电压:3.3V(背光单独5V供电) ※工作电流:500mA ※工作温度:-20℃ ~ +70℃ ※外形尺寸:185mm x106mm 【接口说明】
拿到模块后,先给模块供两组电压——5v和3.3v(5v的GND可以不接);当背光可以正常亮起的时候,就可以接16根数据线和5根控制线,所以,你的MCU至少要有21个IO;接好线后,就可以通过修改我们提供的参考程序来让液晶屏显示。 如果你的控制板刚好是STM32系列的,而且也带FSMC,那么只需简单修改下IO,应该都可以正常驱动,其他控制板可以按照我们提供的初始化流程来初始化RA8875。 LCD的CS是PG12,是FSMC_NE4功能,因为我们LCD和NOR Flash在同一CS,所以用到了SN74LVC1G139来选择是操作LCD还是NOR Flash。 PF0则是地址最低位FSMC_A0,PD4是FSMC_NOE输出使能端,PD5是FSMC_NWE写使能端,D0~D15则是对应FSMC的16位数据线。 如果对FSMC不熟悉,请查看STM32技术参考手册,学习FSMC,通过程序说明怎么通过FSMC实现数据的读写操作,片选端接的是FSMC_NE4; 外部内存块分组地址+地址。也就是说,在块1的分组4的第0位:每一个块分组占用64MB,就是:0x4000000*3+0=0xC000000。 则FSMC的操作起始地址是0x60000000+0x0C000000= 0x6C000000 在RS端接的是FSMC_A0,则可以通过地址的最低位来控制数据和命令的发送,我们在程序中定义了两个宏来区分数据和命令的发送 #defineRA8875_REG *(__IO uint16_t *) 0x6C000002 #defineRA8875_RAM *(__IO uint16_t *) 0x6C000000 因为数据总线是16位的,所以是两字节对齐,也就是第2位来控制,当第2位为1时,实现的是指令传输,当A0为0时,实现的是数据传输。 RA8875存取周期 初始化完成后,通过调用RA8875_Clear(RED);来验证我们的移植是否正确,若液晶没有显示颜色,可以通过读取RA8875_Init()中初始化的寄存器是否都正确的初始化了,大部分情况下,都是因为IO没有对应上或接线错误引起的。 如果你的板卡没有FSMC,那么接下来的改动就比较大了。下面我们以旺宝电子的金龙107开发板为例,讲解如何用普通IO来驱动我们的7寸屏。 要驱动7寸屏,有几个重要的基础函数, RA8875_WriteCmd(uint8_t RegAddr) RA8875_WriteData(uint8_t RegValue) uint16_t RA8875_ReadData16(void) 第一个函数是写命令 /**************************************************************** ** Function name: voidRA8875_WriteCmd(uint8_t RegAddr) ** Descriptions: 写RA8875指令寄存器 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 ***************************************************************/ static void RA8875_WriteCmd(uint8_t RegAddr) { LCD_CS(0); //拉低片选段CS LCD_RD(1); //读失能 LCD_RS(1); //写入的是命令 LCD_WR(0); //拉低写入的引脚,准备写入 GPIO_Write(LCD_DATA_GPIO, RegAddr); //写入命令 RA8875_Delaly200us(); LCD_WR(1); //拉高写入的引脚,写入命令 LCD_CS(1); //拉高片选段CS } 第二个是写数据 /******************************************************************* ** Function name: void RA8875_WriteData(uint8_t RegValue) ** Descriptions: 写RA8875数据 ** input parameters: RegValue: 寄存器值 ** output parameters: 无 ** Returned value: 无 ******************************************************************/ static void RA8875_WriteData(uint8_tRegValue) { LCD_CS(0); //拉低片选段CS LCD_RD(1); //读失能 LCD_RS(0); //写入的是数据 LCD_WR(0); //拉低写入的引脚,准备写入 GPIO_Write(LCD_DATA_GPIO,RegValue);//写入数据 RA8875_Delaly200us(); LCD_WR(1); //拉高写入的引脚,写入数据 LCD_CS(1); //拉高片选段CS } 第三个是读数据 /******************************************************************** ** Function name: uint16_tRA8875_ReadData16(void) ** Descriptions: 读RA8875显存,16bit RGB ** input parameters: 无 ** output parameters: 无 ** Returned value: 读取的数据 ********************************************************************/ static uint16_t RA8875_ReadData16(void) { //IO应设为输入模式,此处省略 LCD_CS(0); //拉低片选段CS LCD_RD(0); //拉低读取的引脚,准备读取数据 LCD_RS(0); //读取的是数据 LCD_WR(1); RA8875_Delaly1ms(); t=GPIO_ReadInputData(LCD_DATA_GPIO); //读取数据 //设为输出,此处省略 } 按上面的时序写好后,就可以封装几个函数来初始化8875的寄存器了 /**************************************************************** ** Function name: voidRA8875_WriteReg(uint8_t RegAddr, uint8_t RegValue) ** Descriptions: 写RA8875寄存器 ** input parameters: RegAddr:寄存器地址 RegValue:要写入的数据 ** output parameters: 无 ** Returned value: 无 *****************************************************************/ static void RA8875_WriteReg(uint8_t RegAddr, uint8_t RegValue) { RA8875_WriteCmd(RegAddr); RA8875_WriteData(RegValue); } /****************************************************************** ** Function name: uint8_tRA8875_ReadReg(uint8_t RegAddr) ** Descriptions: 读RA8875寄存器 ** input parameters: RegAddr:寄存器地址 ** output parameters: 无 ** Returned value: 读取的寄存器值 ********************************************************************/ static uint8_t RA8875_ReadReg(uint8_t RegAddr) { uint8_t value; RA8875_WriteCmd(RegAddr); //设置寄存器地址 value = (uint8_t)RA8875_ReadData16(); // 读取寄存器值 return value; } 初始化8875 /******************************************************************* ** Function name: voidRA8875_InitHard(void) ** Descriptions: 初始化RA8875驱动芯片 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 ********************************************************************/ void RA8875_InitHard(void) { //此处省略控制LCD的IO配置 RA8875_WriteCmd(0x88); // 初始化PLL. 晶振频率为25M RA8875_Delaly1us(); // 延迟1us RA8875_WriteData(12); //PLLDIVM [7] = 0 ; PLLDIVN [4:0] = 10 RA8875_Delaly1ms(); RA8875_WriteCmd(0x89); RA8875_Delaly1us(); RA8875_WriteData(2); //PLLDIVK[2:0] = 2, 除以4 RA8875_Delaly1ms(); //为保证PLL 输出稳定,须等待一段(< 100us) RA8875_WriteReg(0x10, (1 <<3) | (1 << 1));// 16位MCU并口,65K色 RA8875_WriteReg(0x04, 0x81); RA8875_Delaly1ms(); RA8875_WriteReg(0x14, 0x63); RA8875_WriteReg(0x15, 0x00); RA8875_WriteReg(0x16, 0x03); RA8875_WriteReg(0x17, 0x03); RA8875_WriteReg(0x18, 0x0B); RA8875_WriteReg(0x19, 0xDF); RA8875_WriteReg(0x1A, 0x01); RA8875_WriteReg(0x1B, 0x1F); RA8875_WriteReg(0x1C, 0x00); RA8875_WriteReg(0x1D, 0x16); RA8875_WriteReg(0x1E, 0x00); RA8875_WriteReg(0x1F, 0x01); RA8875_WriteReg(0xC7, 0x01); RA8875_WriteReg(0x01, 0x80); RA8875_WriteReg(0x40, 0x01); // 选择绘图模式 RA8875_WriteReg(0x41, 0x00); //选择绘图模式, 目的为CGRAM RA8875_SetDispWin(0, 0,LCD_HEIGHT, LCD_WIDTH); RA8875_WriteReg(0x20, (1 <<3)); // 水平扫描方向设定 //RA8875_WriteReg(0x20, (1 <<2)); // 垂直扫描方向设定 } 初始化完后可以通过调用RA8875_ReadReg来读取初始化的寄存器是否都被正确的配置了,如果是,那么可以调用RA8875_Clear(RED),颜色正常显示的话,说明移植成功了;若读回的寄存器没有被正确的初始化,那么就要检查下自己的连接线会不会有出错和IO是否可以正常操作。 3、背光控制 要实现背光控制,需要把R23拆下,因RA8875带PWM输出,所以在LCD初始化完后,可以调用RA8875_SetBackLight(uint8_t right)来控制液晶的背光。 /******************************************************************* ** Functionname: voidRA8875_SetBackLight(uint8_t right) **Descriptions: 配置RA8875芯片的PWM1相关寄存器,控制LCD背光 ** inputparameters: right : 亮度0~255 ** outputparameters: 无 ** Returnedvalue: 无 ********************************************************************/ void RA8875_SetBackLight(uint8_tright) { if(right == 0) { RA8875_WriteReg(0x8A, 0 << 6); //关闭PWM, PWM1引脚缺省输出0 } elseif (right == BRIGHT_MAX) //最大亮度 { RA8875_WriteReg(0x8A, 1 << 6); //关闭PWM, PWM1引脚缺省输出1 } else { RA8875_WriteReg(0x8A,(1 << 7) | 7); //PWM频率为2.4k RA8875_WriteReg(0x8B, right); } } 如果设置背光后有波纹,可通过提高PWM的频率解决。 RA8875内建一组10位ADC和控制电路,可以连接4线电阻式的触控面板。因触控部分和LCD共用数据线,所以,如果显示是正常的,那么通过调用我们写好的函数,来实现触摸功能。 【电容式触摸部分】7寸电容触控芯片是GT910,要实现电容触摸,需要有4根IO。 WB-7寸LCD电容触摸接口 这4个脚对应我们7寸屏丝印的TRST 、TINT 、TSCL 、 TSDA 移植到自己的控制板的话,只需要改这4个控制IO, 1)#define SDA_H() GPIO_SetBits(GPIOB,GPIO_Pin_12); #define SDA_L() GPIO_ResetBits(GPIOB,GPIO_Pin_12); 2)#define SCL_H() GPIO_SetBits(GPIOB,GPIO_Pin_13); #define SCL_L() GPIO_ResetBits(GPIOB,GPIO_Pin_13); 3)Reset GPIO_SetBits(GPIOB,GPIO_Pin_15); 4)Int GPIO_SetBits(GPIOG,GPIO_Pin_7); 需要注意的是,GT910需要烧写一段32k左右的固件,所以,要使用电容屏,需要确保自己的系统有足够的存储空间;关于GT910的驱动移植,在我们提供的《GT9XXF驱动调试指南V1.0》已有很详细的描述,大家可以结合着手册和我们提供的例程来移植到自己的控制板。这里我简单描述下GT910的初始化流程,方便大家调试。 GT910 IIC地址 GT910_IIC_RADDR 0xBB GT910_IIC_WADDR 0xBA 1)IO初始化-> SDA=0; SCL=0 ; INT=1 ; RESET=1; 2)上电初始化-> RST=0; INT=0; delay15MS RST=1; delay5MS 3)读取IC类型gtp_get_chip_type(); 如果能读到这些数据,说明和GT910的通信是没问题了。 4)固件烧写gup_fw_download_proc(0x00) 烧写固件的过程会有些长,在我们红龙103上,烧写固件的过程大概要8秒,红龙407上是4秒,可以通过加快IIC速率来减少烧写固件的等待时间,因GT910这颗IC不带Flash,所以,固件在系统掉电后会失效,每次上电都需要烧写一次固件才能使用。 5)启动固件;gtp_fw_startup(); INT改为上拉输入,并把INT对应的IO开启外部中断(下降沿触发) 6)读取固件版本号gt910_read_version(&version_info) 7)触摸面板初始化gtp_init_panel() 调试中可能遇到的问题 1 和GT910通信失败 检查IIC通信是否正常,是否有按照上述步骤1、2执行; 2 启动固件失败 INT是否有设为上拉输入(硬件带上拉,设为普通输入也可以)和下降沿触发,并在中断函数中调用gt910_isr(); /**************************************************************** * Function Name : EXTI9_5_IRQHandler * Description : This function handles External lines 9 to 5 * Input : None * Output : None * Return : None ********************************************************************/ void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line7) != RESET) { gt910_isr(); Pen_Point.Key_Sta=Key_Down; //触摸屏被按下 EXTI_ClearITPendingBit(EXTI_Line7); } } } ` |
||
相关推荐
|
||
|
|
|
|
|
|
https://bbs.elecfans.com/jishu_1100954_1_1.html
迎新年,免费学习开发板啦! |
|
|
|
|
|
谢谢了
|
|
|
|
|
|
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11794 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 05:34 , Processed in 0.959281 second(s), Total 93, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号