專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

STM32驅(qū)動RA8875彩屏正確顯示圖像

作者:日照北京   來源:會員上傳   點擊數(shù):  更新時間:2014年05月20日   【字體:
經(jīng)過一段時間的折騰,在磕磕絆絆的前進(jìn)中,終于收獲了成果。我的圖像終于能正常顯示了。 先曬下美圖:
 以下記錄調(diào)試過程種遇到的問題。
1、我采用循序?qū)⒔姆椒,首先通過 image2LCD取圖像的二進(jìn)制文件,配置為:按照默認(rèn)配置(不選高位在前,RGB(565))
取出圖片的二進(jìn)制 文件保存下來。做一個上位機(jī)軟件通過串口下載到MCU,MCU再寫入到FlashRom。通訊協(xié)議自己定的。
(取的圖片文件是低位在前的,上位機(jī)軟件可以選擇高位在前。)
注:MCU從Flash中讀取數(shù)據(jù)再送RA8875顯示是低位在前。  RA8875直接控制FlashRom是高位在前的。
 
圖片下載后,通過MCU從Flash中讀取數(shù)據(jù)再送RA8875能夠顯示圖像,但速度比較慢,一屏慢慢地刷下來。
初步效果實現(xiàn)了,但這樣的速度是不行的。動手開始第二步嘗試,RA8875控制讀取FlashRom的數(shù)據(jù)顯示圖片。
把顯示上的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;
 //區(qū)塊數(shù)據(jù)存儲器直接存取模式.
 
 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);
經(jīng)過不斷的嘗試,圖像出來的是亂七八糟的,花的,不過總算出來了,說明RA8875讀取到Flash了。
下面要解決花的問題。在排除了種種因素后,我找到RA8875的一個例子,比對里面的圖片文件,發(fā)現(xiàn)圖片數(shù)據(jù)竟然是“高字節(jié)在前”,而我的文件是低字節(jié)在前。找到原因,決定嘗試,重新下載圖像,圖像再次出現(xiàn),有了小小的進(jìn)步,圖像能看出來了,不過是斜的。
  下面要解決斜的問題。我發(fā)現(xiàn)圖像的最后一行顯示了1/3,是不是和圖像的寬度有關(guān),我再次嘗試把調(diào)用命令里圖像寬度由原來的800,改為了799。這次圖像正常出來了,又一個大的進(jìn)步。仍然不理想,圖像中有許多雜色。這讓人頭疼。
        下面開始排除問題。圖像RGB的順序問題嗎?經(jīng)過反復(fù)測試,好像不是,程序問題?也沒找出來。偶然間,我發(fā)現(xiàn)上位機(jī)下傳圖像很慢,于是監(jiān)聽了串口通訊,發(fā)現(xiàn)竟然有Flash寫入失敗的情況,莫非是flash沒寫進(jìn)去,造成圖像上的雜色?極有可能,檢查程序也沒找到問題,莫非是flash的寫入速度快?原來spi是2分頻,決定改為4分頻。再次嘗試,下載正常沒有再出現(xiàn)寫入錯誤,下載速度也提高了。運(yùn)行程序,一副清晰的圖像出來了,心情忽然開朗,一種無形的預(yù)約涌上心頭。一副圖像在艱難曲折的道路上出來了。仍然有些美中不足,最下面一行有480個像素沒顯示。留下待解決。
        最后的問題已經(jīng)解決,調(diào)用函數(shù)的參數(shù)如下:
        
 RA8875_DMAReadBlock(0,0,799,479, SPI1_tu1_ADDR,800, 800,480,0,0);
最后來張完整的照片:

關(guān)閉窗口

相關(guān)文章