我正在尝试将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位(最有可能用于存储数据读/写)-问题是,如何配置GPIO以读取数据?我在这里有些不安。我的直觉告诉我,Nucleo可能不够快,无法读取来自ADC的数据……有什么想法吗?全部都是用C / C ++编写的,基本上都是裸机...我是Nucleo的新手,四年没有写过代码-请原谅知识的流失...
答案 0 :(得分:3)
如果DCLK工作在20Mhz,则uC显然不够快(每个周期之间只有3条指令,因此即使汇编语言也很难实现...)。由于我对stm体系结构不熟悉,因此我只能提出一个可能会激发您一些想法的技巧。与其在ADC上使用晶振,不如使用连接到输出引脚的STM定时器,并使用该引脚(MCLK)为ADC计时。使用SPI,空闲模式等配置ADC时,可以将此时钟信号保持在20Mhz。但是,当您需要ADC的样本时,请停止STM计时器,并“手动”为ADC计时。 (实际上是控制DCLK信号)。转换例程结束后,以20Mhz重新启动计时器。