STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信

最近一直在研究SPI双机通信,深入了解SPI的通信原理,做了一个实验,一直卡在收发数据上,网上的例程看了太多,大同小异,基本没有能用的。终于楼主痛下决心,买了一个逻辑分析仪,发现ESP8266的发送格式是这样的STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第1张图片

 esp8266主机写信号0X02,第一个时钟跳边沿采集数据,一个数据发送长度是32b,这里重点说一下发送数据的长度,在ESP8266双机通信中,改变数据长度会导致从机接收不完整或接收不正确的数据(有兴趣的可以改改),这里按照官方给的HSPI主机例程设置数据长度32b。

STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第2张图片

从机这里我们不需要改变,直接使用官方例程。

重点来了!!!STM32如何发送长度32b的数据呢?????,嘿,别想歪,不是数组长度是32,是数据长度!!!!

SPI配置这一块没什么好讲的,该咋配就咋配,不能使用中断去接收ESP8266从机的数据,关键是发送和接收这一块,这里不得不说逻辑分析仪的好处,很快就调出了我想要的时序。

STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第3张图片

STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第4张图片

发送程序是没问题的,ESP8266从机会自动解析数据,不会出现数据混乱问题,发送函数调试OK。

STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第5张图片

/*****************************下面是主机接收从机数据*****************************/

STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第6张图片

把写指令(0x02)改为读指令(0x03),

从机定义的数组是这样的(u8 sendData8]={'a','b','c','d','e','f','g','h'};)

发来的数据格式是这样( a000b000c000d000e000f000g000h000 )

还需要一次提取处理,接收成功,不过要注意一下主机读取时间,根据官方手册,esp8266发送函数是向寄存器写入,主机读取寄存器。要不然主机读不到数据的。最后记住一定要共地!!!!!

STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信_第7张图片

 

你可能感兴趣的:(STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信)