最近使用STM32F407 SPI采集ADS1274,之前采样率600Hz左右正常采集。项目需要数据采样率达到10kHz,经计算在ADS1274相应模式下需要将输入频率提升至5.26MHz,SPI的频率也设为5.26MHz。频率升高后,计算出来的结果正负乱跳。
排查发现:
1,从HAL_SPI_Recieve函数读取12个字节的数据错乱,作为第一通道高位的第0字节变化频繁,而第1字节稳定不变。观察234通道同样;
2,增大接收数据区,HAL_SPI_Recieve函数的接收字数增大,发现第一通道高位的第0字节内容变为00,第1字节稳定不变,第12字节不为00且反复变化。考虑是所有数据向后错了一个字节的位置;
3,减小频率到一定程度此问题会消失;
4,经尝试,若将SPI的模式从“主设备只接收”改为“全双工主设备”,虽然会多占用一个MOSI,但该问题消失,5.25M的SPI频率下数据读取位置正确;
5,查看HAL函数,估计是“主设备只接收”改为“全双工主设备”两种模式的接收过程有差异。具体没弄清楚。后续待查。