octman 发表于 2025-8-10 17:06

SPI怎样传输24bit/帧的数据

因为我要用到AD5663, 这个芯片有3个数据pin, 分别是
CS(低电平有效)
MOSI: 24bit/帧, 也就是每次MCU要连续发送24bit数据给AD5663
CLK: 从第一个时钟的下降沿开始传数据, MSB先.

但是我看SPI库里面是16bit/帧, 请问一下有什么高招, 也不是一定要用SPI, 用同步串口也行, 有例程参考最好.
为何不用模拟SPI, 是因为感觉模拟的好慢, 照理240MHZ不应该慢的. 知道的请指教一下?

muyichuan2012 发表于 2025-8-11 09:38

本帖最后由 muyichuan2012 于 2025-8-11 09:39 编辑

SPI的结构体配置时,选择8bit,分三次发得到24bit,可以吗?
如下spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;

xch 发表于 2025-8-11 15:57

本帖最后由 xch 于 2025-8-11 16:00 编辑

那就用它的库初始化。之后你修改 SPI_CTRL1 的 FBN 位改成0。
这样就变成一次传8位。

coody 发表于 2025-8-11 23:32

分3帧传,用DMA,几千几万bit都是小事。

octman 发表于 2025-8-12 09:26

coody 发表于 2025-8-11 23:32
分3帧传,用DMA,几千几万bit都是小事。

有例程参考吗? 一次发送24bit

qintian0303 发表于 2025-8-14 09:03

240MHZ应该是你的主频吧,实际SPI的速度还是有很大限制的,不会达到那么大的

qintian0303 发表于 2025-8-14 09:04

每一次发送一个24位数据,将其拆分成3个8位的就可以发送了

qinlu123 发表于 2025-8-15 08:09

硬件SPI可以跑10M20M,模拟的1M都跑不到

lxs0026 发表于 2025-9-30 23:55

多数 MCU 的硬件 SPI 支持 “可变帧长” 或 “连续传输”,通过配置 SPI 控制器发送多帧数据(如先 16bit + 再 8bit),拼接成 24bit 完整帧。关键是确保 CS 信号在整个 24bit 传输期间保持低电平,避免中途失效。
页: [1]
查看完整版本: SPI怎样传输24bit/帧的数据