SWM32SRET6-50 RGB565 驱动7寸800*480屏 测试记录290
发表时间:2022-10-21 08:52网址:http://glochip.com/news/ 测试设备:SWM32SRET6-50 官方开发板(官方淘宝店购买) 板载SPIFLASH一枚、SD卡接口一个、标准40pin RGB显示接口一个,支持电容及电阻触摸,电阻触摸芯片未焊,电容触摸为I2C接口。如下图(图中为5寸触摸屏,实测7寸屏加转接板也可以驱动)。 5寸触摸屏一个、7寸屏(at070tn92)加转接板一套、jlink一个。 该开发板使用的SWM32SRET6-50 MCU内置8MSDRAM,对于驱动800*480的屏已经足够了。显存占用800*480*2 = 750KByte,加一个缓冲去共1500KByte。缓冲区不是必须的,有缓冲区通过切换现存地址可以避免刷屏的效果。 测试例程使用官方例程目录为\SWM320_Lib-200727\SWM320_Lib\LCD\SimplLCD_SDRAM 1、用keil4 打开例程后,修改man.c 中的分辨率设置 #define LCD_HDOT 800 //480 //水平点数 #define LCD_VDOT 480 //272 //垂直点数 2、根据屏的参数修改RGBLCDInit 函数中的 LCD_initStruct.Hfp = 15; LCD_initStruct.Hbp = 40; LCD_initStruct.Vfp = 8; LCD_initStruct.Vbp = 8; void RGBLCDInit(void) { LCD_InitStructure LCD_initStruct;
GPIO_Init(GPIOB, PIN12, 1, 0, 0);//±³¹â¿ØÖÆ GPIO_SetBit(GPIOB, PIN12); //µãÁÁ±³¹â
PORT->PORTN_SEL0 = 0xAAAAAAAA; // PORT->PORTN_SEL1 = 0xAA;
LCD_initStruct.Interface = LCD_INTERFACE_RGB; LCD_initStruct.HnPixel = LCD_HDOT; LCD_initStruct.VnPixel = LCD_VDOT; LCD_initStruct.Hfp = 15; LCD_initStruct.Hbp = 40; LCD_initStruct.Vfp = 8; LCD_initStruct.Vbp = 8; LCD_initStruct.ClkDiv = LCD_CLKDIV_2; // LCD_initStruct.ClkAlways = 1; LCD_initStruct.SamplEdge = LCD_SAMPLEDGE_FALL; LCD_initStruct.HsyncWidth = LCD_HSYNC_2DOTCLK; LCD_initStruct.IntEOTEn = 1; LCD_Init(LCD, &LCD_initStruct); } 3、根据使用的内置SDRAM 大小为8MByte,修改void MemoryInit(void) 函数中的,内存大小设置 SDRAM_InitStruct.CellSize = SDRAM_CELLSIZE_64Mb; 4、如果需要串口输出可以修改串口端口配置 PORT_Init(PORTC, PIN2, FUNMUX0_UART0_RXD, 1); PORT_Init(PORTC, PIN3, FUNMUX1_UART0_TXD, 0); 5、还要根据开发板背光控制端口修改背光端口设置 GPIO_Init(GPIOB, PIN12, 1, 0, 0);// GPIO_SetBit(GPIOB, PIN12); // 6、SDRAM虽然是内置的,但是配置方法和外置是一样的,相关的端口除了M6、M18和M20外都不能用于其它功能。 7、DMA可以用于刷新显存,但是实测会导致闪屏,估计是对当前显存操作会导致显示短暂的中断。另外需要注意的是,调试的过程中对程序暂停,屏幕也会不正常,必须在几种颜色之间循环刷屏。应该是由于CPU停止刷屏导致的。NXP的MCU没有这个问题。这个问题会导致无法暂停查看当前运行处屏幕的状态。 8、通过修改LCD->SRCADDR = (uint32_t)LCD_Buffer;此处显存的起始地址可以实现屏幕瞬间刷新,避免从上往下刷屏的效果,这样就需要额外的SDRAM区域作为缓冲区。但是用DMA或者手动复制当前显存区域内容到缓冲区会导致黑屏,因此需要避免操作当前显存区域,只能分别刷写缓冲区和显存区的内容。 |