[其他ST产品] HAL_I2S_Receive_DMA () 函数的 DMA 长度参数存在问题

[复制链接]
15|0
地瓜patch 发表于 2026-3-12 08:56 | 显示全部楼层 |阅读模式
ST 官方手册UM1905对size参数的说明如下:
当选择 24 位数据帧或 32 位数据帧时,Size参数表示16 位数据的数量。
这意味着,无论数据帧实际位宽是多少,传递给 DMA 的缓冲区长度都必须以int16_t的个数来计量;换句话说,若缓冲区按int32_t类型定义,其长度值需要乘以 2。
我在网上看到多个示例代码均遵循这一规范编写,但该文档描述与实际行为不符:当 I2S 的数据位宽为 32 位或 24 位时,HAL_I2S_Receive_DMA () 函数实际会将size参数解读为缓冲区中int32_t类型数据的个数。
这一行为可通过阅读stm32f7xx_hal_i2s.c源码验证:

7911769b20f31a1283.png
如截图所示,该 API 会在数据位宽为 24 位或 32 位时对size参数做补偿处理,导致函数实际行为与文档说明不一致。
文档说明与源码实现,哪一个是正确的?
经验证,该问题在 Nucleo-F722、F446 和 G431 开发板上均存在。其中 F722 所使用的固件为 STM32Cube FW_F7 V1.15.0 版本。

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

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

2912

主题

17834

帖子

30

粉丝
快速回复 在线客服 返回列表 返回顶部
0