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位变低,退出接收函数
作者: 宏杰, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-4027574.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论