例子说明及框图
本例子基于STM32F103ZET6芯片,实现SPI1与SPI2的主从通信。其中SPI1配置为主机,SPI2配置为从机,均配置为全双工模式。硬件连接图:
其中,我们需要注意的是,SPI的从机不能主动发送数据,只能应答数据。本例子的数据交互过程:
1、主机使用查询方式发送数据给从机。
2、从机使用中断接收方式接收数据,把接收到的数据加上0x05再发送给主机。
从机总是在收到主机的数据时,才会发送数据给从机。即从机被动发送数据,也即主机主动申请数据。
代码细节
主函数:
int main(void){ uint8_t i = 0; //----------------------------------------------------------------------------------------------- // 上电初始化函数 SysInit(); //----------------------------------------------------------------------------------------------- // 主程序 while (1) { /* 主机发、收数据 */ for (i = 0; i < SPI_BUF_LEN; i++) { ucSPI1_RxBuf[i] = SPI1_ReadWriteByte(ucSPI1_TxBuf[i]); } } return 0;}
其中,ucSPI1_RxBuf与ucSPI1_TxBuf的定义为:
uint8_t ucSPI1_RxBuf[SPI_BUF_LEN] = {0};uint8_t ucSPI1_TxBuf[SPI_BUF_LEN] = {0x01, 0x02, 0x03, 0x04, 0x05};
SPI1_ReadWriteByte函数为SPI1的读写函数,其作用是往SPI1发送缓冲区写入数据的