你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

经验分享 | LAT1470 SPI传输长度超过1024时出现异常的问题分析

[复制链接]
攻城狮Melo 发布时间:2026-3-19 16:56

SPI 传输长度超过 1024 时出现异常的问题分析总结

详细文档:点击下载>

一、问题背景

客户使用STM32U595QII6Q 芯片的 SPI3 作为主设备,通过 HAL 库 SPI 相关发送函数与外设通信时,发现传输数据长度超过 1024 字节 ,发送完成的回调函数HAL_SPI_TxRxCpltCallback无法执行,半双工 / 全双工模式下均存在该问题。

二、问题复现

因无对应开发板,使用NUCLEO-U575ZI-Q 进行复现,步骤及结果如下:

  1. 运行 STM32CubeU5 库中 SPI_DMA 全双工例程,默认配置下通信正常;
  2. 将传输长度修改为 512 字节,填充 0xa5 数据,通信仍正常;修改为 1024 字节(512<<1),复现回调函数不执行 的问题;
  3. 用 STM32CubeMX 配置最小化工程,将 SPI3 设为半双工模式,测试结果与全双工一致,1024 字节传输时异常。

三、问题根因分析

image.png

  1. 寄存器状态异常 :调试发现,512 字节正常传输时,SPI3 的 CR2 寄存器 TSIZE 位为 0x200(对应实际长度);1024 字节传输时,CR2 寄存器 TSIZE 位为 0x0000,长度配置未生效
  2. HAL 库代码执行问题 :单步调试HAL_SPI_TransmitReceive_DMA函数发现,代码中对 SPI_CR2_TSIZE 位的修改操作执行失败 ,导致 TSIZE 始终为 0。 image.png
  3. 芯片硬件特性限制 :查阅 STM32U5 参考手册 RM0456 可知,STM32U5 的 SPI 外设分为全功能版(SPI1、SPI2) 精简功能版(SPI3) ,其中 SPI3 存在明确的传输长度限制:最大支持 1023 字节的传输 ,无剩余数据计数器(CTSIZE),当传输长度设为 1024 字节时,超出硬件最大限制,导致寄存器配置失败。
  4. TSIZE 位功能特性 :SPI_CR2 寄存器的 TSIZE 位用于配置当前传输数据量,硬件要求修改该位时 SPI 需禁用;且 SPI3 的 TSIZE [15:10] 位为保留位,进一步限制了传输长度配置,1024 字节的配置值超出其有效范围。 image.png image.png image.png

四、解决方案与优化建议

针对 STM32U5 系列 MCU 的 SPI3 长度限制问题,对 HAL 库的 SPI_DMA 驱动代码进行修改,增加长度校验逻辑 ,避免因配置超出硬件限制导致的通信异常,修改后核心代码如下:

c

运行

if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && 
(hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR)) 
{ 
    MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); 
} 
else 
{ 
    if( SPI3 == hspi->Instance && Size >= 1023) 
    {
        status = HAL_ERROR; // 超出长度限制,返回错误
    } 
    else 
    { 
        MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); // 正常配置长度
    }
}

五、核心结论

使用STM32U575/U585/U595 系列 MCU 的 SPI3 进行通信时,需严格注意传输数据长度不可超过 1023 字节 ,若有大长度数据传输需求,可通过分包传输 的方式实现,或更换为无长度限制的 SPI1、SPI2 外设。

收藏 评论0 发布时间:2026-3-19 16:56

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版