OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 380|回复: 6

求助:103用SPI3驱动LCD的DMA问题

[复制链接]

5

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
522
金钱
522
注册时间
2019-5-31
在线时间
184 小时
发表于 2025-8-16 05:55:50 | 显示全部楼层 |阅读模式
1金钱
这是一个用STM32F103RE的SPI3驱动S7789的代码,DMA有问题,但是我查不到了,请求帮忙!
  1.   while(1)
  2.         {
  3.         POINT_COLOR=GREEN;
  4.   BACK_COLOR=RED;
  5. for (i=0;i<10;i++)                //显示计数、DMA传输
  6.                 {
  7.            LCD_ShowString(0,0,240,320,24,(u8 *)"Fill ");
  8.      LCD_ShowChar(60,0,i+0x30,24,0);                       
  9.                  LCD_ShowString(72,0,240,320,24,(u8 *)" With DMA.....");
  10.            LCD_DMA_Fill(0,24,240,320,color_tab[i])        ; //换色号
  11.                 }
  12.         POINT_COLOR=RED;
  13.   BACK_COLOR=GREEN;
  14. for (i=0;i<10;i++)                                //显示计数、无DMA传输
  15.                 {
  16.            LCD_ShowString(0,0,240,320,24,(u8 *)"Fill ");       
  17.                  LCD_ShowChar(60,0,i+0x30,24,0);       
  18.                  LCD_ShowString(72,0,240,320,24,(u8 *)" Without DMA..");
  19.            LCD_Fill(0,24,240,320,color_tab[i])        ;//换色号
  20.                 }               
  21.         }
复制代码
无DMA传输时,一切正常 ;

DMA传输时,计数是跳着来的,没有FILL满就跳到下一个色号,且几轮下来,最终必死在DMA里。




SPI_DMA_2.0LCD驱动.rar (326.08 KB, 下载次数: 3)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

3452

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8877
金钱
8877
注册时间
2020-5-11
在线时间
4396 小时
发表于 2025-8-18 09:11:16 | 显示全部楼层
“没有FILL满”,具体有多少?是否有规律?
假如让它只填充小块区域,是否能把小块填满?
还有就是需要验证一下,DMA结束到CS置高的时序,当CS置高时,SPI是否已经把数据发完了?可以FILL几个字节的数据看看波形。
专治疑难杂症
回复

使用道具 举报

11

主题

2174

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5121
金钱
5121
注册时间
2015-1-10
在线时间
641 小时
发表于 2025-8-18 11:32:32 | 显示全部楼层
有没有可能DMA单次还没结束就重新载入新的数据了?
回复

使用道具 举报

5

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
522
金钱
522
注册时间
2019-5-31
在线时间
184 小时
 楼主| 发表于 2025-8-18 16:45:02 | 显示全部楼层
LcwSwust 发表于 2025-8-18 09:11
“没有FILL满”,具体有多少?是否有规律?
假如让它只填充小块区域,是否能把小块填满?
还有就是需要验 ...

比如,本来代码要求单色填满全屏240*320,但到了240*290的样子,就开始下一色的填充。
即使改小需填充的区域,依然有不小的空隙没着色。
预设填充一色值,显示计数加1,从1-10,但实际情况是1->3->5..这样的计数显示出来
回复

使用道具 举报

5

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
522
金钱
522
注册时间
2019-5-31
在线时间
184 小时
 楼主| 发表于 2025-8-18 16:45:56 | 显示全部楼层
阿侑kevin 发表于 2025-8-18 11:32
有没有可能DMA单次还没结束就重新载入新的数据了?

极有可能!但我现有的条件没办法判断是不是没结束重载入了
回复

使用道具 举报

13

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
856
金钱
856
注册时间
2018-12-19
在线时间
174 小时
发表于 2025-8-19 17:02:39 | 显示全部楼层
一次少刷几行试一下,DMA一次最多只能传输65535个数据,可以是65535个字节,也可以是65535个半字,也可以是65535个字,这个芯片的SPI DMA没有问题,我用了很多年了
回复

使用道具 举报

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2018-4-5
在线时间
75 小时
发表于 2025-8-21 11:25:04 | 显示全部楼层
zhuls12 发表于 2025-8-18 16:45
极有可能!但我现有的条件没办法判断是不是没结束重载入了

加个锁试试,检测到DMA工作未完成时不允许重新载入
保守秘密,守望共济,等价交换,尊重知识,探求真知。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-9-23 13:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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