当前位置: 首页 > 知识库问答 >
问题:

使用STM32F3读取非常规ADC

刘明朗
2023-03-14

我正在尝试将STM32F303核子与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对数据进行计时,每个DOUT2将输出32位。如果我以串行方式传输数据,我可以欺骗SPI端口读取数据,但我没有。ADC以20MHz的频率运行,因此DCLK将以相同的频率运行。Nucleo的最大运行频率为72MHz,但当使用DAM时,它会将时钟设置为64MHz。

在STM手册中,描述了GPIO端口输入数据寄存器(GPIOx_IDR)(x=A...作为一个只读寄存器——我的理解是,较低的16位可以存储高达16位的输入值(最有可能是内存数据R/W)——所以问题是,我如何配置GPIO来读取数据?我这里有点僵局。我的直觉告诉我,核子可能不够快,无法读取来自ADC的数据...有什么想法吗?都是用C/C写的,基本上是裸露的金属...我是新来的,已经4年没有写代码了——原谅任何知识上的失误...

共有1个答案

曹泉
2023-03-14

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

 类似资料:
  • 我们在项目中使用Apache POI(3.9版)来创建PowerPoint (pptx)文件。但是,其中一些变得非常大(2000张幻灯片,每张幻灯片上有许多形状),因此生成会产生< code>GC开销限制超出错误。 堆空间大小不在我们的控制范围内,因为我们只为 RCP“父”应用程序开发一个插件。 有没有办法写(和读)这么大的文件?我们对Excel文档使用了流式API,并取得了巨大的成功,但是没有针

  • 好的,我所有的类都在几个包中:Game/src/pack 1/Class.class 我想进入一个文件:游戏/分辨率/地形。巴布亚新几内亚 我该怎么做? 然后我得到这个错误:

  • 问题内容: 我想返回一个包含CSS规则所有内容的字符串,就像您在嵌入式样式中看到的格式一样。我希望能够在不知道特定规则中包含什么的情况下执行此操作,因此我不能仅通过样式名称(如等)将它们拉出。 CSS: 到目前为止的代码: 问题答案: 以scunliffe的答案为基础:

  • 我正在使用Java开发一个web应用程序,在这里我有一个方法可以读取。使用apache poi的xlsx文件: 该方法工作正常,但是该方法处理具有数千行记录的文件的可能性有多大,例如,大约2530万行。当处理一个大文件时,我采取以下异常: 我需要知道如何避免这种错误。例如,如果有,请读取并处理该文件。xlsx 1000至1000线,或其他解决方案。

  • 在我的保险库和领事整合我有以下秘密引擎enble 以以下错误结束 待覆盖的Vault-Value其他:待覆盖的Vault-Value已成功连接到数据库 在上下文初始化期间-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“demo application”的bean时出错:调用init方法失败;嵌套异常为java

  • 我有一个大问题,我自己创建了链表和数据结构,但数据读取功能工作非常慢。如果我尝试读取10k结构,函数需要大约530ms: 但是当我尝试读取10倍大的数据量(100k)时,大约需要44500毫秒: 这是我的代码: IQ_struct.h IQ_struct.cpp IQ_data.h IQ_data.cpp Main.cpp 我做错了什么?主要问题是我的文件包含超过5000K的结构。提前感谢您的帮助