<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外设之双机通信---的更多相关文章

  1. STM32学习笔记——SPI串行通讯(向原子哥学习)

    一.SPI  简介 SPI是 Serial Peripheral interface 的缩写,就是串行外围设备接口.SPI 接口主要应用在  EEPROM, FLASH,实时时钟,AD 转换器,还有数 ...

  2. pixy&STM32使用记录(串口&SPI外设)

    先踏踏实实的把stm32的外设串口,SPI搞清楚,不要眼高手低,看不起小事.用SPI通信将pixy的数据读出来,将数据用串口发到串口助手上,然后处理数据,利用STM32的定时器调节pwm,控制电机,先 ...

  3. Linux can双机通信(2440+MCP2515 && 51+SJA1000)

    2012-01-12 22:43:24 上图: 自收发成功完成后,那么双机通信就比较容易了.关键就是CAN波特率.ID标识.滤波设置正确即可双机通信了.

  4. Java多线程学习(五)线程间通信知识点补充

    系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...

  5. arduino双机通信 (解决引脚不够用)

    作用 实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量 中. 接线图 注意 TX 接另一个arduino的 RX !可 ...

  6. Proteus仿真—51单片机实现AC信号测频、显示、双机通信

    文章目录 一.原理图部分 二.源码部分 单片机1 单片机2 在Proteus仿真软件里面使用STC89C52实现指定频率的AC信号的测频.显示.双机通信. 一.原理图部分 整体的电路图如示: DC-A ...

  7. 利用C51单片机模拟SPI进行双机通信

    SPI协议简述 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.由Motorola首创.SPI接口主要应用在 EEPROM,FLASH,实时时 ...

  8. usb-host与外设之间的通信(一)

    迫于需要开始一个app实现安卓手机控制外设,要学习一下usb-host这方面的知识,所以记录一下自己的学习经历.关于usb-host这一块的资料国内还是比较少的,我只能学到哪里就记录到哪里了. 简单来 ...

  9. Linux学习 :SPI通讯协议

    SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在E ...

随机推荐

  1. 搭建HBase的本地模式、伪分布式、全分布式和HA模式

    一.安装HBase: 我这里选择的是hbase-1.3.1-bin.tar.gz版本解压HBase: tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training 配置 ...

  2. Hadoop集群nodes unhealthy解决方法

    在搭建好Hadoop集群之后,所有服务均可正常启动,但是在运行MapReduce程序的时候,发现任务卡在7/09/07 22:28:14 INFO mapreduce.Job: Running job ...

  3. 大数据入门第二十三天——SparkSQL(一)入门与使用

    一.概述 1.什么是sparkSQL 根据官网的解释: Spark SQL is a Spark module for structured data processing. 也就是说,sparkSQ ...

  4. Multi account chang login with multi -thread

    void worker_DoWork(object sender, DoWorkEventArgs e) { isBussy = true; if (Common.isChangingAccount) ...

  5. 20155301 《网络攻防》 Exp5 MSF基础应用

    20155301 <网络攻防> Exp5 MSF基础应用 基础问题 1.用自己的话解释什么是exploit,payload,encode 答:exploit就是利用一些工具的,用来收集目标 ...

  6. 如何取得Oracle并行执行的trace

    如何取得Oracle并行执行的trace: ALTER SESSION SET tracefile_identifier='10046_PROD';ALTER SESSION SET max_dump ...

  7. 洛咕 P3706 [SDOI2017]硬币游戏

    假设f[i]是第i个同学胜利的概率,也就是随机序列第一个匹配到s[i]的概率 假设前面有一个字符串\(S\),(假设无限长但没有匹配),现在往后面要加上第i个串\(s[i]\),这个的概率设为\(P_ ...

  8. binlog2sql使用总结

    binlog2sql是大众点评开源的一款用于解析binlog的工具,在测试环境试用了下,还不错. 其具有以下功能 1. 提取SQL 2. 生成回滚SQL 关于该工具的使用方法可参考github操作文档 ...

  9. BCompare破解方法

    1.删除 BCUnrar.dll 文件,重启软件. 备注:使用everything搜索BCUnrar.dll

  10. 教你如何自学UI设计

    一.常用的UI相关工具软件 PS Adobe Illustrator(AI) C4D AE Axure Sketch 墨刀 Principle Cutterman PxCook Zeplin 蓝湖 X ...