学习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 ...
随机推荐
- cleanCode[1]:有意义的命名
为什么要有意义的命名: 我们都曾经说过有朝一日再回头清理那些糟糕的代码,然而最终总是弃之不顾.稍后等于永不,我们需要立即行动,写优雅的代码. 写代码的过程中,读占的比例很大,所以首先要让代码易读. 有 ...
- 2017-2018-2 20155230《网络对抗技术》实验1:PC平台逆向破解(5)M
1.直接修改程序机器指令,改变程序执行流程 2.通过构造输入参数,造成BOF攻击,改变程序执行流 3.注入Shellcode并执行 4.实验感想 注:因为截图是全屏所以右键图片在新的标签页打开观看更加 ...
- 20155308《网络对抗》Exp9 Web安全基础实践
20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...
- 20155318 Exp1 PC平台逆向破解(5)M
20155318 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...
- 汇编 MOV -2
知识点: MOV指令 基址 内联汇编 把OD附加到资源管理器右键菜单 一.MOV指令 aaa=0x889977;//MOV DWORD PTR DS:[0x403018],0x8899 ...
- 4556: [Tjoi2016&Heoi2016]字符串
4556: [Tjoi2016&Heoi2016]字符串 链接 分析: 首先可以二分这个长度.此时需要判断是否存在一个以b结尾的前缀,满足与[c,d]的lcp大于等于mid. 如果我们把串翻转 ...
- RegExp,实现匹配合法时间(24小时制)的正则表达式
合法时间格式 00:00:00 - 23:59:59 格式分析:H + ":" + M + ":" + S H-分析: 00:00:00 - 09:5 ...
- post请求参数Json字符串包含数组的校验和处理
传入参数类型 {"aaa":"aaaa","bbb":"bbb","ccc":"ccc&q ...
- AlarmManager守护服务和隐藏桌面图标
1.主要内容 本章记录几段常用代码: 1.如何使用AlarmManager守护服务2.如何判断某服务是否正在运行 2.如何暂时禁用Android的组件 2.使用AlarmManager守护服务 Boo ...
- Reflux系列01:异步操作经验小结
写在前面 在实际项目中,应用往往充斥着大量的异步操作,如ajax请求,定时器等.一旦应用涉及异步操作,代码便会变得复杂起来.在flux体系中,让人困惑的往往有几点: 异步操作应该在actions还是s ...