TFT ST7789 240x240 在 STC32G144K246驱动下图片压缩错位重复
尊敬的版主tzz1983,yao眼的光,浦江一水,芯启程,特别是浦江一水老师您们好!
请教一下
8脚1.54寸的TFT ST7789 240x240 在 STC32G144K246驱动下图片压缩错位重复
应该在对角线显示的,全部去了下半部分,并且压缩、重复了
奇怪的是,同样的程序,换块1.3寸7脚的 ST7789 240x240就一切正常!
其实这个程序我一开始是在1.3寸7脚的 ST7789 240x240上练习无阻塞显示编写的,后来发现有8脚1.54寸的TFT ST7789 240x240 ,直接插上去
就发现这个压缩、重复问题,我也发现在9341 320*240 的屏上也存在,不知道是屏幕初始化问题,还是偏移量设置(其实我也没搞清楚,偏移量在
哪里设置?初始化的时候设置一次?还是每次显示范围都要设置?) TFT屏感觉种类多,哪怕都是7789 ,好像也有差别,网上的卖家是不管
技术的,哪位大侠帮手指导一下?
项目我压缩好,传上来,您们不忙的时候,帮手看看?再一次感谢浦江一水老师,上次那个菜单动画“猫和老鼠”的桥接,在您的耐心指导下,终于学会啦!
其实 我也问过STCAI,讲的都对,反复折腾,都不见效,只有先投降..........
2026/7/15 13:14
具体现象如下:
其实还有个大数组XDATA到DMA的故障现象:
在XDATA 开辟2个数组:
#ifndef __PICTURE_H
#define __PICTURE_H
// 图片取模数组声明 (请确保数组在头文件或此处定义)
// 图片需取模为:C51格式,高位在前,16位颜色(RGB565)
// 假设图片大小为 120x120,你需要根据实际图片大小修改
externunsigned char xdata picture_1;
externunsigned char xdata picture_2;
#endif
用DMA的方式刷TFT:
void DMA_Config(void)
{
void DMA_Config(void)
{
DMA_SPI_STA = 0x00;
DMA_SPI_CFG = 0xE0; //bit7 1:Enable Interrupt
// DMA_SPI_AMTH = 0xfd; //设置传输总字节数:n+1
// DMA_SPI_AMT = 0x1f; //设置传输总字节数:n+1
// DMA_SPI_TXAH = (u8)((u16)&IMG_DATA >> 8); //SPI发送数据存储地址
// DMA_SPI_TXAL = (u8)((u16)&IMG_DATA);
DMA_SPI_ITVH = 0; //这2句是关闭 DMA 传输过程中的中间阈值中断
DMA_SPI_ITVL = 0; //这样配置后,DMA 不会在传输中途产生中断,
//而是 等待整批数据(0xFD20 字节)全部传输完成后,才通过 DMA_SPI_CFG
//的 bit7 使能的中断机制产生一次完成中断
DMA_SPI_CFG2 = 0x01; //01:P2.2 --- SPI_SS_SEL = 01,选择 P2.2 作为 SPI 片选输出引脚
DMA_SPI_CR = 0x81; //bit7 1:使能 SPI_DMA, bit6 1:开始 SPI_DMA 主机模式, bit0 1:清除 SPI_DMA FIFO
}
//========================================================================
// 函数: void SPI_DMA_Interrupt (void) interrupt 49
// 描述: SPI DMA中断函数
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-5-8
// 备注:
//========================================================================
void SPI_DMA_Interrupt(void) interrupt DMA_SPI_VECTOR
{
DMA_SPI_STA = 0;
TFT_ShowEnd();
}
结果2个图片,只能显示1次,第二次就只能显示1个,另外一个就出错了!
页:
[1]