我将
NUCLEO-F446RE与
STM32F446RE一起使用。我正在尝试连接外部双采样差分 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,希望更多人可以提供帮助,我可以将其转移到双线实现。