• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

GD32系列笔记三模拟SPI通信

武飞扬头像
Haku喵
帮助1

目录

一、项目需求

二、SPI简介与通信原理

三、XL74HC165介绍

四、程序设计

五、总结


一、项目需求

GD32F150RCT6与PC的几十个按键通信,查询按键状态,当有按键被按下时触发蜂鸣器,并把按键的状态和编号返回给PC。为了节省IO口,把所有按键的信号通过XL74HC165芯片转成串行信号,用spi的协议传输给GD32。托硬件设计方案的福,一会用硬件SPI一会用模拟SPI,来回变动几次,于是把软、硬SPI都测试写了。这里先放出模拟SPI的配置。

二、SPI简介与通信原理

1. SPI介绍:SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是一种高速、全双工,同步的通信总线。

2. 提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave)。

3. SPI通信有4条线,单向通信时3条线,少了一条数据线,分别是:

MOSI: 主设备数据输出,从设备数据输入

MISO: 主设备数据输入,从设备数据输出

SCLK: 时钟,由主设备发出

CS: 片选,使能片选时,主机对从机的操作才有效。一般情况片选信号为低电平有效,具体要看通信芯片的规格书。

4. 物理接线图

学新通

5. SPI通信原理

学新通

(1)主机使能片选CS信号(一般是拉低),启动通信

(2)主机向从机发送时钟信号,告诉从机开始读写操作

(3)主机将要发送的数据写到发送缓冲区memory,缓冲区经过移位寄存器(缓存长度不一定,看单片机配置)串行移位寄存器通过MOSI线将字节一位一位的传给从机,同时MISO也将接收到的数据经过移位寄存器一位一位的移到接收缓冲区

(4)从机(Slave)也将自己的串行移位寄存器(缓存长度不一定,看单片机配置)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换

(5)SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

6. SPI的模式

(1)时钟极性:CKP或CPOL

  • CPOL= 0:表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
  • CPOL= 1:表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时

(2)时钟相位:CKE或者PCHA

  • CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。在第2个边沿发送数据
  • CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。在第1个边沿发送数据

(3)根据时钟极性和时钟相位的排列组合,SPI的模式有四种

学新通

        Mode0:CPOL=0,PCHA=0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。
        Mode1:CPOL=0,PCHA=1:当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
        Mode2:CPOL=1,PCHA=0:当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
        Mode3:CPOL=1,PCHA=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

举例mode0:

学新通

7.参考
http://t.csdn.cn/y10M7

http://t.csdn.cn/b67yS

三、XL74HC165介绍

1.芯片数据手册信息提取

学新通

学新通

 学新通

学新通 学新通

由数据手册可总结出的信息:

(1)时钟有效:时钟上升沿有效,且当SH/LD保持高,CLK INH为低;

(2)数据加载: SH/LD为低时,并行数据加载进A-H寄存器,此时不用管CLK、CLK INH的电平高低;当 SH/LD为高时,禁止并行数据加载;

(3)芯片时钟使能:当CLK INH为低时,CLK使能;当CLK INH为高时,CLK失能。

(4)最后一张图片有两个信息:

          时芯片支持的时钟频率:根据项目实际工矿,vcc=3.3V, 工作温度70度左右,选择配置SPI的时钟频率小于18MHZ,模拟SPI不用考虑这一点。

         时序上各个信号的脉冲保持时间、相移时间有说明,这个模拟SPI需要看看,这种ns级别的延时一个_nop()即可,实测GD32F150C8T6的空指令周期为200ns,而表格数据结合实际项目只需100ns左右的延时,空指令完全满足需求。

四、程序设计

(1)明确一点,模拟SPI的意思是是要去模拟一个配合74HC165芯片的时序的单片机外设,恰好165芯片的时序用的是SPI,所以叫模拟SPI,如果与单片机通信的芯片是IIC协议,那就叫模拟IIC.

(2)程序流程图

学新通

(3)源码

学新通

学新通

 学新通

 学新通

(4)源码说明

         初始化IO口,使能时钟用的RCC_GPIOx和模式配置的GPIOx名字不能搞混,使能两个IO时不可以用RCC_GPIOA | RCC_GPIOB 的方式,否则编译有警告,实际执行也有问题,原因暂时没有去深究。

五、总结

         1. SPI是全双工、同步的通信总线,物理接口是四线制的,单向通信时只用到条三线,通信方式是主从模式,谁发出时钟谁是主机。

         2 .SPI可以选择2种时钟极性和2种时钟相位,可以组合出4种通信模式,不同模式之间有两种不同之处:一是时钟空闲电平的高低不同,二是开始采用和发送的时钟边沿不同,其实就是采样和发送的先后顺序不同。

        3. XL74HC165是并转串的芯片,每个芯片可以把8个物理按键信号进行并行写入,串行输出出到单片机,节省了大量IO口,该芯片时序采用SPI的协议。

        4. 为了提高程序的实时性,使用了定时器溢出计数 状态机的方式做蜂鸣器延时,而不是开发板DEMO里的delay()函数。这是第一次使用状态机emmmmmm.....

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgggeak
系列文章
更多 icon
同类精品
更多 icon
继续加载