scoopydoo
发表于 2024-11-22 17:53:33
本帖最后由 scoopydoo 于 2024-11-22 17:56 编辑
昨晚已经用示波器查看了控制用的 SPI 端口,以及 LTDC 输出的 RGB 端口,没发现信号时序或极性问题。
接下来就是在 ST7701S 几百个字节的初始化序列中找找看有没有啥问题,毕竟是网上抄了来的,不可全信 ......
scoopydoo
发表于 2024-11-22 17:55:41
scu319hy 发表于 2024-11-22 17:51
我就是瞎提个想法,反正只用动动嘴
等你成功了我再来围观学习
俺也是盲人摸象,回头肯定会尝试一下这种方式,毕竟虽然这次 8bit 够用了,下次说不定要显示真彩呢 :lol
scu319hy
发表于 2024-11-22 17:59:55
MF35_ 发表于 2024-11-22 17:35
肯定不能啊,帧缓存是由LCDC直接访问的,而非由CPU传输给LCDC的,自然不能用软件处理,你说的这种方式对 ...
嗯,我的设想是控制LCD面板的局部刷新区域,然后设置对应的帧缓冲区域给LCDC让它发送
等这部分发完,重新设置LCD面板的局部刷新区域,再更新LCDC的缓冲发另一部分
技术上应该可以行得通,效果怎么样我也没试过;P
scoopydoo
发表于 2024-11-22 18:14:19
scu319hy 发表于 2024-11-22 17:59
嗯,我的设想是控制LCD面板的局部刷新区域,然后设置对应的帧缓冲区域给LCDC让它发送
等这部分发完,重 ...
俺觉得这样应该是可以的,甚至每次只刷新一个点都行,要考虑的就是内存空间和处理器时间之间的平衡,毕竟更改 LTDC 的图层设置是需要时间花销的的。
scoopydoo
发表于 2024-11-22 18:52:57
本帖最后由 scoopydoo 于 2024-11-22 18:55 编辑
网上能找的几段 ST7701S 4.58 寸屏的初始化代码都是一样的,没有宏定义、没有注释 ... :curse:
{
...
//ST7701S+AUO4.58
SPI_WriteComm (0xFF);
SPI_WriteData (0x77);
SPI_WriteData (0x01);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x13);
SPI_WriteComm (0xEF);
SPI_WriteData (0x08);
SPI_WriteComm (0xFF);
SPI_WriteData (0x77);
SPI_WriteData (0x01);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x10);
SPI_WriteComm (0xC0);
SPI_WriteData (0x77);
SPI_WriteData (0x00);
SPI_WriteComm (0xC1);
SPI_WriteData (0x09);
SPI_WriteData (0x08);
SPI_WriteComm (0xC2);//inv
SPI_WriteData (0x37);
SPI_WriteData (0x02);
SPI_WriteComm (0xC3); //????
SPI_WriteData (0x80);
SPI_WriteData (0x05);
SPI_WriteData (0x0d);
SPI_WriteComm (0xCC);
SPI_WriteData (0x10);
SPI_WriteComm (0xB0);
SPI_WriteData (0x40);
SPI_WriteData (0x14);
SPI_WriteData (0x59);
SPI_WriteData (0x10);
SPI_WriteData (0x12);
SPI_WriteData (0x08);
SPI_WriteData (0x03);
SPI_WriteData (0x09);
SPI_WriteData (0x05);
SPI_WriteData (0x1E);
SPI_WriteData (0x05);
SPI_WriteData (0x14);
SPI_WriteData (0x10);
SPI_WriteData (0x68);
SPI_WriteData (0x33);
SPI_WriteData (0x15);
SPI_WriteComm (0xB1);
SPI_WriteData (0x40);
SPI_WriteData (0x08);
SPI_WriteData (0x53);
SPI_WriteData (0x09);
SPI_WriteData (0x11);
SPI_WriteData (0x09);
SPI_WriteData (0x02);
SPI_WriteData (0x07);
SPI_WriteData (0x09);
SPI_WriteData (0x1A);
SPI_WriteData (0x04);
SPI_WriteData (0x12);
SPI_WriteData (0x12);
SPI_WriteData (0x64);
SPI_WriteData (0x29);
SPI_WriteData (0x29);
SPI_WriteComm (0xFF);
SPI_WriteData (0x77);
SPI_WriteData (0x01);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x11);
SPI_WriteComm (0xB0);
SPI_WriteData (0x6D);//6D
SPI_WriteComm (0xB1); //vcom
SPI_WriteData (0x1D);
SPI_WriteComm (0xB2);
SPI_WriteData (0x87);
SPI_WriteComm (0xB3);
SPI_WriteData (0x80);
SPI_WriteComm (0xB5);
SPI_WriteData (0x49);
SPI_WriteComm (0xB7);
SPI_WriteData (0x85);
SPI_WriteComm (0xB8);
SPI_WriteData (0x20);
SPI_WriteComm (0xC1);
SPI_WriteData (0x78);
SPI_WriteComm (0xC2);
SPI_WriteData (0x78);
SPI_WriteComm (0xD0);
SPI_WriteData (0x88);
SPI_WriteComm (0xE0);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x02);
SPI_WriteComm (0xE1);
SPI_WriteData (0x02);
SPI_WriteData (0x8C);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x03);
SPI_WriteData (0x8C);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x33);
SPI_WriteData (0x33);
SPI_WriteComm (0xE2);
SPI_WriteData (0x33);
SPI_WriteData (0x33);
SPI_WriteData (0x33);
SPI_WriteData (0x33);
SPI_WriteData (0xC9);
SPI_WriteData (0x3C);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0xCA);
SPI_WriteData (0x3C);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteComm (0xE3);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x33);
SPI_WriteData (0x33);
SPI_WriteComm (0xE4);
SPI_WriteData (0x44);
SPI_WriteData (0x44);
SPI_WriteComm (0xE5);
SPI_WriteData (0x05);
SPI_WriteData (0xCD);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteData (0x01);
SPI_WriteData (0xC9);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteData (0x07);
SPI_WriteData (0xCF);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteData (0x03);
SPI_WriteData (0xCB);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteComm (0xE6);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x33);
SPI_WriteData (0x33);
SPI_WriteComm (0xE7);
SPI_WriteData (0x44);
SPI_WriteData (0x44);
SPI_WriteComm (0xE8);
SPI_WriteData (0x06);
SPI_WriteData (0xCE);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteData (0x02);
SPI_WriteData (0xCA);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteData (0x08);
SPI_WriteData (0xD0);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteData (0x04);
SPI_WriteData (0xCC);
SPI_WriteData (0x82);
SPI_WriteData (0x82);
SPI_WriteComm (0xEB);
SPI_WriteData (0x08);
SPI_WriteData (0x01);
SPI_WriteData (0xE4);
SPI_WriteData (0xE4);
SPI_WriteData (0x88);
SPI_WriteData (0x00);
SPI_WriteData (0x40);
SPI_WriteComm (0xEC);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteComm (0xED);
SPI_WriteData (0xFF);
SPI_WriteData (0xF0);
SPI_WriteData (0x07);
SPI_WriteData (0x65);
SPI_WriteData (0x4F);
SPI_WriteData (0xFC);
SPI_WriteData (0xC2);
SPI_WriteData (0x2F);
SPI_WriteData (0xF2);
SPI_WriteData (0x2C);
SPI_WriteData (0xCF);
SPI_WriteData (0xF4);
SPI_WriteData (0x56);
SPI_WriteData (0x70);
SPI_WriteData (0x0F);
SPI_WriteData (0xFF);
SPI_WriteComm (0xEF);
SPI_WriteData (0x10);
SPI_WriteData (0x0D);
SPI_WriteData (0x04);
SPI_WriteData (0x08);
SPI_WriteData (0x3F);
SPI_WriteData (0x1F);
SPI_WriteComm (0xFF);
SPI_WriteData (0x77);
SPI_WriteData (0x01);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteData (0x00);
SPI_WriteComm (0x11);
delay(120);
SPI_WriteComm (0x35);
SPI_WriteData (0x00);
SPI_WriteComm (0x3A);
SPI_WriteData (0x66);
SPI_WriteComm (0x29);
}
MF35_
发表于 2024-11-22 20:48:08
本帖最后由 MF35_ 于 2024-11-22 20:52 编辑
scoopydoo 发表于 2024-11-22 17:40
俺觉得如果搞两三个图层互不重叠来覆盖整个屏幕,然后每个图层指定一个显存区域,应该是可以实现的,就是 ...
我看了一下,STM32H750的LCDC只有两个层加一个背景色,所以顶多做两个独立显示区域,但是每个显示区域可以小于屏幕区域,显示区域意外的空白会用背景色填充,所以,你是可以用两块分离的内存来把整个屏幕填满的:lol
MF35_
发表于 2024-11-22 20:50:02
scoopydoo 发表于 2024-11-22 18:52
网上能找的几段 ST7701S 4.58 寸屏的初始化代码都是一样的,没有宏定义、没有注释 ...
你这个屏还需要初始化啊,好麻烦,你买屏的时候没有参考手册吗,参考手册应该有怎么初始化
scoopydoo
发表于 2024-11-22 21:09:20
MF35_ 发表于 2024-11-22 20:50
你这个屏还需要初始化啊,好麻烦,你买屏的时候没有参考手册吗,参考手册应该有怎么初始化
某宝的货啥资料也没有,就只知道芯片型号和引脚排列!其实以前买的各种屏也都是这种情况,但是基本上都能找到好用的初始化代码,而且代码质量也不错。
就算偶尔需要自己琢磨的,那些芯片的手册上也会有初始化流程图和示例代码,而这次的 ST7701S 手册上啥也没有,现在俺能做的就是仔细看这个长达 300 页的手册 ...... :Q
MF35_
发表于 2024-11-22 21:20:30
scu319hy 发表于 2024-11-22 17:59
嗯,我的设想是控制LCD面板的局部刷新区域,然后设置对应的帧缓冲区域给LCDC让它发送
等这部分发完,重 ...
可以是可以,LCDC得支持多层,并且支持屏幕局部显示,STM32H750是支持的,只有两层,不过也够了
MF35_
发表于 2024-11-22 21:21:42
scoopydoo 发表于 2024-11-22 21:09
某宝的货啥资料也没有,就只知道芯片型号和引脚排列!其实以前买的各种屏也都是这种情况,但是基本上都能 ...
好吧,我用过的TFT屏本身都不需要初始化,时序是定死的,只需要将LCDC根据屏的参数初始化就行,你这种屏需要另外初始化的真没用过
scoopydoo
发表于 2024-11-22 21:22:48
报告一个好消息,俺在某创买的 STM32H750VBT6 的 Flash 容量真的有 2MB,为了确定真的能用,俺定义了一个 1.95MB 的大数组并填满了内容,反复烧写校验了几次都没出问题! ;P
MF35_
发表于 2024-11-22 21:25:10
scoopydoo 发表于 2024-11-22 21:22
报告一个好消息,俺在某创买的 STM32H750VBT6 的 Flash 容量真的有 2MB,为了确定真的能用,俺定义了一个 1 ...
真的假的,这玩意儿不是只有128k Flash吗?我还说128k够干啥,只能做点儿小东西,如果真有2M,那得赶紧屯几片:lol
scoopydoo
发表于 2024-11-22 21:27:45
MF35_ 发表于 2024-11-22 21:21
好吧,我用过的TFT屏本身都不需要初始化,时序是定死的,只需要将LCDC根据屏的参数初始化就行,你这种 ...
市面上用这个 ST7701S 芯片的屏有好几种,分辨率都不一样的,肯定要有个初始化过程的。
这个非常类似于市面上绝大多数单色 OLED 屏,屏幕的规格有好多好多种,但是芯片一共就那么几种,都需要根据屏幕来做初始化。
MF35_
发表于 2024-11-22 21:27:55
scoopydoo 发表于 2024-11-22 21:22
报告一个好消息,俺在某创买的 STM32H750VBT6 的 Flash 容量真的有 2MB,为了确定真的能用,俺定义了一个 1 ...
我特意看了下RM,真的是2M;P
scoopydoo
发表于 2024-11-22 21:28:28
MF35_ 发表于 2024-11-22 21:25
真的假的,这玩意儿不是只有128k Flash吗?我还说128k够干啥,只能做点儿小东西,如果真有2M,那得赶紧屯 ...
这个是公开的咪咪啊,只不过没有厂家的质量保证而已。