第一次读数据.JPG
(153.66 KB)
第一次读的数据
第二次读数据.JPG
(197.94 KB)
第四次读数据.JPG
(198.48 KB)
第N次读数据.JPG
(183.92 KB)
得分:0
第三次取到的数据是0X00,没有截图。
没人回复了?
我想请教您一下:假设SPI1为主设备,SPI2为从设备,这个
SPI_SendData(SPI2,0X55);
函数中的0X55写在SPI2的哪个寄存器了?我看库函数写的是DR寄存器,但是通过SPI-DR寄存器并没有看到0X55这个数啊?谢谢!
STM32的SPI在作为主设备,与一个带有SPI接口的AD芯片通信。
时钟,相位都配置的对,数据位配置为8位。
我想问一下:在STM32的SPI主设备从从设备读取数据时,是不是需要主SPI为了提供从SPI的时钟而需要向SPI任意发送一个字节的数据才能从从设备中读取数据?
如果是,这个时钟是8个SCLK,还是16个SCLK?
谢谢!
现在调试出现了一个问题,本来是第一次读就该出来的数据,却在第二次读的时候才出来,例如:从某个SPI芯片读出来的数据,时序图已经贴过,读第一次应出来数据0x52,第二次0X86,第三次0X54,。。。依次把它们放进一个数组中。REGS[],出现这样一个怪现象,REGS[0] = 0X00,REGS[1]=0X52,REGS[2]=0X86,REGS[3]=0X54,。。。,我保证数组索引没有错。数据读时序就是25楼帖的图。想请教一下香大侠:这是什么原因呢?
我猜是下面的一个原因,不知道对不对?还望指教。
SPI-DR是一个16位的循环移位寄存器,我设置的是MSB先出,8位的数据格式。可能是这个寄存器先把读出来的8位数据移位到SPI-DR中的高八位,再读进下一个8位数据时,先前读出来的8位数据被移位到低8位,从而被读出来。在读第三个数据时,第二个数据被移位到低8位,依次类推。是不是这样的呢?谢谢。
你把读数据的那部分代码贴出来看看。
32# 版主
时钟正常,STM32的DIN管脚有数据输入,DR里有值,但就是取不出来。当第二次发送时钟时,数据就出来了。
“但就是取不出来” 什么叫取不出来?前面你怎么知道“DR里有值”?
“第二次发送时钟” 第二次相对什么说的?是发送第二个命令字的时钟吗?
1.通过KEIL软件的SPI外设的窗口发现SPI-DR是有值的。且值是对的。
2.“取不出来”意思就是Regs_Value[im] = SPI_I2S_ReceiveData(SPI2);这条语句没有起作用,或者说,在SPI的下一条发送八个时钟的语句中即下一句:
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPI2, temp++);
才读出了本该在上一次读出的数据。
3.第二次发送时钟就是指我在开始说的:为了向从设备提供一个时钟,不是发送第二个命令字的时钟,而是为了从从设备读取数据。
不知道我描述的清楚了没有?呵呵。。。谢谢!