1

我正在尝试将 STM32F303 Nucleo 与 AD7748-4 ADC 连接。ADC 数据表:

https://www.analog.com/media/en/technical-documentation/data-sheets/ad7768-7768-4.pdf

问题是,ADC 不通过 SPI 端口输出转换后的值,而是采用数据就绪信号 (DRDY)、数据时钟 (DCLK) 和 4 个数据输出 (DOUT0-DOUT3) 的组合。如果我这样设置,输出会通过一根线串行传输 96 位,但时序在我的应用程序中至关重要,我需要使用 DOUT0 到 DOUT2 对数据进行计时,每个输出 32 位。如果我正在串行传输数据,我可以欺骗 SPI 端口读取它,但我不是。ADC 以 20MHz 运行,因此 DCLK 将以相同频率运行。Nucleo 的最高运行频率为 72MHz,但是当使用 DAM 时,它将时钟设置为 64MHz。

在STM手册中,将“GPIO端口输入数据寄存器(GPIOx_IDR)(x = A..H)”描述为只读寄存器 - 我的理解是低16位可以存储最多16位的输入值(最有可能用于内存数据 R/W) - 所以问题是,如何配置 GPIO 以读取数据?我在这里有点僵局。我的直觉告诉我,Nucleo 可能不够快,无法读取来自 ADC 的数据……有什么想法吗?全部都是用 C/C++ 编写的,基本上是裸机......我是 Nucleo 的新手,已经 4 年没有写过代码了 - 请原谅任何知识上的失误......

4

1 回答 1

3

如果 DCLK 工作在 20Mhz,那么 uC 显然不够快(每个周期之间大约有 3 条指令,所以即使是汇编语言也很难实现......)。由于我不熟悉 stm 架构,我只能提出一个技巧,可能会在您的脑海中激发一些想法。与其为 ADC 使用晶体,不如使用 STM 中连接到输出引脚的定时器,并使用该引脚 (MCLK) 为 ADC 提供时钟。使用 spi、空闲模式等配置 ADC 时,您可以将此时钟信号保持在 20Mhz。但是,当您需要来自 ADC 的样本时,请停止 STM 定时器并“手动”为 ADC 计时。(您实际上控制了 DCLK 信号)。转换程序结束后,以 20Mhz 重新启动计时器。

于 2018-11-13T14:55:21.107 回答