热度 4
2023-8-30 15:39
935 次阅读|
0 个评论
SPI主机为Only Transmit 从机为Only Receive SPI主机配置如下: 代码如下 : 如果不进行SPI DISABLE 片选的引脚会一直存在,这个在HAL_SPI_Transmit 函数里面并没有对SPI进行关使能,只能在外面添加,具体为什么没有添加关闭SPI不清楚原因 HAL_SPI_Transmit(&hspi1, tx_buf, sizeof(tx_buf),1000); __HAL_SPI_DISABLE(&hspi1); HAL_Delay(5); SPI 从机配置如下: 代码如下: HAL_SPI_Receive(&hspi1, rx_buf, sizeof(tx_buf),1000); HAL_Delay(5); memset(rx_buf,0,sizeof(rx_buf)); 收发的buf数据如下: 从逻辑分析仪查看数据: 可以看到最后一个字节是CRC校验码 从逻辑分析仪波形观察SPI模块运行逻辑 : 对于主机发送数据情况下: 一旦CR1寄存器的SPE位置1,主机将CS片选引脚拉低,去选择从机,TXE起来后,一旦对DR写数据,时钟和MOSI引脚出来波形数据。 从机接收数据的情况: 等待SR寄存器的RXNE位为1的情况后,对读走DR寄存器的值,对于存在CRC校验的在倒数第二个字节后,对CR1寄存器的CRC_NEXT位写1来开始计算CRC校验 最后等待BUSY位变低,退出接收函数