<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 ...
随机推荐
-
原生JS实现购物车功能
html <div class="catbox"> <table id="cartTable"> <thead> <t ...
-
作业总结(一):IE6下面的那些坑
考完试就来实习的公司实习了,大概最近有两周时间就一直在做公司给新人布置的大作业.虽然只是很简单的一个小的项目,但却从其中总结到了不少有用的东西.计划将其发出来一系列文章,算是对这两周时间的总结.也算是 ...
-
PDF 补丁丁 0.4.2.1023 测试版发布:新增旋转页面功能
新的测试版发布啦.此版本增加了旋转页面的功能. 在“PDF文档选项”对话框的“页面设置”选项卡中,可设置需要旋转的页面(输入页码范围),以及旋转角度. 此外,还修复了统一页面尺寸功能的小问题.
-
Windows下查询进程、端口
PID --> 端口号netstat -ano | findstr 8244 端口号 --> PIDnetstat -aon|findstr "11211" PID - ...
-
7 -- Spring的基本用法 -- 8...
7.8 深入理解容器中的Bean 7.8.1 抽象Bean与子Bean 把多个<bean.../>配置中相同的信息提取出来,集中成配置模版------这个配置模版并不是真正的Bean,因此 ...
-
linux tcp 好文
http://blog.csdn.net/htttw/article/details/7521053
-
Javascript知识三
O(∩_∩)O...今天继续学习了Javascript的知识,下面就总结一下. 数组: 判断是否为数组(instanceof Array) 在JavaScript中,数组不一定是同一类型 var ar ...
-
Python -- OOP高级 -- __slots__、@property
__slots__属性可以设置 允许被设置的属性 class Student: __slots__ = ("name", "age") >>> ...
-
【做题】UVA-12304——平面计算集合六合一
可真是道恶心题-- 首先翻译一下6个任务: 给出一个三角形,求它的外界圆. 给出一个三角形,求它的内接圆. 给出一个圆和一个点,求过这个点的切线的倾斜角\(\alpha \in [0,180)\).( ...
-
第三周linux学习
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...