矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: scoopydoo

[折腾] 基于 STM32H750 的 TFT 显示模块

[复制链接]
     
 楼主| 发表于 2024-11-22 17:53:33 | 显示全部楼层
本帖最后由 scoopydoo 于 2024-11-22 17:56 编辑

昨晚已经用示波器查看了控制用的 SPI 端口,以及 LTDC 输出的 RGB 端口,没发现信号时序或极性问题。

接下来就是在 ST7701S 几百个字节的初始化序列中找找看有没有啥问题,毕竟是网上抄了来的,不可全信 ......
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 17:55:41 | 显示全部楼层
scu319hy 发表于 2024-11-22 17:51
我就是瞎提个想法,反正只用动动嘴
等你成功了我再来围观学习

俺也是盲人摸象,回头肯定会尝试一下这种方式,毕竟虽然这次 8bit 够用了,下次说不定要显示真彩呢
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 17:59:55 | 显示全部楼层
MF35_ 发表于 2024-11-22 17:35
肯定不能啊,帧缓存是由LCDC直接访问的,而非由CPU传输给LCDC的,自然不能用软件处理,你说的这种方式对 ...

嗯,我的设想是控制LCD面板的局部刷新区域,然后设置对应的帧缓冲区域给LCDC让它发送
等这部分发完,重新设置LCD面板的局部刷新区域,再更新LCDC的缓冲发另一部分
技术上应该可以行得通,效果怎么样我也没试过

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 18:14:19 | 显示全部楼层
scu319hy 发表于 2024-11-22 17:59
嗯,我的设想是控制LCD面板的局部刷新区域,然后设置对应的帧缓冲区域给LCDC让它发送
等这部分发完,重 ...


俺觉得这样应该是可以的,甚至每次只刷新一个点都行,要考虑的就是内存空间和处理器时间之间的平衡,毕竟更改 LTDC 的图层设置是需要时间花销的的。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 18:52:57 | 显示全部楼层
本帖最后由 scoopydoo 于 2024-11-22 18:55 编辑

网上能找的几段 ST7701S 4.58 寸屏的初始化代码都是一样的,没有宏定义、没有注释 ...

  1. {
  2.         ...

  3.         //ST7701S+AUO4.58
  4.         SPI_WriteComm (0xFF);     
  5.         SPI_WriteData (0x77);
  6.         SPI_WriteData (0x01);   
  7.         SPI_WriteData (0x00);   
  8.         SPI_WriteData (0x00);   
  9.         SPI_WriteData (0x13);   
  10.        
  11.         SPI_WriteComm (0xEF);     
  12.         SPI_WriteData (0x08);   
  13.        
  14.         SPI_WriteComm (0xFF);     
  15.         SPI_WriteData (0x77);   
  16.         SPI_WriteData (0x01);   
  17.         SPI_WriteData (0x00);   
  18.         SPI_WriteData (0x00);   
  19.         SPI_WriteData (0x10);   
  20.        
  21.         SPI_WriteComm (0xC0);     
  22.         SPI_WriteData (0x77);   
  23.         SPI_WriteData (0x00);   
  24.        
  25.         SPI_WriteComm (0xC1);     
  26.         SPI_WriteData (0x09);   
  27.         SPI_WriteData (0x08);   
  28.        
  29.         SPI_WriteComm (0xC2);//inv     
  30.         SPI_WriteData (0x37);   
  31.         SPI_WriteData (0x02);  
  32.        
  33.         SPI_WriteComm (0xC3); //????   
  34.         SPI_WriteData (0x80);
  35.         SPI_WriteData (0x05);
  36.         SPI_WriteData (0x0d);         
  37.        
  38.         SPI_WriteComm (0xCC);     
  39.         SPI_WriteData (0x10);   
  40.        
  41.         SPI_WriteComm (0xB0);     
  42.         SPI_WriteData (0x40);   
  43.         SPI_WriteData (0x14);   
  44.         SPI_WriteData (0x59);   
  45.         SPI_WriteData (0x10);   
  46.         SPI_WriteData (0x12);   
  47.         SPI_WriteData (0x08);   
  48.         SPI_WriteData (0x03);   
  49.         SPI_WriteData (0x09);   
  50.         SPI_WriteData (0x05);   
  51.         SPI_WriteData (0x1E);   
  52.         SPI_WriteData (0x05);   
  53.         SPI_WriteData (0x14);   
  54.         SPI_WriteData (0x10);   
  55.         SPI_WriteData (0x68);   
  56.         SPI_WriteData (0x33);   
  57.         SPI_WriteData (0x15);   
  58.        
  59.         SPI_WriteComm (0xB1);     
  60.         SPI_WriteData (0x40);   
  61.         SPI_WriteData (0x08);   
  62.         SPI_WriteData (0x53);   
  63.         SPI_WriteData (0x09);   
  64.         SPI_WriteData (0x11);   
  65.         SPI_WriteData (0x09);   
  66.         SPI_WriteData (0x02);   
  67.         SPI_WriteData (0x07);   
  68.         SPI_WriteData (0x09);   
  69.         SPI_WriteData (0x1A);   
  70.         SPI_WriteData (0x04);   
  71.         SPI_WriteData (0x12);   
  72.         SPI_WriteData (0x12);   
  73.         SPI_WriteData (0x64);   
  74.         SPI_WriteData (0x29);   
  75.         SPI_WriteData (0x29);   
  76.        
  77.         SPI_WriteComm (0xFF);     
  78.         SPI_WriteData (0x77);   
  79.         SPI_WriteData (0x01);   
  80.         SPI_WriteData (0x00);   
  81.         SPI_WriteData (0x00);   
  82.         SPI_WriteData (0x11);   
  83.        
  84.         SPI_WriteComm (0xB0);     
  85.         SPI_WriteData (0x6D);  //6D
  86.        
  87.         SPI_WriteComm (0xB1);   //vcom  
  88.         SPI_WriteData (0x1D);   
  89.        
  90.         SPI_WriteComm (0xB2);     
  91.         SPI_WriteData (0x87);   
  92.        
  93.         SPI_WriteComm (0xB3);     
  94.         SPI_WriteData (0x80);   
  95.        
  96.         SPI_WriteComm (0xB5);     
  97.         SPI_WriteData (0x49);   
  98.        
  99.         SPI_WriteComm (0xB7);     
  100.         SPI_WriteData (0x85);   
  101.        
  102.         SPI_WriteComm (0xB8);     
  103.         SPI_WriteData (0x20);   
  104.        
  105.         SPI_WriteComm (0xC1);     
  106.         SPI_WriteData (0x78);   
  107.        
  108.         SPI_WriteComm (0xC2);     
  109.         SPI_WriteData (0x78);   
  110.        
  111.         SPI_WriteComm (0xD0);     
  112.         SPI_WriteData (0x88);   
  113.        
  114.         SPI_WriteComm (0xE0);     
  115.         SPI_WriteData (0x00);   
  116.         SPI_WriteData (0x00);   
  117.         SPI_WriteData (0x02);   
  118.        
  119.         SPI_WriteComm (0xE1);     
  120.         SPI_WriteData (0x02);   
  121.         SPI_WriteData (0x8C);   
  122.         SPI_WriteData (0x00);   
  123.         SPI_WriteData (0x00);   
  124.         SPI_WriteData (0x03);   
  125.         SPI_WriteData (0x8C);   
  126.         SPI_WriteData (0x00);   
  127.         SPI_WriteData (0x00);   
  128.         SPI_WriteData (0x00);   
  129.         SPI_WriteData (0x33);   
  130.         SPI_WriteData (0x33);   
  131.        
  132.         SPI_WriteComm (0xE2);     
  133.         SPI_WriteData (0x33);   
  134.         SPI_WriteData (0x33);   
  135.         SPI_WriteData (0x33);   
  136.         SPI_WriteData (0x33);   
  137.         SPI_WriteData (0xC9);   
  138.         SPI_WriteData (0x3C);   
  139.         SPI_WriteData (0x00);   
  140.         SPI_WriteData (0x00);   
  141.         SPI_WriteData (0xCA);   
  142.         SPI_WriteData (0x3C);   
  143.         SPI_WriteData (0x00);   
  144.         SPI_WriteData (0x00);   
  145.         SPI_WriteData (0x00);   
  146.        
  147.         SPI_WriteComm (0xE3);     
  148.         SPI_WriteData (0x00);   
  149.         SPI_WriteData (0x00);   
  150.         SPI_WriteData (0x33);   
  151.         SPI_WriteData (0x33);   
  152.        
  153.         SPI_WriteComm (0xE4);     
  154.         SPI_WriteData (0x44);   
  155.         SPI_WriteData (0x44);   
  156.        
  157.         SPI_WriteComm (0xE5);     
  158.         SPI_WriteData (0x05);   
  159.         SPI_WriteData (0xCD);   
  160.         SPI_WriteData (0x82);   
  161.         SPI_WriteData (0x82);   
  162.         SPI_WriteData (0x01);   
  163.         SPI_WriteData (0xC9);   
  164.         SPI_WriteData (0x82);   
  165.         SPI_WriteData (0x82);   
  166.         SPI_WriteData (0x07);   
  167.         SPI_WriteData (0xCF);   
  168.         SPI_WriteData (0x82);   
  169.         SPI_WriteData (0x82);   
  170.         SPI_WriteData (0x03);   
  171.         SPI_WriteData (0xCB);   
  172.         SPI_WriteData (0x82);   
  173.         SPI_WriteData (0x82);   
  174.        
  175.         SPI_WriteComm (0xE6);     
  176.         SPI_WriteData (0x00);   
  177.         SPI_WriteData (0x00);   
  178.         SPI_WriteData (0x33);   
  179.         SPI_WriteData (0x33);   
  180.        
  181.         SPI_WriteComm (0xE7);     
  182.         SPI_WriteData (0x44);   
  183.         SPI_WriteData (0x44);   
  184.        
  185.         SPI_WriteComm (0xE8);     
  186.         SPI_WriteData (0x06);   
  187.         SPI_WriteData (0xCE);   
  188.         SPI_WriteData (0x82);   
  189.         SPI_WriteData (0x82);   
  190.         SPI_WriteData (0x02);   
  191.         SPI_WriteData (0xCA);   
  192.         SPI_WriteData (0x82);   
  193.         SPI_WriteData (0x82);   
  194.         SPI_WriteData (0x08);   
  195.         SPI_WriteData (0xD0);   
  196.         SPI_WriteData (0x82);   
  197.         SPI_WriteData (0x82);   
  198.         SPI_WriteData (0x04);   
  199.         SPI_WriteData (0xCC);   
  200.         SPI_WriteData (0x82);   
  201.         SPI_WriteData (0x82);   
  202.        
  203.         SPI_WriteComm (0xEB);     
  204.         SPI_WriteData (0x08);   
  205.         SPI_WriteData (0x01);   
  206.         SPI_WriteData (0xE4);   
  207.         SPI_WriteData (0xE4);   
  208.         SPI_WriteData (0x88);   
  209.         SPI_WriteData (0x00);   
  210.         SPI_WriteData (0x40);   
  211.        
  212.         SPI_WriteComm (0xEC);     
  213.         SPI_WriteData (0x00);   
  214.         SPI_WriteData (0x00);   
  215.         SPI_WriteData (0x00);   
  216.        
  217.         SPI_WriteComm (0xED);     
  218.         SPI_WriteData (0xFF);   
  219.         SPI_WriteData (0xF0);   
  220.         SPI_WriteData (0x07);   
  221.         SPI_WriteData (0x65);   
  222.         SPI_WriteData (0x4F);   
  223.         SPI_WriteData (0xFC);   
  224.         SPI_WriteData (0xC2);   
  225.         SPI_WriteData (0x2F);   
  226.         SPI_WriteData (0xF2);   
  227.         SPI_WriteData (0x2C);   
  228.         SPI_WriteData (0xCF);   
  229.         SPI_WriteData (0xF4);   
  230.         SPI_WriteData (0x56);   
  231.         SPI_WriteData (0x70);   
  232.         SPI_WriteData (0x0F);   
  233.         SPI_WriteData (0xFF);   
  234.        
  235.         SPI_WriteComm (0xEF);     
  236.         SPI_WriteData (0x10);   
  237.         SPI_WriteData (0x0D);   
  238.         SPI_WriteData (0x04);   
  239.         SPI_WriteData (0x08);   
  240.         SPI_WriteData (0x3F);   
  241.         SPI_WriteData (0x1F);   
  242.        
  243.         SPI_WriteComm (0xFF);     
  244.         SPI_WriteData (0x77);   
  245.         SPI_WriteData (0x01);   
  246.         SPI_WriteData (0x00);   
  247.         SPI_WriteData (0x00);   
  248.         SPI_WriteData (0x00);   
  249.        
  250.         SPI_WriteComm (0x11);     
  251.         delay(120);               
  252.        
  253.         SPI_WriteComm (0x35);     
  254.         SPI_WriteData (0x00);   
  255.        
  256.         SPI_WriteComm (0x3A);     
  257.         SPI_WriteData (0x66);   
  258.        
  259.         SPI_WriteComm (0x29);
  260. }
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 20:48:08 | 显示全部楼层
本帖最后由 MF35_ 于 2024-11-22 20:52 编辑
scoopydoo 发表于 2024-11-22 17:40
俺觉得如果搞两三个图层互不重叠来覆盖整个屏幕,然后每个图层指定一个显存区域,应该是可以实现的,就是 ...


我看了一下,STM32H750的LCDC只有两个层加一个背景色,所以顶多做两个独立显示区域,但是每个显示区域可以小于屏幕区域,显示区域意外的空白会用背景色填充,所以,你是可以用两块分离的内存来把整个屏幕填满的
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 20:50:02 | 显示全部楼层
scoopydoo 发表于 2024-11-22 18:52
网上能找的几段 ST7701S 4.58 寸屏的初始化代码都是一样的,没有宏定义、没有注释 ...


你这个屏还需要初始化啊,好麻烦,你买屏的时候没有参考手册吗,参考手册应该有怎么初始化
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 21:09:20 | 显示全部楼层
MF35_ 发表于 2024-11-22 20:50
你这个屏还需要初始化啊,好麻烦,你买屏的时候没有参考手册吗,参考手册应该有怎么初始化

某宝的货啥资料也没有,就只知道芯片型号和引脚排列!其实以前买的各种屏也都是这种情况,但是基本上都能找到好用的初始化代码,而且代码质量也不错。

就算偶尔需要自己琢磨的,那些芯片的手册上也会有初始化流程图和示例代码,而这次的 ST7701S 手册上啥也没有,现在俺能做的就是仔细看这个长达 300 页的手册 ......
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 21:20:30 | 显示全部楼层
scu319hy 发表于 2024-11-22 17:59
嗯,我的设想是控制LCD面板的局部刷新区域,然后设置对应的帧缓冲区域给LCDC让它发送
等这部分发完,重 ...


可以是可以,LCDC得支持多层,并且支持屏幕局部显示,STM32H750是支持的,只有两层,不过也够了
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 21:21:42 | 显示全部楼层
scoopydoo 发表于 2024-11-22 21:09
某宝的货啥资料也没有,就只知道芯片型号和引脚排列!其实以前买的各种屏也都是这种情况,但是基本上都能 ...


好吧,我用过的TFT屏本身都不需要初始化,时序是定死的,只需要将LCDC根据屏的参数初始化就行,你这种屏需要另外初始化的真没用过
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 21:22:48 | 显示全部楼层
报告一个好消息,俺在某创买的 STM32H750VBT6 的 Flash 容量真的有 2MB,为了确定真的能用,俺定义了一个 1.95MB 的大数组并填满了内容,反复烧写校验了几次都没出问题!
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 21:25:10 | 显示全部楼层
scoopydoo 发表于 2024-11-22 21:22
报告一个好消息,俺在某创买的 STM32H750VBT6 的 Flash 容量真的有 2MB,为了确定真的能用,俺定义了一个 1 ...

真的假的,这玩意儿不是只有128k Flash吗?我还说128k够干啥,只能做点儿小东西,如果真有2M,那得赶紧屯几片
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 21:27:45 | 显示全部楼层
MF35_ 发表于 2024-11-22 21:21
好吧,我用过的TFT屏本身都不需要初始化,时序是定死的,只需要将LCDC根据屏的参数初始化就行,你这种 ...

市面上用这个 ST7701S 芯片的屏有好几种,分辨率都不一样的,肯定要有个初始化过程的。

这个非常类似于市面上绝大多数单色 OLED 屏,屏幕的规格有好多好多种,但是芯片一共就那么几种,都需要根据屏幕来做初始化。
回复 支持 反对

使用道具 举报

     
发表于 2024-11-22 21:27:55 | 显示全部楼层
scoopydoo 发表于 2024-11-22 21:22
报告一个好消息,俺在某创买的 STM32H750VBT6 的 Flash 容量真的有 2MB,为了确定真的能用,俺定义了一个 1 ...


我特意看了下RM,真的是2M

a.png
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-11-22 21:28:28 | 显示全部楼层
MF35_ 发表于 2024-11-22 21:25
真的假的,这玩意儿不是只有128k Flash吗?我还说128k够干啥,只能做点儿小东西,如果真有2M,那得赶紧屯 ...

这个是公开的咪咪啊,只不过没有厂家的质量保证而已。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表