[STM32H5] 如何快速读取SPI非LL

[复制链接]
800|12
eb320 发表于 2025-8-21 16:35 | 显示全部楼层 |阅读模式
因为24位ADC每次转换都需要一个触发脉冲,因此无法用DMA模式,所以读取spi成为瓶颈,现在用HAL读取SPI约2us,除了LL还能更快吗?LL搞不定。

谢谢!
公羊子丹 发表于 2025-8-26 07:32 | 显示全部楼层
你也可以尝试用OpenOCD代替CubeIDE自带的GDBServer,有时对断点处理会更稳定。
周半梅 发表于 2025-8-26 07:32 | 显示全部楼层
HAL SPI 的确开销比较大,每次函数调用都有不少额外逻辑。
帛灿灿 发表于 2025-8-26 07:33 | 显示全部楼层
虽然 DMA 不行,但可以用中断方式配合硬件触发,减少 CPU 空转等待。
童雨竹 发表于 2025-8-26 07:34 | 显示全部楼层
如果数据量不大,可以考虑一次触发读三字节,把 SPI 配成 24bit frame,效率会好一些。
万图 发表于 2025-8-26 07:35 | 显示全部楼层
还有办法是用 SPI 的 FIFO 特性,把时钟拉到极限,CPU 只是收最后的数据。
Wordsworth 发表于 2025-8-26 07:37 | 显示全部楼层
有些 ADC 支持 daisy-chain 模式,你看能不能合并触发,减少访问次数。
Bblythe 发表于 2025-8-26 07:38 | 显示全部楼层
其实 HAL 里的 SPI 函数你可以改造一下,把状态检查和等待循环简化掉。
Pulitzer 发表于 2025-8-26 07:39 | 显示全部楼层
H5 的主频很高,可以先算下理论 SPI 时钟和传输周期,看看瓶颈是不是在代码层面。
Uriah 发表于 2025-8-26 07:40 | 显示全部楼层
如果只是单通道采样,考虑用定时器触发 GPIO,然后在中断里立刻收 SPI。
Clyde011 发表于 2025-8-26 07:41 | 显示全部楼层
最终如果对时序要求极高,裸寄存器写 SPI 才是最快的,HAL/LL 都比不过手写寄存器操作。
周半梅 发表于 2025-8-26 07:42 | 显示全部楼层
你可以考虑直接操作寄存器,不用 LL 库,写几个专用的 inline 函数,会比 HAL 快很多。
星辰大海不退缩 发表于 2025-8-28 23:00 | 显示全部楼层
HAL SPI 的确开销比较大,每次函数调用都有不少额外逻辑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

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