找回密码
 立即注册
查看: 212|回复: 27

STC32G DMA+SPI驱动LCD彩屏有问题|已解决

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-27 21:49:47

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 18:26:47 | 显示全部楼层 |阅读模式
ST7735,像素128*160,单独使用软件驱动、硬件SPI驱动都没问题,把DMA加上刷新就乱了。
目前查出来问题是CS时序错位了,片选没有用SS,CS是P26手动控制的,操作DMA导致CS时序错位。
找到问题了,代码清除标志放到了后面,DMA完成后SPIF为1,导致还没有发送完成就退出while拉高CS了,接着硬件发送完成又将SPIF置1,导致下一个数据也出现同样的情况,发送数据前先清除标志就是对的。
代码已修改,可以正常运行: LCD-TEST.zip (128.32 KB, 下载次数: 1)
截图202504251036318929.jpg
截图202504241823582605.jpg
lcd.h定义
截图202504250841409940.jpg
显示测试函数,直接将SPI_DMA_Run()注释掉CS时序就是正常的。
截图202504250843374518.jpg
片选没有用SS,CS是P26手动控制的,操作DMA导致CS时序错位。
下面是时序图,上面一组是有DMA发送数据的(CS时序错位),下面一组是屏蔽了DMA发送的(CS时序正常)。
时序对应代码LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
截图202504242308541004.jpg
截图202504250854296916.jpg




截图202504242255361785.jpg
截图202504242256288984.jpg
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-24 18:28:00 | 显示全部楼层
针对您提到的STC32G芯片在使用DMA+SPI驱动ST7735 LCD彩屏时出现刷新混乱的问题,以下是一些可能的原因及解决方案,供您参考:

1. DMA配置问题
DMA传输模式:确保DMA配置为正确的传输模式(如内存到外设模式),并且传输宽度与SPI数据宽度匹配。
DMA缓冲区对齐:检查DMA缓冲区的地址是否对齐,未对齐的地址可能导致数据传输错误。
DMA传输长度:确认DMA传输长度设置正确,避免传输过多或过少的数据。

2. SPI配置问题
SPI时钟频率:确保SPI时钟频率与LCD屏的时序要求匹配,过高的频率可能导致数据传输不稳定。
SPI数据格式:检查SPI数据格式(如数据位宽、极性、相位)是否与LCD屏的通信协议一致。
SPI DMA使能:确认SPI的DMA使能位已正确设置,以确保DMA能够正常触发SPI传输。

3. 时序问题
DMA与SPI的同步:DMA传输与SPI传输之间可能存在时序不同步的问题,建议在DMA传输完成后加入适当的延时或等待SPI传输完成的标志。
LCD屏的初始化时序:确保LCD屏的初始化时序正确,特别是在使用DMA传输时,初始化命令和数据可能需要额外的延时。

4. 内存管理问题
DMA缓冲区溢出:检查DMA缓冲区是否足够大,避免缓冲区溢出导致数据传输错误。
内存访问冲突:确保DMA缓冲区在传输过程中不会被其他任务或中断修改,导致数据不一致。

5. 中断处理
DMA传输完成中断:如果使用了DMA传输完成中断,确保中断处理函数中正确清除中断标志,并处理可能的错误情况。
SPI传输完成中断:如果SPI传输完成中断与DMA传输同时使用,确保中断处理函数不会干扰DMA传输。

6. 调试建议
逐步调试:建议逐步调试,先使用软件SPI驱动确认LCD屏的基本功能正常,再逐步引入硬件SPI和DMA,观察每一步的变化。
逻辑分析仪:使用逻辑分析仪捕获SPI信号,分析数据传输的时序和内容,找出可能的错误点。
调试信息输出:在关键步骤输出调试信息,如DMA传输开始和结束的标志,SPI传输的状态等,帮助定位问题。

7. 代码优化
DMA传输优化:优化DMA传输的代码,减少不必要的操作,确保DMA传输的效率和稳定性。
SPI传输优化:优化SPI传输的代码,确保SPI传输的时序和数据格式正确。

8. 参考文档
芯片手册:仔细阅读STC32G芯片手册中关于DMA和SPI的章节,确保配置符合芯片的要求。
LCD屏手册:参考ST7735 LCD屏的手册,确保通信协议和时序配置正确。

通过以上步骤的排查和优化,您应该能够解决DMA+SPI驱动ST7735 LCD彩屏时出现的刷新混乱问题。如果问题仍然存在,建议进一步分析具体的硬件和软件环境,或寻求更专业的技术支持。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2940

积分

荣誉版主

无情的代码机器

积分
2940
发表于 2025-4-24 19:01:28 | 显示全部楼层
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-27 21:49:47

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 19:22:52 | 显示全部楼层
erci*** 发表于 2025-4-24 19:01
首先解决内存对齐问题
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=16306

两种我都试过了,一样的

点评

软件驱动效果是怎样的?看着是个刷全屏纯色的逻辑,怎么DMA各只刷了一行。  发表于 2025-4-24 20:22
上传完整工程看看  详情 回复 发表于 2025-4-24 20:20
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2940

积分

荣誉版主

无情的代码机器

积分
2940
发表于 2025-4-24 20:20:37 | 显示全部楼层
fei*** 发表于 2025-4-24 19:22
两种我都试过了,一样的

上传完整工程看看
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-27 21:49:47

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 21:29:48 | 显示全部楼层
截图202504242125254318.jpg
我找到问题了,CS片选错位了,不知道什么原因引起的,把LCD_DMA_Fill里面的DMA发送(SPI_DMA_Run)注释了CS就是正常。
从时序上看是DMA发送影响到片选了,图片中上面有DMA的CS片选时序错了,下面没有DMA是对的。

点评

使用SPI_DMA也要先正确配置SPI相关寄存器 SS不需要逐字节控制,忽略SS使用GPIO控制SS即可,数据包之前置0,数据包之后置1 [attachimg]95172[/attachimg] [attachimg]95173[/attachimg] [attachimg]95174[/atta  详情 回复 发表于 2025-4-24 22:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-27 21:49:47

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 21:31:46 | 显示全部楼层
erci*** 发表于 2025-4-24 20:20
上传完整工程看看

可以看看我发的时序图,我明天空了把这部分代码拆出来上传。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-27 21:49:47

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 21:32:05 | 显示全部楼层
erci*** 发表于 2025-4-24 20:20
上传完整工程看看

可以看看我发的时序图,我明天空了把这部分代码拆出来上传。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-27 21:49:47

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 21:40:27 | 显示全部楼层
这是写数据命令的代码
截图202504242140127404.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-24 22:13:54 | 显示全部楼层
fei*** 发表于 2025-4-24 21:29
我找到问题了,CS片选错位了,不知道什么原因引起的,把LCD_DMA_Fill里面的DMA发送(SPI_DMA_Run)注释了C ...

使用SPI_DMA也要先正确配置SPI相关寄存器
SS不需要逐字节控制,忽略SS使用GPIO控制SS即可,数据包之前置0,数据包之后置1


截图202504242205074633.jpg


截图202504242209111215.jpg


截图202504242213183130.jpg

点评

你这个直接拉低的办法确实可以正常运行,不过我想知道为啥有DMA会导致CS会错位,我也没用SS,用的P26手动控制的,再怎么也不会出现这种现象吧,很奇怪。   发表于 2025-4-24 22:43
DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 09:08 , Processed in 0.163451 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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