学习7__STM32--SPI外设之双机通信---
<target>
# 整透stm32之spi双机通信(包括双机同为stm32,stm32& others)
<概念>
# 双机通信(全双工)
在主机的MOSI管脚输出1bit,从机MOSI管脚接收1bit,同时从机MISO管脚输出1bit,主机MISO管脚接收1bit。即主机发送1bit的同时接收1bit。
# 通信时钟
通信时钟永远由主机产生,且是在发送数据过程中产生,数据发送完毕后时钟消失。
<筹备>
# 在主机发送指令,从机接收后作出响应的机制中,具体过程分析如下
为保证主机能准确完整的收到从机的数据,须在主机下发指令后,继续发送一定长度(长度取决于从机的响应长度)的数据(无效数据),目的是为产生通信时钟,从而接收从机发送的响应,这就要求在主机发送无效数据时,从机的响应数据已存入至从机的SPI->DR,这样主机就可以在通信时准确完整的拿走数据,完整的数据包数据遵从这样的单字节数据发送接收机制。
要记住,主机是主动者、是领导,领导不等人(无论从机是否将数据准备好,他只会带走发送数据这一时刻的从机数据),主机决定何时发送数据,因为它握着命脉--时钟,而在发送过程中会带走一包数据。
要记住,在全双工通信过程中,主机与从机时协作关系,而非独立的,要保证数据完整可靠的传输,就必须主机从机密切配合。
# 实现方式如下
> 普通方式
实现机制是,从机响应的传输使用的是查询方式,从接收到命令后作出的第一个字节响应数据开始,即在主机发送无效数据前,从机必须把响应数据的第一个字节存入至SPI->DR中,这样在主机发送无效数据时,一位一位的把从机响应数据接收走。当从机响应数据的第一个字节发送完毕后,通过查询spi发送数据寄存器为空,执行操作将响应数据存入至SPI->DR中,为下一字节传输做好准备。
因为使用的是查询方式,实时性就会差一些,这就要求主机与从机要匹配好,否则会出现主机发送无效数据时,从机数据还未准备好,这将导致主机读走无效数据。
查询方式在此处只是作为实现方式的一种,作出实现机制说明,在实际项目中不会使用此方式。
> 中断方式
实现机制是,从机响应的传输使用的是发送中断,从接收到命令后作出的第一个字节响应数据开始,即在主机发送无效数据前,从机必须把响应数据的第一个字节存入至SPI->DR中,这样在主机发送无效数据时,一位一位的把从机响应数据接收走。当从机响应数据的第一个字节发送完毕后,产生spi发送空中断,这就要求在发送空中断服务函数内执行操作,将响应数据存入至SPI->DR中,为下一字节传输做好准备。
> DMA方式
<key>
# 在spi外设开着的情况下,如果发送数据寄存器未发生刷新变化,则将继续发送上次最终发送末字节数据
此种情况发生在主从机模式下,从机的发送数据寄存器不再刷新变化,当主机时钟到来的情况下,从机将上次最终发送的末字节数据发送出去,这是因为数据寄存器没有复位操作导致,spi的发送流程是从机预先将数据寄存器中的数据copy至移位寄存器中,当主机时钟到来时依次移位出去,由实际调试结果得出,移位寄存器和数据寄存器都没有specific的复位功能,除非关闭外设(将复位整个外设)
<细节>
<注意>
<总结>
学习7__STM32--SPI外设之双机通信---的更多相关文章
- STM32学习笔记——SPI串行通讯(向原子哥学习)
一.SPI 简介 SPI是 Serial Peripheral interface 的缩写,就是串行外围设备接口.SPI 接口主要应用在 EEPROM, FLASH,实时时钟,AD 转换器,还有数 ...
- pixy&STM32使用记录(串口&SPI外设)
先踏踏实实的把stm32的外设串口,SPI搞清楚,不要眼高手低,看不起小事.用SPI通信将pixy的数据读出来,将数据用串口发到串口助手上,然后处理数据,利用STM32的定时器调节pwm,控制电机,先 ...
- Linux can双机通信(2440+MCP2515 && 51+SJA1000)
2012-01-12 22:43:24 上图: 自收发成功完成后,那么双机通信就比较容易了.关键就是CAN波特率.ID标识.滤波设置正确即可双机通信了.
- Java多线程学习(五)线程间通信知识点补充
系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...
- arduino双机通信 (解决引脚不够用)
作用 实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量 中. 接线图 注意 TX 接另一个arduino的 RX !可 ...
- Proteus仿真—51单片机实现AC信号测频、显示、双机通信
文章目录 一.原理图部分 二.源码部分 单片机1 单片机2 在Proteus仿真软件里面使用STC89C52实现指定频率的AC信号的测频.显示.双机通信. 一.原理图部分 整体的电路图如示: DC-A ...
- 利用C51单片机模拟SPI进行双机通信
SPI协议简述 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.由Motorola首创.SPI接口主要应用在 EEPROM,FLASH,实时时 ...
- usb-host与外设之间的通信(一)
迫于需要开始一个app实现安卓手机控制外设,要学习一下usb-host这方面的知识,所以记录一下自己的学习经历.关于usb-host这一块的资料国内还是比较少的,我只能学到哪里就记录到哪里了. 简单来 ...
- Linux学习 :SPI通讯协议
SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在E ...
随机推荐
- 小R的烦恼 BZOJ3280
分析: 一开始一直Wa,发现是建图建错了,必须得拆点. S连i,流量为a[i],费用为0,i+n连T,流量同上,费用为0,之后i连i+1费用为0,流量为inf,之后S连n*2+i,流量为li,费用为0 ...
- Spring + SpringMVC配置
代码结构如下 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xs ...
- 20155338《网络对抗》Exp3 免杀原理与实践
20155338<网络对抗>Exp3 免杀原理与实践 实验过程 一.免杀效果参考基准 Kali使用上次实验msfvenom产生后门的可执行文件,上传到老师提供的网址http://www.v ...
- 记录 第一次体验安装python第三方库的全过程
目的:安装 Pillow库 现状是:python是3.4,easy_install没有安装:pip没有安装, 步骤: 1.安装Pillow库需要安装pip 2.安装pip需要安装easy_instal ...
- Centos7下python3安装ipython
一.通过压缩包安装ipython 1.下载ipython安装包 [root@localhost ~]# wget https://pypi.python.org/packages/79/63/b671 ...
- Java设计模式-建造者(Builder)模式
目录 由来 使用 1. 定义抽象 Builder 2. 定义具体 Builder类 3. 定义具体 Director类 4. 测试 定义 文字定义 结构图 优点 举例 @ 最近在看Mybatis的源码 ...
- H5——video百花齐放(浏览器自带的播放器)
前言 手机自带浏览器的H5播放器 真是百花齐放啊(各个手机厂家有各个厂家的控件UI) 需求 手机浏览器木有控件条 自动播放 全屏处理 监控进度条 快进后退 自动播放 自动播放就给跪了 ios 安卓 为 ...
- 如何安装ipa文件(二)
第一篇文章请看: http://www.cnblogs.com/BK-12345/p/6000124.html 写第二篇的目的是因为iTunes更新了,有一些东西发生了变化,应用没有了,其实还是存在的 ...
- 华为测试大牛Python+Django接口自动化怎么写的?
有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者 ...
- Zip伪加密 破解ZIP密码
ZIP是一种相当简单的分别压缩每个文件的存档格式.分别压缩文件允许不必读取另外的数据而检索独立的文件:理论上,这种格式允许对不同的文件使用不同的算法.不管用何种方法,对这种格式的一个告诫是对于包含很多 ...