专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

STM32驱动RA8875彩屏正确显示图像

作者:日照北京   来源:会员上传   点击数:  更新时间:2014年05月20日   【字体:
经过一段时间的折腾,在磕磕绊绊的前进中,终于收获了成果。我的图像终于能正常显示了。 先晒下美图:
 以下记录调试过程种遇到的问题。
1、我采用循序将近的方法,首先通过 image2LCD取图像的二进制文件,配置为:按照默认配置(不选高位在前,RGB(565))
取出图片的二进制 文件保存下来。做一个上位机软件通过串口下载到MCU,MCU再写入到FlashRom。通讯协议自己定的。
(取的图片文件是低位在前的,上位机软件可以选择高位在前。)
注:MCU从Flash中读取数据再送RA8875显示是低位在前。  RA8875直接控制FlashRom是高位在前的。
 
图片下载后,通过MCU从Flash中读取数据再送RA8875能够显示图像,但速度比较慢,一屏慢慢地刷下来。
初步效果实现了,但这样的速度是不行的。动手开始第二步尝试,RA8875控制读取FlashRom的数据显示图片。
把显示上的PWM口线悬空(注:MCU读取时PWM要接3.3V)。配置RA8875的控制命令。
void RA8875_DMAReadBlock(uint32_t _usSSAR,uint16_t _usSPWR, uint16_t _usBHR,uint16_t _usBWR,uint16_t _usCURH,uint16_t _usCURV)
{
 uint8_t ucFB=0;
 //区块数据存储器直接存取模式.
 
 ucFB = RA8875_ReadReg(0xE0);
 
 
  RA8875_WriteReg(0x30, 0);
  RA8875_WriteReg(0x31, 0);
  RA8875_WriteReg(0x32, 0);
  RA8875_WriteReg(0x33, 0);
 
  RA8875_WriteReg(0x34, (uint8_t)800);
  RA8875_WriteReg(0x35, 800>>8);
  RA8875_WriteReg(0x36, (uint8_t)480);
  RA8875_WriteReg(0x37, 480>>8);
 
   RA8875_WriteReg(0x46, (uint8_t)_usCURH);
  RA8875_WriteReg(0x47, _usCURH>>8);
  RA8875_WriteReg(0x48, (uint8_t)_usCURV);
  RA8875_WriteReg(0x49, _usCURV>>8);
  
 
   
  
 
 //SF_CS0:字库。 SF_CS1:图库。
 //可以用 RA8875_WriteReg(0x05, (1 << 7) | (0 << 6) | (1 << 5) | (1 << 3) | (1 << 2) | (0 << 1) | 0);
RA8875_WriteReg(0x05, (1 << 7) | (0 << 6) | (0 << 5) | (0 << 3) | (1 << 2) | (0 << 1) | 0);

 
  RA8875_WriteReg(0xB0, _usSSAR);
  RA8875_WriteReg(0xB1, _usSSAR>>8);
  RA8875_WriteReg(0xB2, _usSSAR>>16);
 
  RA8875_WriteReg(0xB4, _usBHR);
  RA8875_WriteReg(0xB5, _usBHR>>8);
 
  RA8875_WriteReg(0xB6, _usBWR);
  RA8875_WriteReg(0xB7, _usBWR>>8);
 
  RA8875_WriteReg(0xB8, _usSPWR);
  RA8875_WriteReg(0xB9, _usSPWR>>8);
 
  ucFB = RA8875_ReadReg(0xBF);
  RA8875_WriteReg(0xBF, ucFB|0x03);
 
   //////RA8875_WriteReg(0xBF, ucFB|0x03);

  ucFB = RA8875_ReadReg(0xBF);
  while(ucFB & 0x01==1)
  {
   ucFB = RA8875_ReadReg(0xBF);
  }
//  RA8875_WriteReg(0x46, _usX);
//  RA8875_WriteReg(0x47, _usX >> 8);
//  RA8875_WriteReg(0x48, _usY);
//  RA8875_WriteReg(0x49, _usY >> 8);
经过不断的尝试,图像出来的是乱七八糟的,花的,不过总算出来了,说明RA8875读取到Flash了。
下面要解决花的问题。在排除了种种因素后,我找到RA8875的一个例子,比对里面的图片文件,发现图片数据竟然是“高字节在前”,而我的文件是低字节在前。找到原因,决定尝试,重新下载图像,图像再次出现,有了小小的进步,图像能看出来了,不过是斜的。
  下面要解决斜的问题。我发现图像的最后一行显示了1/3,是不是和图像的宽度有关,我再次尝试把调用命令里图像宽度由原来的800,改为了799。这次图像正常出来了,又一个大的进步。仍然不理想,图像中有许多杂色。这让人头疼。
        下面开始排除问题。图像RGB的顺序问题吗?经过反复测试,好像不是,程序问题?也没找出来。偶然间,我发现上位机下传图像很慢,于是监听了串口通讯,发现竟然有Flash写入失败的情况,莫非是flash没写进去,造成图像上的杂色?极有可能,检查程序也没找到问题,莫非是flash的写入速度快?原来spi是2分频,决定改为4分频。再次尝试,下载正常没有再出现写入错误,下载速度也提高了。运行程序,一副清晰的图像出来了,心情忽然开朗,一种无形的预约涌上心头。一副图像在艰难曲折的道路上出来了。仍然有些美中不足,最下面一行有480个像素没显示。留下待解决。
        最后的问题已经解决,调用函数的参数如下:
        
 RA8875_DMAReadBlock(0,0,799,479, SPI1_tu1_ADDR,800, 800,480,0,0);
最后来张完整的照片:

关闭窗口

相关文章