大家好!
问题概述:我最近在调试H745单片机的SPI,其目的是与片外DAC(TLV5630)通讯,目前测试阶段先用F407单片机作为从机接收H745单片机发来的数据,但是出现了漏帧现象(连续性漏100帧)。
详情:H745单片机配置为SPI2+DMA1的方式,数据的传输由TIM12同步触发,触发频率为20kHz,DMA配置为Circular模式、设置的数据传输数量为4(16bit的数据)。当DMA将数组中的4个数据发送到SPI2的TXDR寄存器后会进入DMA1的传输完成中断,在中断中,我会将数组中的数据更新,然后退出中断。这些都配置完成后,在F407接收端接收到的数据一直漏帧,大约每漏100帧数据才能接收到1帧数据,如下图所示。注意!每次均会发送4个数据,第1个数据为进入DMA传输完成中断的次数,第2、3和4个数据分别为0、1和2。我用万用表测试NSS、CLK和MOSI引脚的频率,结果为NSS—20kHz、CLK—1.28MHz以及MOSI—约110kHz。
最后,在TIM12的同步触发频率设置为20kHz时就会出现上述现象,当TIM12的同步触发频率设置为200Hz时就能正确的接收数据,如果TIM12的同步触发频率比200Hz高,例如1kHz时也会出现漏帧现象!
希望大家能关注一下我的问题,并提出建议,感谢!感谢!
这个问题可能是由于DMA和SPI的配置问题导致的。在您的配置中,DMA的传输模式设置为了Circular模式,这意味着DMA会不断循环传输数据。而且,如果DMA在传输数据时还没有完成,那么TIM12就会继续触发DMA传输,这可能会导致DMA传输数据的缓存填满,从而导致漏帧现象
DMA发送要求速度较高时,可以采用2倍大小大环形缓冲区: