繁体   English   中英

使用STM32F3读取非传统ADC

[英]Read non conventional ADC with STM32F3

我正在尝试将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年内没有编写代码 - 请原谅任何知识失误......

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM