eb320 发表于 2025-8-21 16:35

如何快速读取SPI非LL

因为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 快很多。
页: [1]
查看完整版本: 如何快速读取SPI非LL