这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32U385的SPIGPDMA调试记录

共4条 1/1 1 跳转至

STM32U385的SPIGPDMA调试记录

工程师
2025-06-15 14:36:23     打赏

【前言】

在TouchGFX移植中,我使用spi的模拟、硬件SPI以及SPI+GPDMA进行了优化,在这个过程中,遇到了GPDMA只进了半传输中断,不进传输完的中断,经过问题查找后找到STM32CubeMX配置中的问题,现记录如下:

【开发环境】

1、STM32cubeMX

2、TouchGFX Designer

3、CLion

【硬件环境】

1、STM32U385RQ

2、ST7789 TFTLCD

【缘由】

1、我最起先的spi配置如下:

image.png

【注】三个GPIO的选择Pull-up,我前面没有这么配置,SCK好象是不起时序的。速度需要配置为Very High,要不分频到48MHz时,速度会上不去。

2、参数设置:

image.png

由于ST7789的命令传输是8bit的数据,所以Data Size是配置为8bit。时钟分频为2,STM32U385的SPI是挂载在APB2总线上的,最大速度为96MHz,经分频后,SPI总线最大为48MHz。

image.png

时钟极性为空闲时高电平,在第下降沿采样。

【注】我在其他的MCU中,配置为空闲时低电平,在上升沿采样才能驱动,st7789的用户手册也是这个模式,但是在STM32U385中,需要配置这样配置才能正常通信。

同时CS采用软件控制。

3、GPDMA配置:

image.png

在GPDMA中我开启了Channle0为Standard Request Mode【注】其实也可以配置为link模式,但是配置复杂一些。

在CH0中,Circular 配置为Disable,即禁用。

Request 配置为SPI1_TX,Direction为从内存到外设,最重要的是Source Date Setinng 自增长(Source Address Increment After Transfer)设为Enabled 即发送数据后,地址自增长,Data Width设置为Half Word(即16bit),长度为1。

当我认为这样设置成功后,没有设置Destination Data Setting时,开启16bit DMA传输时,只进了半传输中断。经调试是不会进发送完成中断的。前面我设置的截图如下:

image.png

进入调试模式时,在中断回调时产生了半传输中断,但是传输完中断一直不进:

image.png

后面与以前的工程进行对比,发现Destination Data Setting也需要配置为half world。经修改后,就可以正常进行传输完中断,更新标志,从而使用程序能正常运行了。

【总结】

在DMA传输中,如果配置了中断,那莫他有三种中断产生,即半传输中断、传完成中断,还有就是错误中断,这三个中断产生与处理,都需要配置好,并在回调函数处理,才能使工程正常运行。特别是我们在8bit 16bit传输有交叉时,应该时刻注意这些中断产生的条件与处理。






关键词: STM32U385     GPDMA    

院士
2025-06-15 17:16:43     打赏
2楼

学习了,谢谢分享。


专家
2025-06-15 17:34:37     打赏
3楼

感谢分享


专家
2025-06-15 17:39:24     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]