找回密码
 立即注册
楼主: feiyu

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

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

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 22:26:10 | 显示全部楼层
Debu*** 发表于 2025-4-24 22:13
使用SPI_DMA也要先正确配置SPI相关寄存器
SS不需要逐字节控制,忽略SS使用GPIO控制SS即可,数据包之前置0 ...

我没用SS,我直接IO口控制的,写的时候方便就这么写了,肯定是可以正常通信的,用软件和SPI硬件都是正常的,现在是不知道为啥用DMA就会导致CS错位

点评

SS和其他信号不同步 不能硬件操作SCLK和MOSI同时软件操作SS  详情 回复 发表于 2025-4-24 22:29
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-24 22:29:14 | 显示全部楼层
fei*** 发表于 2025-4-24 22:26
我没用SS,我直接IO口控制的,写的时候方便就这么写了,肯定是可以正常通信的,用软件和SPI硬件都是正常 ...

SS和其他信号不同步
不能硬件操作SCLK和MOSI同时软件逐字节操作SS
DebugLab
回复 支持 反对

使用道具 举报 送花

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

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 22:32:37 | 显示全部楼层
Debu*** 发表于 2025-4-24 22:29
SS和其他信号不同步
不能硬件操作SCLK和MOSI同时软件逐字节操作SS


P_SW1 = (P_SW1 & ~(3<<2)) | (1<<2);     //IO口切换. 0: P1.2/P5.4 P1.3 P1.4 P1.5, 1: P2.2 P2.3 P2.4 P2.5, 2: P5.4 P4.0 P4.1 P4.3, 3: P3.5 P3.4 P3.3 P3.2
    SSIG = 1; //忽略 SS 引脚功能,使用 MSTR 确定器件是主机还是从机
    SPEN = 1; //使能 SPI 功能
    DORD = 0; //先发送/接收数据的高位( MSB)
    MSTR = 1; //设置主机模式
    CPOL = 0; //SCLK 空闲时为低电平,SCLK 的前时钟沿为上升沿,后时钟沿为下降沿
    CPHA = 0; //数据 SS 管脚为低电平驱动第一位数据并在 SCLK 的后时钟沿改变数据
    SPCTL = (SPCTL & ~3) | 3;   //SPI 时钟频率选择, 0: 4T, 1: 8T,  2: 16T,  3: 2T

我没有用SS,CS脚一直是手动控制的,P26

点评

数据包前置0,数据包后置1,不要逐字节操作  详情 回复 发表于 2025-4-24 22:40
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-24 22:40:50 | 显示全部楼层

数据包前置0,数据包后置1,不要逐字节操作

点评

是可以,但是每个字节都拉高拉低也不该有问题的,现在我想知道CS错位的原因  发表于 2025-4-24 22:48
DebugLab
回复 支持 反对

使用道具 举报 送花

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

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 2025-4-24 22:50:56 | 显示全部楼层
Debu*** 发表于 2025-4-24 22:40
数据包前置0,数据包后置1,不要逐字节操作

我纯软件和纯硬件都是每个字节都控制了CS,可以正常运行,只有加了DMA之后CS错位。
回复 支持 反对

使用道具 举报 送花

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

6

主题

65

回帖

538

积分

高级会员

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

是全屏刷纯色,因为CS时序错位了,导致通信出错,所以只有局部。

点评

DMA是批量数据传输,不要每个字节都操作CS 除非每次只发送一个字节,但每次只发送一个字节就没有必要用DMA  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 7 天前 | 显示全部楼层
fei*** 发表于 2025-4-24 23:02
是全屏刷纯色,因为CS时序错位了,导致通信出错,所以只有局部。

DMA是批量数据传输,不要每个字节都操作CS
除非每次只发送一个字节,但每次只发送一个字节就没有必要用DMA
DebugLab
回复 支持 反对

使用道具 举报 送花

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

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 7 天前 | 显示全部楼层
Debu*** 发表于 2025-4-25 08:04
DMA是批量数据传输,不要每个字节都操作CS
除非每次只发送一个字节,但每次只发送一个字节就没有必要用DM ...

是设置地址命令字节操作CS,DMA发送屏幕颜色数据时是一直接拉低的,你看第一个时序,后面有一堆数据那里才是DMA在发送

点评

一般设置地址阶段是不使用DMA的,因为数据量很小 设置好地址后,开启DMA批量发送像素数据  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

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

6

主题

65

回帖

538

积分

高级会员

积分
538
发表于 7 天前 | 显示全部楼层
代码已上传
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 7 天前 | 显示全部楼层
fei*** 发表于 2025-4-25 08:15
是设置地址命令字节操作CS,DMA发送屏幕颜色数据时是一直接拉低的,你看第一个时序,后面有一堆数据那里 ...

一般设置地址阶段是不使用DMA的,因为数据量很小
设置好地址后,开启DMA批量发送像素数据
DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 09:10 , Processed in 0.142608 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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