ST意法半导体
直播中

风尚男人

8年用户 900经验值
私信 关注
[问答]

为什么不将ADC与SPI都置于从机模式呢?

我将NUCLEO-F446RESTM32F446RE一起使用。我正在尝试连接外部双采样差分 ADC:ADS9224R。
ADC时序图


ADC 可以提供高达 3M/s 的样本。我很乐意实现 ~0.8M/s 采样。
我一直在努力满足我需要的时序,而 STM32 只能达到 ~180kHz。我的问题是启动单独的 SPI 接收调用在命令之间花费的时间太长。
运行以下代码以启动背靠背 SPI 读取:
  • HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); //CS LOW
  •   HAL_SPI_Receive(&hspi1, (uint8_t *)spi_buffer, 1,40);
  •   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); //CS high
  •   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); //CS LOW
  •   HAL_SPI_Receive(&hspi1, (uint8_t *)spi_buffer, 1,40);
  •   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); //CS high
产生以下时序:

STM32 的工作频率为 180MHz,而 SPI CLK 的频率约为 30MHz。您可以看到,一旦 SPI 启动它就非常快,但是启动下一个 SPI 读取的时间太长(~6us),这限制了我从 ADC 读取的速率。
我知道这种方法只会同时读取 ADC-0A,而不是 ADC-0B。我有一个使用 QSPI 的实现,但遇到同样的问题。我已经简化为单线SPI,希望更多人可以提供帮助,我可以将其转移到双线实现。





回帖(1)

温益浪

2022-12-12 09:39:55
好的,下一个计划,还没有代码。如果第二个 SPI 是从机,为什么不将两者都置于从机模式(使用循环 RX DMA)?然后,我们需要另一个组件来生成时钟脉冲。这可以是一个脉冲模式下的定时器 TIM1,并使用 7 次重复计数器(对于 8 个脉冲)。脉冲序列(时钟)在 PWM GenerationCH1 模式下输出。
如何触发TIM1?手动,用于测试,工作。
下一步:自动从 TIM2。(将 TIM 置于从触发模式并将 TIM2 事件路由到 TIM1 ITR。
没有用于测试的 ADC。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分