STM32F4_UCOSIII|STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信
最近一直在研究SPI双机通信,深入了解SPI的通信原理,做了一个实验,一直卡在收发数据上,网上的例程看了太多,大同小异,基本没有能用的。终于楼主痛下决心,买了一个逻辑分析仪,发现ESP8266的发送格式是这样的
文章图片
esp8266主机写信号0X02,第一个时钟跳边沿采集数据,一个数据发送长度是32b,这里重点说一下发送数据的长度,在ESP8266双机通信中,改变数据长度会导致从机接收不完整或接收不正确的数据(有兴趣的可以改改),这里按照官方给的HSPI主机例程设置数据长度32b。
文章图片
从机这里我们不需要改变,直接使用官方例程。
重点来了!!!STM32如何发送长度32b的数据呢?????,嘿,别想歪,不是数组长度是32,是数据长度!!!!
SPI配置这一块没什么好讲的,该咋配就咋配,不能使用中断去接收ESP8266从机的数据,关键是发送和接收这一块,这里不得不说逻辑分析仪的好处,很快就调出了我想要的时序。
文章图片
文章图片
发送程序是没问题的,ESP8266从机会自动解析数据,不会出现数据混乱问题,发送函数调试OK。
文章图片
【STM32F4_UCOSIII|STM32F4_UCOSIII esp8266_free_rtos 双机SPI通信】/*****************************下面是主机接收从机数据*****************************/
文章图片
把写指令(0x02)改为读指令(0x03),
从机定义的数组是这样的(u8 sendData8]={'a','b','c','d','e','f','g','h'};
)
发来的数据格式是这样( a000b000c000d000e000f000g000h000 )
还需要一次提取处理,接收成功,不过要注意一下主机读取时间,根据官方手册,esp8266发送函数是向寄存器写入,主机读取寄存器。要不然主机读不到数据的。最后记住一定要共地!!!!!
文章图片
推荐阅读
- STM32F4|STM32F4 TIM6 TIM7 基本定时器
- 【UCOSIII】UCOSIII的初始化和启动
- 【UCOSIII】UCOSIII的信号量
- UCOS II 移植到STM32F407
- STM32的USART中断死循环,形成死机,将UCOSiii的所有任务卡死,不再进行调度
- STM32F407因为结构体字节对齐导致的HardFault_Handler异常
- 开源一个安卓四轴上位机+配套ESP8266 UDP串口通信源码
- esp8266 arduino 开发环境 PlatfromIO IDE for VSCode
- NodeMcu使用
- ESP8266(NodeMCU)使用ADC