个人心得: 在做主从双机通信时,一定要理解好主机和从机的作用,做主机时会控制通信的时钟,从机是不能产生时钟的。如果从机要发送数据,那可以在主机发送数据 的时钟上发送数据。配置上差不多是一样的,就设计主从就得了。我这里接收都是用中断。 还有一点要注意的,做主机接收时,不能和发送共用一个函数。这个为什么我自己现在也没有清楚,只是在实验中测得。 纠错:从机的接收函数改成,这时因为我测试完成后有改动就压包,后来测试发现主机不能正常接收到数据 更正:我之前的两个时钟的理论是不合理的,因为全双工收发是可以共用时钟的,这个我在后面改进的主机程序中有体现。 欢迎大家测试 u8 SPI1_ReadByte(u8 TxData) { u8 retry=0; // while((SPI1->SR&1<200)return 0; // } // SPI1->DR=TxData; //发送一个byte retry=0; while((SPI1->SR&1<200)return 0; } return SPI1->DR; //返回收到的数据 } 工具:STM32 MINI板两块 注意:NSS软件管理模式,主机:SSM=1,SSI=1。 从机:SSM=1,SSI=0; 连线:主机 SCK<-> SCK 从机 MISO <-> MISO MOSI<-> MOSI SPI主机通信程序部分截图: SPI从机通信程序部分截图: 改进:把主机改成查询接收也是可以的,这时只要一个发送,是真正意义上的全双工了。 部分程序截图:(详见附件内容)
1
通过VHDL语言将FPGA初始化为SPI通信口, 内置SPI通信协议。
2019-12-21 20:21:15 80KB FPGA SPI通信源码
1