之前发过一个帖子,当我是用STM32的SPI1(主)和SPI2(从)互相通信并将结果通过串口发出的时候,出现的现象是SPI1发送SPI2接收正常,但是SPI2发送SPI1接收却接收不到数据,在群里找大神请教了一下问题所在,解释的原因是因为当SPI1先发送,那么当SPI1发送完毕后,SCLK是处于空闲状态的,这时候SPI2是无法发送出数据的.我把程序改为SPI2先发,然后SPI1再发,然后SPI1接收,然后SPI2接收,这样一来程序就接受正常了.通过这个实验得出的结果是:主SPI的SCLK只有在发送的时候是有波形的,但是当接收的时候,主设备SCLK是没有波形的,我已经在实验中用示波器看过,while循环中只有SPI接受函数的时候SCLK没有变化一直是低电平,while循环中只有SPI发送函数的时候SCLK才有波形,所以如果让SPI2(从)可以正常的发送给SPI1(主),必须SPI2(从)先发送然后SPI1(主)在发送,这样主就可以提供给从一个时钟信号用来发送.但是疑问又来了,当STM32和外设AT45DB161进行SPI通信读写FLASH的时候,我看程序是主设备(STM32的SPI1)在发送完读取命令后,就没有在发送数据了,然后就开始一直读取AT45DB161中的数据,居然是可以读取成功的,就是说在和AT45DB161读取数据的时候,主设备发送完读取命令就没有在发送任何数据而是不断的只读取数据了,那么这时候SCLK是从哪里来的呢?如果这个时候主设备仍然可以读取的从设备发送来的数据,那么为什么第一个SPI1和SPI2通信的设备就不可以必须要从先发主后发,然后主才可以接收到从发送的数据呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你看代码就知道了,SPI读,肯定是先写DR,然后读DR的。
---------------------------------
坐等。。。。。。
一周热门 更多>