2片STM32F103E之间SPI通讯:CPU_A,CPU_B。
CPU_A使用SPI1,主方式;CPU_B使用SPI2,从方式。
其中SPI都是DMA控制。2片都使用同样大小的内存区域Memory1_A,Memory1_B,Memory2_A,Memory2_B,其中CPU_A使用DMA_Mode_Normal模式,CPU_B使用DMA_Mode_Circular模式。
目的是想:A发Memory1_A的数据给B的Memroy2_A的同时,读取B中Memory2_B 的数据只A的Memory1_B,从而实现2片cpu的数据通讯。
理论上,我想这样应该是没问题的吧。但是在调试时,刚开始数据能正常通讯;期间数据会出现如下错误:
A发给B的数据都正常,但是A从B读的数据会出现错位,错位的情况是:比如A从B读的数据应该是1 2 3 4 5 6 7 8 9 0,但是实际上读到的是 * 1 2 3 4 5 6 7 8 9,即错位了。
然后我为了能是程序自己修正,在传输的数据包内增加校验和,如果发现校验和不对,即发指令给B,让B把该SPI的DMA重新初始化一遍,以达到复位的效果。
但是这样做也没有效果,我的通讯依旧是错位的。。。。。
各位大侠,能帮忙指点下么,谢谢了。 |