将STM32 MCU与外部ADC连接并通过SPI读取数据

2019-07-14 17:18发布

我想使用STM32微控制器从多通道ADC读取数据。我打算使用的微控制器很可能来自F7系列(例如STM32F746ZGT),而我目前关注的ADC是ADI公司的LTC2358-18。我正在进行的项目要求我同时读取6个模拟通道(具有合理的数据速率)。据我所知,特定的ADC芯片可以在不同的串行数据输出(SDO)通道上输出其转换结果,这些通道可以并行读出(所有串行时钟都相同): 1.png 我想知道是否可以使用单个STM32 MCU通过SPI读取6通道输出数据(我真的不需要剩下的两个通道)。一般来说,我认为我需要配置STM32F746ZGT上可用的6个SPI接口,如下所示:
  • 其中一个SPI充当主设备,为所有从设备(STM32芯片和ADC上的5个剩余SPI)和ADC配置的串行数据输出(SDO)提供串行时钟(SCK)。主人(我猜)会拉下所有SPI从设备的CS。
  • STM32F746ZGT上剩余的5个SPI共用一条公共SCK线,每条线都连接到ADC上的SDO通道。
或者,换句话说,它看起来像这样: 2.png 这种配置是否真的有用,还是我哪个步骤出错了,劳烦大家指点一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
qiangqzuo
2019-07-16 11:34
我不是STM的专家,但对于我曾经使用过的每一个控制器,由于以下原因,这不起作用:

可能(我没有检查)由于引脚映射限制,你不能同时访问所有6个SPI接口,即使你每个只使用一个MISO引脚; 我猜它没有用。
这六个接口都是相互独立的,无法将时钟从接口0同步到接口n。这通常是这种情况,因为SPI外设通常作为IP购买,然后实例化6次; 但这些之间没有相互联系; 它们是具有自己的寄存器/存储区域的独立实例。
你应该做的是按顺序读取它们(通常这是通过DMA读取完成的)。由于内部只有一个ADC,根据数据表的最大采样率为200k(8ch),假设24位传输(不确定STM的DMA是否可以处理)导致大约40 MBit数据速率/ spi速度。这应该是可能的,不考虑后期处理。

一周热门 更多>