【官方原创】使用GPDMA进行SPI LCD整屏传输 LAT1435

关键字:SPI LCD, GPDMA

1. 引言

客户需要评估STM32U5+SPI LCD整屏刷新时的显示效果。一般SPI LCD都内置了

GRAM,在使用TouchGFX时都会选用部分帧缓冲以节省内存。客户需要整屏刷新,并尽

量节省内存,则需要使用单帧缓冲的方式。

2. 问题

本文使用STM32U575 NUCLEO板与X-NUCLEO-GFX01M1板上的SPI LCD进行了

测试。此LCD分辨率为320x240,16bpp色深,整屏传输时数据量为153600字节。而

U5的GPDMA一次数据传输要小于64K,因此LCD整屏传输需要由多次DMA传输完

成。利用U5的GPDMA链表模式,可将帧缓冲的数据组织到一个链表中,由DMA一次

性传输完成即可实现LCD的整屏刷新。

在实际调试中却发现,在准备好GPDMA链表后,调用HAL_SPI_Transmit_DMA函

数启动链表传输后,屏幕显示不完整,也没有DMA传输完成回调。

2.1. SPI 及GPDMA LinkedList配置

X-NUCLEO-GFX01M1板的LCD控制命令为8bit,像素数据为RGB565,因此在初

始化SPI外设时,需要定义datasize 为8bit,而在用DMA传输像素数据时,需要将高

低字节对调,因此要将DMA的源数据位宽、目的数据位宽都为HALFWORD,并且使用

GPDMA的数据处理功能完成高低字节对调。

在使用GPDMA数据处理功能时,SPI的初始化配置中,需要将FifoThreshold配置

为SPI_FIFO_THRESHOLD_02DATA或更大的偶数。

图1. SPI初始化代码

在GPDMA链表的初始化中,使用DataExchange配置对HALFWORD进行高低字

节对调,通过配置3个链表节点来完成整屏像素数据的传输,前两次分别传输(64*1024

2)字节,第三次传输剩下的像素数据。

图2. GPDMA链表初始化代码

2.2. 问题及解决

在启动SPI DMA传输前,将DMA通道与链表关联,SPI外设也要与DMA通道关

联,然后就能使用HAL_SPI_Transmit_DMA函数开始SPI传输。但这样并没有完成整屏

数据的传输。调试发现,SPI显示传输完成,而DMA却处于BUSY状态。

图3. SPI DMA与链表关联

查看HAL_SPI_Transmit_DMA 函数,在配置SPI寄存器时,由于DMA通道配置为

Linear 模式,这样会配置SPI CR2寄存器值为当前传输大小(64*1024-2),如下图:

图4. HAL_SPI_Transmit_DMA 代码片段

这样,在SPI传输完链表第一个节点的数据后,SPI状态寄存器显示已经传输完成,导

致链表后续节点无DMA请求而无法进行传输。

在SPI不确定传输数据大小时,需要将TSIZE配置为0。因此可以将DMA模式修改

成DMA_LINKEDLIST_CIRCULAR。这样在链表的3个节点配置均传输完成后,会产生

DMA完成中断。

图5. 启动SPI DMA传输

另外,在TSIZE配置为0时,SPI不会产生传输完成标志。因此在DMA传输完成

后,不能马上disable SPI或者将SPI片选拉高。因为DMA传输完成仅表示DMA将数

据传输到SPI的TX FIFO中,而SPI还需要一点时间将FIFO中的数据发送出去。

3. 小结

在使用STM32U5的GPDMA链表模式进行SPI通信时,需要将SPI的TSIZE配置为

0,才能使链表的多个节点配置逐个执行,完成所有数据的发送。


意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

相关推荐
聚铭网络6 小时前
聚铭网络成功入围徐州市大数据集团2026年业务类合作供应商名录(第一批次)
大数据·网络
7yewh6 小时前
jetson_yolo_deployment 01_linux_dev_env
linux·嵌入式硬件·yolo·机器人·嵌入式
hy____1238 小时前
Linux_网络基础3
linux·服务器·网络
WinstonMao8 小时前
STM32上电不能开机运行问题排查
stm32·单片机·嵌入式硬件
Striver-Diligent8 小时前
GenNP: 一种低门槛且功能强大的网络性能数据生成器
网络·计算机网络·并行·网络仿真·网络性能估计·离散事件仿真
qAICHjag11 小时前
最新单目标测试集,灰狼算法跑cec2022测试集,这是最新的单目标测试集,能够有效评估算法的性能
stm32
csg110712 小时前
PIC单片机高阶实战(四):PIC32MX串口与4G模块通信
单片机·嵌入式硬件·物联网
我是唐青枫12 小时前
C#.NET ReadOnlySequence 深入解析:多段内存遍历与零拷贝协议解析
网络·c#·.net
BackCatK Chen12 小时前
STM32保姆级入门教程|第3章:从新建工程到LED闪烁点灯(Hex生成+ST-Link/J-Link切换全攻略)
stm32·单片机·stm32cubeide·led 闪烁点灯·st-link/j-link
带娃的IT创业者13 小时前
WeClaw 心跳与重连实战:指数退避算法如何让 WebSocket 在弱网环境下的连接成功率提升 67%?
python·websocket·网络协议·算法·fastapi·实时通信