硬汉嵌入式论坛

 找回密码
 立即注册
查看: 573|回复: 3
收起左侧

[有问必答] STM32F4 当DMA和SPI数据宽度不一致时的奇怪现象

[复制链接]

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2025-2-28 18:11:50 | 显示全部楼层 |阅读模式
各位好汉们好,小弟在此有个问题:


环境: STM32F427 HAL库(最新版)
配置:SPI+DMA发送数据,SPI为16位数,DMA中的内存和外设的数据宽度:Msize和Psize都错误的设置成了8位(改成16位正常)
现象: 使用HAL_SPI_Transmit_DMA(&hspi3, buf ,1);进行发送数据,buf = 0xE900,通过嗅探数据,发现实际发送的为:0x0000,当我把长度改为2后,即HAL_SPI_Transmit_DMA(&hspi3, buf ,2);发送的数据为0x0000,0xE9E9,为啥是这个现象呢?连着两个E9拼成一个16位数据?这也太奇怪了
希望有好汉能指导说明一下,谢谢

微信图片_20250228181006.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116223
QQ
发表于 2025-3-1 06:02:35 | 显示全部楼层
因为这种情况下地址自增加也是1个字节的。DMA将分两次从同一个地址传输两次8bit数据给16bit SPI寄存器。
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2025-3-1 22:19:06 | 显示全部楼层
eric2013 发表于 2025-3-1 06:02
因为这种情况下地址自增加也是1个字节的。DMA将分两次从同一个地址传输两次8bit数据给16bit SPI寄存器。

谢谢我的硬汉哥,可以这么理解吗?这个奇怪现象的核心在于DMA自增的时机,由于SPI是16位,DMA是8位,DMA需要搬运两次才能满足SPI需求,但是DMA自增发生在SPI发送后,而不是发生在本身的一次搬运后?所以在相同地址搬运两次,等SPI发送出去后,才递增
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116223
QQ
发表于 2025-3-2 09:42:35 | 显示全部楼层
Lihongxiang 发表于 2025-3-1 22:19
谢谢我的硬汉哥,可以这么理解吗?这个奇怪现象的核心在于DMA自增的时机,由于SPI是16位,DMA是8位,DMA ...

对,就是这个意思。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 10:54 , Processed in 0.271735 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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