两个stm8芯片如何实现spi收发
发布网友
发布时间:2022-05-13 03:11
我来回答
共2个回答
热心网友
时间:2023-11-13 04:14
SLAVE是不用主动进行操作的我没用过STM32,不过可以从SPI接口的原理来解释一下,一般都是按我说的方式工作SPI需要设为MASTER/SLAVE,而且必须一方为主,另一方为从,同步的时钟信号由主设备输出,从设备根据主设备给出的时钟信号进行相应操作。主设备:配置好相关寄存器---->写数据到SPI数据寄存器---->输出时钟脉冲的同时将数据移位输出从设备从设备:配置好相关寄存器---->写数据到SPI数据寄存器---->随着主设备输出的时钟脉冲同时将数据移位输出给主设备
由上可知,SPI的收发是同时进行的,这样就有一些问题需要解释:
1.主设备想读从设备的数据,先发命令,这好理解,直接将命令写到数据寄存器输出即可,但后面读数据的过程主设备应该发送什么?这个问题需要先明白SPI自己并不能支持数据读写这样的操作,而是用户自己利用SPI接口扩展出来的功能,需要定制相关协议,对于读从设备数据,数据序列一般如下。主设备:命令字节1,命令字节2,...,命令字节N,任意数据1,任意数据2,...,任意数据M从设备收到命令字后知道是主设备读数据,就会忽略主设备后面发出的数据,直接将主设备需要读回的数据回传给主设备,主设备发任意数据1的时候从设备回所需读数据第一个字节,依次类推。需要注意的是,从设备必须在主设备发送任意数据1之前就把第一个字节写入SPI数据寄存器,否则主设备读到的数据会不对。
2.在主设备发数据的时候,如果从设备不写数据到SPI数据寄存器,主设备会不会收到数据?对于主设备,只要设置成收发同时进行的模式,就是不连从设备,一样可以收到数据,实际上是每输出一个时钟脉冲,主设备就会将SPI发送口设为相应状态,并从SPI接收口读一个状态放入接收移位寄存器,所以从设备不写数据到SPI数据寄存器,主设备依然可以收到数据。对于这种情况,从设备回传的数据内容不能确定,理论上讲应该是其SPI数据寄存器之前的内容。
3.有的SPI会支持FIFO、DMA等功能,这只是把软件的工作由硬件来完成,收发流程并没有什么不同。
4.你所说的空字节正确的称呼应该是哑元字节(my byte),意思是填充上来凑数的,没有表示任何实际意义。
热心网友
时间:2023-11-13 04:15
找到SPI需要的4个管脚,sclk对sclk,mosi对miso,miso对mosi,nss对nss。程序里一个设成主机一个设成从机,剩下就是套ST给的lib文件了。