这个逻辑有问题,写数据寄存器就会向外发送数据, 在中断中写一下数据寄存器,主机就会在时钟线上产生一次时钟,不可能只是要清一下中断标志就必须要产生一次时钟发一次数据。
手册上是这么写的:clearing of the RXNE bit is performed by reading the SPI_DR register. 注意是读,不是写。
这些操作在CubeMX自动生成的中断处理代码HAL_SPI_IRQHandler中都已经自动处理了,而在你的代码中在运行这个函数之前就return了,偏偏没有运行这个函数。
最后,你的配置中SPI选择了Transmit only master,但是中断却开了RXNE,接收非空中断,感觉即使进中断了也不会进的是RXNE,因为SPI根本没有开启接收数据的功能,可能是因为err进的中断吧,因为你还开了SPI_IT_ERR。