关于stm32通信协议:软件模拟SPI、软件模拟I2C的总结(fishing_8)_To_be_a_fisher的博客-CSDN博客_stm32 软件spi
发现一篇写的软件模拟SPI的比较容易理解的博客!感兴趣的可以看看
SPI协议
SPI协议,多用于ADC、DA、LCD等设备与MCU之间,要求通信速率要求较高的场合,它相比于I2C来说速度快的多。一般只需要4根线,分别是MISO、MOSI、SCK、CS线等,但是,有可能只用3根。对于SPI通信协议的详细描述我之前有博客已经有说明了,有需要可以了解一下。这里重点是使用软件模拟SPI协议,实验基于野火开发板指南者F103VET6、Flash芯片W25Q64、这里模拟的时序是SPI的模式3(CPOL=1,CPHA=1),原因有两点原因:1、模式3的SCK空闲电平为高,有高电平向低电平翻转较为容易和快,2、模式3在偶数边沿采样,防止第一个信 没采到。
首先,对于软件模拟SPI的GPIO初始化,可以参考SPI的GPIO初始化的配置,我们不用使用复用功能就行,使用普通推挽输出和浮空输入。
接下来就是最为关键的发送和接收数据函数了,其中注意,使用SPI时,发送和接收其实是同一个函数,通过判断RXNE来确认发送结束,此时也接收完数据,接收数据同样要主机产生时序,时序通过主机发送数据产生,所以会发送无用的Dummy数据。软件模拟不需要,直接接收自己本身会产生时序,不用发送DUMMY数据。Delay函数随便设置,不要小于手册的时间即可。
软件模拟发送数据
延时函数
软件模拟接收数据
等待擦除完成
擦除扇区(Flash存储器的一个特征就是写入之前需要擦除,只能把1改为0,不能把0改写为1)
检验设备,和前面的程序是否正常,正常才继续后面的页写入和读取数据 ID=0XEF4017
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!