久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4249|回復: 8
打印 上一主題 下一主題
收起左側

[完結撒花]移植ST7789V代碼從單片機到Cortex-M4 LCD出現雪花屏

[復制鏈接]
跳轉到指定樓層
樓主
ID:687759 發表于 2022-5-3 19:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 余金渠 于 2022-5-4 13:02 編輯

五一調試了以前買的LCD屏淘寶鏈接
商家給的資料只有51的我用51測試可以正常顯示于是乎我想移植到HC32F460(Cortex-M4)中不過調試了2天半只是得到了個雪花屏的結果。
由于手上沒有合適的拍攝工具只能給張差不多的圖片

而且這是在初始化階段就會出現的而不是調用顯示字符函數時出現的,我初始化的參數全是照著51代碼寫的不知道是不是對齊的問題
后天就要去學校了在此把代碼發出,不要求各位大佬給出完整解決方案,給個思路就行用以幫助我在下周的調試。希望能得到大家的回復。
我把代碼和商家給的資料放在百度網盤了就不站論壇的空間了
鏈接:https://pan.baidu.com/s/1tMcx3yPxhYUFOMei0TagDQ
提取碼:jgr4

還有初始化單片機代碼貼在下面
  1. #include "lcd_init.h"


  2. void LCD_GPIO_Init(void)
  3. {
  4.         stc_port_init_t stcPortInit;
  5.     /* configuration structure initialization */
  6.     MEM_ZERO_STRUCT(stcPortInit);

  7.     stcPortInit.enPinMode = Pin_Mode_Out;
  8.     stcPortInit.enExInt = Enable;
  9.     stcPortInit.enPullUp = Enable;

  10. //    PORT_Init(LCD_PIN_PORT , LCD_BLK_PIN | LCD_RST_PIN | LCD_DC_PIN | LCD_SCLK_PIN | LCD_MOSI_PIN
  11. //        | LCD_CS_PIN, &stcPortInit);
  12.         PORT_Init(LCD_PIN_PORT , LCD_BLK_PIN | LCD_RST_PIN | LCD_DC_PIN , &stcPortInit);

  13.         PORT_Unlock();
  14.     M4_PORT->PSPCR  = 0x0Bu;
  15.     PORT_Lock();

  16.     LCD_BLK_Clr();

  17. }


  18. /******************************************************************************
  19.       函數說明:LCD串行數據寫入函數
  20.       入口數據:dat  要寫入的串行數據
  21.       返回值:  無
  22. ******************************************************************************/
  23. void LCD_Writ_Bus(u8 dat)
  24. {        
  25. //          u8 i;
  26. //      LCD_DC_Set();
  27. //      LCD_CS_Clr();
  28. //      for(i=0;i<8;i++)
  29. //      {
  30. //      if(dat&0x80)
  31. //      {
  32. //      LCD_MOSI_Set();
  33. //      }
  34. //      else LCD_MOSI_Clr();
  35. //      LCD_SCLK_Clr();
  36. //      LCD_SCLK_Set();
  37. //      dat<<=1;
  38. //      }
  39. //         
  40. //      LCD_CS_Set();
  41.                 while (Reset == SPI_GetFlag(SPI_UNIT, SpiFlagSendBufferEmpty))
  42.         {}
  43.                 SPI_SendData8(SPI_UNIT,dat);
  44. }


  45. /******************************************************************************
  46.       函數說明:LCD寫入數據
  47.       入口數據:dat 寫入的數據
  48.       返回值:  無
  49. ******************************************************************************/
  50. void LCD_WR_DATA8(u8 dat)
  51. {
  52.         LCD_DC_Set();
  53.         LCD_Writ_Bus(dat);
  54. }


  55. /******************************************************************************
  56.       函數說明:LCD寫入數據
  57.       入口數據:dat 寫入的數據
  58.       返回值:  無
  59. ******************************************************************************/
  60. void LCD_WR_DATA(u16 dat)
  61. {
  62.         LCD_Writ_Bus(dat>>8);
  63.         LCD_Writ_Bus(dat);
  64. }


  65. /******************************************************************************
  66.       函數說明:LCD寫入命令
  67.       入口數據:dat 寫入的命令
  68.       返回值:  無
  69. ******************************************************************************/
  70. void LCD_WR_REG(u8 dat)
  71. {
  72.         LCD_DC_Clr();//寫命令
  73.         LCD_Writ_Bus(dat);
  74. }


  75. /******************************************************************************
  76.       函數說明:設置起始和結束地址
  77.       入口數據:x1,x2 設置列的起始和結束地址
  78.                 y1,y2 設置行的起始和結束地址
  79.       返回值:  無
  80. ******************************************************************************/
  81. void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
  82. {
  83.                 LCD_WR_REG(0x2a);//列地址設置
  84.                 LCD_WR_DATA(x1);
  85.                 LCD_WR_DATA(x2);
  86.                 LCD_WR_REG(0x2b);//行地址設置
  87.                 LCD_WR_DATA(y1);
  88.                 LCD_WR_DATA(y2);
  89.                 LCD_WR_REG(0x2c);//儲存器寫
  90. }

  91. /******************************************************************************
  92.       函數說明:LCD初始化函數
  93.       入口數據:無
  94.       返回值:  無
  95. ******************************************************************************/
  96. void LCD_Init(void)
  97. {
  98.   if(Chip_Selection==0)  //初始化ILI9341
  99.         {
  100.         LCD_GPIO_Init();//初始化GPIO
  101.         
  102.         LCD_RES_Clr();//復位
  103.         Ddl_Delay1ms(50);
  104.         LCD_RES_Set();
  105.         Ddl_Delay1ms(50);
  106.         
  107.         LCD_BLK_Set();//打開背光
  108.         Ddl_Delay1ms(50);
  109.         
  110.         //************* Start Initial Sequence **********//
  111.         LCD_WR_REG(0x11); //Sleep out
  112.         Ddl_Delay1ms(60);             //Delay 60ms
  113.         //************* Start Initial Sequence **********//
  114.         LCD_WR_REG(0xCF);
  115.         LCD_WR_DATA8(0x00);
  116.         LCD_WR_DATA8(0xC1);
  117.         LCD_WR_DATA8(0X30);
  118.         LCD_WR_REG(0xED);
  119.         LCD_WR_DATA8(0x64);
  120.         LCD_WR_DATA8(0x03);
  121.         LCD_WR_DATA8(0X12);
  122.         LCD_WR_DATA8(0X81);
  123.         LCD_WR_REG(0xE8);
  124.         LCD_WR_DATA8(0x85);
  125.         LCD_WR_DATA8(0x00);
  126.         LCD_WR_DATA8(0x79);
  127.         LCD_WR_REG(0xCB);
  128.         LCD_WR_DATA8(0x39);
  129.         LCD_WR_DATA8(0x2C);
  130.         LCD_WR_DATA8(0x00);
  131.         LCD_WR_DATA8(0x34);
  132.         LCD_WR_DATA8(0x02);
  133.         LCD_WR_REG(0xF7);
  134.         LCD_WR_DATA8(0x20);
  135.         LCD_WR_REG(0xEA);
  136.         LCD_WR_DATA8(0x00);
  137.         LCD_WR_DATA8(0x00);
  138.         LCD_WR_REG(0xC0); //Power control
  139.         LCD_WR_DATA8(0x1D); //VRH[5:0]
  140.         LCD_WR_REG(0xC1); //Power control
  141.         LCD_WR_DATA8(0x12); //SAP[2:0];BT[3:0]
  142.         LCD_WR_REG(0xC5); //VCM control
  143.         LCD_WR_DATA8(0x33);
  144.         LCD_WR_DATA8(0x3F);
  145.         LCD_WR_REG(0xC7); //VCM control
  146.         LCD_WR_DATA8(0x92);
  147.         LCD_WR_REG(0x3A); // Memory Access Control
  148.         LCD_WR_DATA8(0x55);
  149.         LCD_WR_REG(0x36); // Memory Access Control
  150.         if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x08);
  151.         else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC8);
  152.         else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x78);
  153.         else LCD_WR_DATA8(0xA8);
  154.         LCD_WR_REG(0xB1);
  155.         LCD_WR_DATA8(0x00);
  156.         LCD_WR_DATA8(0x12);
  157.         LCD_WR_REG(0xB6); // Display Function Control
  158.         LCD_WR_DATA8(0x0A);
  159.         LCD_WR_DATA8(0xA2);

  160.         LCD_WR_REG(0x44);
  161.         LCD_WR_DATA8(0x02);

  162.         LCD_WR_REG(0xF2); // 3Gamma Function Disable
  163.         LCD_WR_DATA8(0x00);
  164.         LCD_WR_REG(0x26); //Gamma curve selected
  165.         LCD_WR_DATA8(0x01);
  166.         LCD_WR_REG(0xE0); //Set Gamma
  167.         LCD_WR_DATA8(0x0F);
  168.         LCD_WR_DATA8(0x22);
  169.         LCD_WR_DATA8(0x1C);
  170.         LCD_WR_DATA8(0x1B);
  171.         LCD_WR_DATA8(0x08);
  172.         LCD_WR_DATA8(0x0F);
  173.         LCD_WR_DATA8(0x48);
  174.         LCD_WR_DATA8(0xB8);
  175.         LCD_WR_DATA8(0x34);
  176.         LCD_WR_DATA8(0x05);
  177.         LCD_WR_DATA8(0x0C);
  178.         LCD_WR_DATA8(0x09);
  179.         LCD_WR_DATA8(0x0F);
  180.         LCD_WR_DATA8(0x07);
  181.         LCD_WR_DATA8(0x00);
  182.         LCD_WR_REG(0XE1); //Set Gamma
  183.         LCD_WR_DATA8(0x00);
  184.         LCD_WR_DATA8(0x23);
  185.         LCD_WR_DATA8(0x24);
  186.         LCD_WR_DATA8(0x07);
  187.         LCD_WR_DATA8(0x10);
  188.         LCD_WR_DATA8(0x07);
  189.         LCD_WR_DATA8(0x38);
  190.         LCD_WR_DATA8(0x47);
  191.         LCD_WR_DATA8(0x4B);
  192.         LCD_WR_DATA8(0x0A);
  193.         LCD_WR_DATA8(0x13);
  194.         LCD_WR_DATA8(0x06);
  195.         LCD_WR_DATA8(0x30);
  196.         LCD_WR_DATA8(0x38);
  197.         LCD_WR_DATA8(0x0F);
  198.         LCD_WR_REG(0x29); //Display on
  199. }
  200.         else          //初始化ST7789
  201.         {
  202.                 LCD_GPIO_Init();//初始化GPIO
  203.                 LCD_RES_Set();//復位
  204.                 Ddl_Delay1ms(50);
  205.                 LCD_RES_Clr();
  206.                 Ddl_Delay1ms(50);
  207.                 LCD_RES_Set();
  208.                 Ddl_Delay1ms(50);
  209.                 LCD_BLK_Set();//打開背光
  210.                 Ddl_Delay1ms(250);
  211.                 LCD_WR_REG(0x11);
  212.                 Ddl_Delay1ms(60);//Delay 20ms
  213. //************* Start Initial Sequence **********//
  214. //------------------------------display and color format setting--------------------------------//
  215.         
  216.                 LCD_WR_REG(0X36);// Memory Access Control
  217.                 if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
  218.                 else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
  219.                 else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
  220.                 else LCD_WR_DATA8(0xA0);
  221.                 LCD_WR_REG(0X3A);
  222.                 LCD_WR_DATA8(0X05);
  223.         //--------------------------------ST7789S Frame rate setting-------------------------

  224.                 LCD_WR_REG(0xb2);
  225.                 LCD_WR_DATA8(0x0c);
  226.                 LCD_WR_DATA8(0x0c);
  227.                 LCD_WR_DATA8(0x00);
  228.                 LCD_WR_DATA8(0x33);
  229.                 LCD_WR_DATA8(0x33);
  230.                 LCD_WR_REG(0xb7);
  231.                 LCD_WR_DATA8(0x35);
  232.                 //---------------------------------ST7789S Power setting-----------------------------

  233.                 LCD_WR_REG(0xbb);
  234.                 LCD_WR_DATA8(0x1c);
  235.                 LCD_WR_REG(0xc0);
  236.                 LCD_WR_DATA8(0x2c);
  237.                 LCD_WR_REG(0xc2);
  238.                 LCD_WR_DATA8(0x01);
  239.                 LCD_WR_REG(0xc3);
  240.                 LCD_WR_DATA8(0x0b);
  241.                 LCD_WR_REG(0xc4);
  242.                 LCD_WR_DATA8(0x20);
  243.                 LCD_WR_REG(0xc6);
  244.                 LCD_WR_DATA8(0x0f);
  245. //                LCD_WR_REG(0xca);
  246. //                LCD_WR_DATA8(0x0f);
  247. //                LCD_WR_REG(0xc8);
  248. //                LCD_WR_DATA8(0x08);
  249. //                LCD_WR_REG(0x55);
  250. //                LCD_WR_DATA8(0x90);
  251.                 LCD_WR_REG(0xd0);
  252.                 LCD_WR_DATA8(0xa4);
  253.                 LCD_WR_DATA8(0xa1);
  254.                 //--------------------------------ST7789S gamma setting------------------------------
  255.                 LCD_WR_REG(0xe0);
  256.                 LCD_WR_DATA8(0xd0);
  257.                 LCD_WR_DATA8(0x00);
  258.                 LCD_WR_DATA8(0x03);
  259.                 LCD_WR_DATA8(0x09);
  260.                 LCD_WR_DATA8(0x13);
  261.                 LCD_WR_DATA8(0x1c);
  262.                 LCD_WR_DATA8(0x3a);
  263.                 LCD_WR_DATA8(0x55);
  264.                 LCD_WR_DATA8(0x48);
  265.                 LCD_WR_DATA8(0x18);
  266.                 LCD_WR_DATA8(0x12);
  267.                 LCD_WR_DATA8(0x0e);
  268.                 LCD_WR_DATA8(0x19);
  269.                 LCD_WR_DATA8(0x1e);
  270.                 LCD_WR_REG(0xe1);
  271.                 LCD_WR_DATA8(0xd0);
  272.                 LCD_WR_DATA8(0x00);
  273.                 LCD_WR_DATA8(0x03);
  274.                 LCD_WR_DATA8(0x09);
  275.                 LCD_WR_DATA8(0x05);
  276.                 LCD_WR_DATA8(0x25);
  277.                 LCD_WR_DATA8(0x3a);
  278.                 LCD_WR_DATA8(0x55);
  279.                 LCD_WR_DATA8(0x50);
  280.                 LCD_WR_DATA8(0x3d);
  281.                 LCD_WR_DATA8(0x1c);
  282.                 LCD_WR_DATA8(0x1d);
  283.                 LCD_WR_DATA8(0x1d);
  284.                 LCD_WR_DATA8(0x1e);
  285.                 LCD_WR_REG(0x29);
  286. }
  287. }
復制代碼
他標的是ST7789S不過我用的是商家個的51代碼中個的參數更改了的。
原本是用軟SPI的后面用硬件SPI了邏輯分析儀解碼的數據是一樣的。
解碼參數設置

我個人感覺是初始化參數有問題。要么是SPI的對齊方式有問題這些要看數據手冊挺長的我明天再看看。

再放一張硬件SPI的波形是初始化的0x36命令的部分
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:687759 發表于 2022-5-3 20:05 | 只看該作者
如果需要示波器波形我可以在下周發出。
回復

使用道具 舉報

板凳
ID:656419 發表于 2022-5-3 23:31 | 只看該作者
呃.....樓主好,,我想借樓問個問題,,,
ST7789 ST7789v 是通用的嗎?
回復

使用道具 舉報

地板
ID:687759 發表于 2022-5-4 12:29 | 只看該作者
這里糾正一個錯誤
javascript:;
這個標志只是數據完成并不是SPI傳送完成所以代碼是有BUG的。
這是我加了20us延時的波形
javascript:;
是很正常的
第3信號是DC(命令和數據)信號

LF9F]D[FC`CFKNULG[7S_K5.png (75.09 KB, 下載次數: 125)

LF9F]D[FC`CFKNULG[7S_K5.png

]1063$1LJU6E{B938~H@AOG.png (9.17 KB, 下載次數: 67)

]1063$1LJU6E{B938~H@AOG.png
回復

使用道具 舉報

5#
ID:687759 發表于 2022-5-4 13:01 | 只看該作者
完結了可以使用了就是標準的問題希望給后面的人一個參考。這里再發一份可以使用的代碼
搞了3天終于搞成了
代碼

HC32F460lcd工程.zip

1.17 MB, 下載次數: 145

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:721377 發表于 2022-10-20 09:44 | 只看該作者
我也出現 花屏  參考看看 謝謝
回復

使用道具 舉報

7#
ID:462526 發表于 2022-12-12 17:14 | 只看該作者
余金渠 發表于 2022-5-4 13:01
完結了可以使用了就是標準的問題希望給后面的人一個參考。這里再發一份可以使用的代碼
搞了3天終于搞成了
...

謝謝分享,節約了很多排查時間!!
回復

使用道具 舉報

8#
ID:1108075 發表于 2024-1-4 23:41 | 只看該作者
怎么解決的 求解
回復

使用道具 舉報

9#
ID:517951 發表于 2024-1-8 08:34 | 只看該作者
出現雪花的原因很簡單, 就是屏初始化成功了, 需要做clearscreen , 不做清屏動作,就是雪花顯示. 因為顯示RAM里面是隨機數據.
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色播久久久 | 国产精品观看 | 久久国产香蕉 | 五月婷婷 六月丁香 | 影音先锋中文字幕在线观看 | 亚洲精品一区二区三区四区高清 | 国产精品成人一区二区三区 | 蜜桃av鲁一鲁一鲁一鲁 | 久久中文字幕一区 | 成人免费大片黄在线播放 | 久久r免费视频 | 精品久久中文 | 国产成人免费视频网站高清观看视频 | 亚洲综合在线视频 | 四虎影音| 日韩久久综合 | 中文字幕亚洲区一区二 | 噜久寡妇噜噜久久寡妇 | 国产美女精品视频免费观看 | 国产乱码精品一区二区三区忘忧草 | 精品视频在线观看 | 午夜黄色影院 | 色一阁| 精品国产精品国产偷麻豆 | 成人性视频在线播放 | 一级免费毛片 | 国产亚洲精品精品国产亚洲综合 | www.亚洲 | 久久99精品久久久久久国产越南 | 国产一区二区三区色淫影院 | 亚洲人成一区二区三区性色 | 五月激情久久 | 亚洲日本三级 | aaa一区 | 在线免费av电影 | 亚洲+变态+欧美+另类+精品 | 中文字幕乱码一区二区三区 | 亚洲一区二区三区 | 中文字幕第十五页 | 久热精品在线播放 | 国产精品一区二区在线 |