找回密码
 立即注册
查看: 197|回复: 9

SPI刷ST7796S-TFT屏求助

[复制链接]
已绑定手机

2

主题

5

回帖

22

积分

新手上路

积分
22
发表于 2026-10-19 20:14:28 | 显示全部楼层 |阅读模式
大佬们,求助一个问题啊。

我写了一段使用4寸ST7796S的TFT屏幕显示一个小图片的程序,图片取模和显示的效果有照片,程序感觉肯定是初始化出的问题,按理0角度显示,0x36指令后的数据写0x00就行,但是这个程序必须写成0x40,否则显示的图片就像照片里那样,是反的。这个初始化程序是我从例程上改的,我感觉肯定原例程那里设置的有点问题,但是又找不到。盼望那个大佬帮忙看看,是哪里不对。。

Terber_LOGO_01.rar

144.33 KB, 下载次数: 150

TFT图片显示

回复

使用道具 举报 送花

已绑定手机

2

主题

5

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2026-10-20 08:50:47 | 显示全部楼层
显示的图片以及取模见照片。
微信图片_20261020084721_276_2.jpg
微信图片_20261020084723_277_2.jpg
回复

使用道具 举报 送花

已绑定手机

123

主题

5133

回帖

1万

积分

超级版主

无情的代码机器

积分
11465
发表于 2026-10-20 09:46:30 | 显示全部楼层
怀疑初始化问题,找屏幕卖家要初始化例程对比初始下发序列

SPCTL 配SPI频率SPR, /2太快?,可以先切到慢速对比。
这屏驱论坛里没找到调通的完整代码,发个购买链接看看。
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

25

主题

252

回帖

2375

积分

版主

积分
2375
发表于 2026-10-20 10:08:37 | 显示全部楼层
回复

使用道具 举报 送花

25

主题

252

回帖

2375

积分

版主

积分
2375
发表于 2026-10-20 10:09:34 | 显示全部楼层

我已读完这个帖子,了解一下情况。这是论坛用户 poly*** 发的一个求助帖:

帖子内容概要

标题:SPI刷ST7796S-TFT屏求助

问题描述(据论坛用户反馈):

  • 用 4 寸 ST7796S 的 TFT 屏显示一张小图片
  • 现象:按 0 角度显示时,0x36 指令(MADCTL 内存数据访问控制)后数据写 0x00 时,图片显示是"反的"(照片显示异常),必须写 0x40 才正常
  • 用户怀疑是从例程修改来的初始化序列哪里设置不对,但找不出来

已有回复:

  • 回复 2(erci***)建议:找屏幕卖家要初始化例程对比初始化下发序列;怀疑 SPCTL 中 SPI 频率 SPR 分频 /2 太快,建议先切到慢速对比;表示论坛里没找到调通这颗屏驱的完整代码。

我的技术分析(供参考)

这个问题的关键很可能不在于 0x36 写 0x00 还是 0x40,而在于 ST7796S 的扫描方向与显存坐标的对应关系。下面几点供您自查:

1. 关于 0x36(MADCTL)
ST7796S 的 MADCTL 寄存器中,各控制位决定行/列地址增长方向与 RGB 顺序:

  • MY(行地址顺序)、MX(列地址顺序)、MV(行列交换)决定图像旋转方向
  • RGB/BGR 位决定颜色顺序
  • 写 0x40 通常改变的是 MX 或 RGB 位,而不是单纯"角度"

因此"写 0x40 才正"说明您真正的取模方向 / 窗口坐标定义(0x2A 列地址、0x2B 行地址)与 MADCTL 设置不匹配,而不是 0x36 本身写错。建议核对:

  • 0x2A(CASET)与 0x2B(RASET)设定的窗口宽高是否与取模尺寸一致
  • 取模软件的"扫描方向"设置(水平/垂直、逐行/逐列)是否与屏的初始方向一致

2. 关于 SPI 速度
回复 2 提到的 SPCTL 中 SPR 分频问题确实值得排查——SPI 时钟太快在长排线、无上拉时可能造成数据采样错位,出现"图片错乱/镜像"的错觉。建议先把 SPI 时钟降到最低速(如 /128)再测,排除时序问题后再调方向,这样能把问题定位到"是方向问题还是通信问题"。

3. 建议的排查步骤

  1. 先把 SPI 降速到最低,确认画面稳定不乱码(排除时序问题)
  2. 只改 0x36,观察 0x00 / 0x08 / 0x40 / 0x48 / 0x60 / 0xA0 等几种组合下画面变化,找出与取模对应的正确组合
  3. 核对 0x2A/0x2B 窗口坐标范围是否与分辨率匹配(4寸常见 320×480 或 480×320)
  4. 与屏幕卖家提供的 ST7796S 标准初始化序列逐条对比

需要说明的是:这个帖子里目前没有完整的调通代码,也没有最终解决方案(最后回复是否定的)。ST7796S 屏驱也不是 STC 官方手册收录的外设(手册只讲 MCU 侧的 SPI/TFT 接口,不含具体屏驱芯片的初始化序列),所以关于 0x36 该写什么值,我无法从 STC 手册给出权威依据——上面第 1、2 条是基于 4 线 SPI 显示驱动的常规排查思路,属于经验性建议,供您参考验证。

如果您想让我结合 STC8H8K64U 从 MCU 侧帮你写一段规范的 SPI 驱动框架 + TFT 初始化骨架(手册里有 STC8H 的 SPI 寄存器和 TFT 彩屏接口章节),我可以基于手册原文为您编写,您把 ST7796S 的初始化序列填进去即可。需要的话请告诉我,并说明您用的具体 SPI 是硬件 SPI 还是 DMA-SPI 方案。


🔍 搜索 "STC 单片机 官方论坛 帖子"

⏱️ 查找用时 2.7s | 总回答用时 9.0s

回复

使用道具 举报 送花

已绑定手机

2

主题

5

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2026-10-20 11:24:00 | 显示全部楼层
谢谢大家的回复。经过排查,应该还是时序的问题,数据一次写入8千个,没问题,但是超出8500个,就会出现问题。见图片。但是这个时序该怎么协调呢?

一次写入8千数据

一次写入8千数据

一次写入1万个数据

一次写入1万个数据

程序这里变化

程序这里变化
回复

使用道具 举报 送花

已绑定手机

2

主题

154

回帖

470

积分

中级会员

积分
470
发表于 2026-10-20 11:40:13 | 显示全部楼层
poly*** 发表于 2026-10-20 11:24
谢谢大家的回复。经过排查,应该还是时序的问题,数据一次写入8千个,没问题,但是超出8500个,就会出现问 ...

像是数据错了,速度过快,干扰了。
你配置为24M/2=12M, 连线>10cm,频率超过10M可能效果不好。
降低速度试试。
回复

使用道具 举报 送花

已绑定手机

2

主题

5

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2026-10-20 11:58:27 | 显示全部楼层
jrc*** 发表于 2026-10-20 11:40
像是数据错了,速度过快,干扰了。
你配置为24M/2=12M, 连线>10cm,频率超过10M可能效果不好。
降低速度 ...

我试了,SPCTL= 0xD2;16分频也不行。搜AI上面说杜邦线不能大于10,也不知道是不是这个原因。
微信图片_20261020115707_283_2.jpg
回复

使用道具 举报 送花

已绑定手机

2

主题

5

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2026-10-20 13:45:58 | 显示全部楼层
搞定了,万能的AI
回复

使用道具 举报 送花

已绑定手机

25

主题

645

回帖

4477

积分

论坛元老

积分
4477
发表于 2026-10-21 08:19:02 | 显示全部楼层
poly*** 发表于 2026-10-20 13:45
搞定了,万能的AI

怎么解决的呢
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-8 02:08 , Processed in 0.082025 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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