给楼主一个考虑的方向,SPI是个全双工的接口,如果要接收数据必须先要发送数据吧,你在接收时多了一个CLOCK,有没有想过发送的时候多了一个CLOCK,关于SPI的发送,这里是有个大坑的。我们从寄存器的角度来考虑,在发送SPI的时候我们会操作SPI的DR寄存器。
因为DR寄存器是16位的,如果你直接SPI1->DR = 0x9F ;
这样的操作是不正确的,你的数据会变成0x009F之后赋值给DR寄存器,
也就是操作了16位,所以STM32会输出16个时钟脉冲
解决方法
我们先找到DR寄存器的地址,再用一个八位的指针指向这个地址,
现在指向的是DR寄存器的开头,那么指针+1,指针指向了DR寄存器的低八位
这时候给指针指向的地址赋值0x9F,那么这个字节就会放入DR低八位的空间内,
而不是操作整个16位DR寄存器
给你个链接,我的帖子,跳转
|