https://mp.weixin.qq.com/s/vq-ON4pPU16BtIxYhHpWVQ

STC15系列单片机还提供另一种高速串行通信接口 —— SPI接口。SPI是一种全双工、高速、同步的通信总线,有两种操作模式:主模式和从模式。在主模式中支持高达3 Mbps的速率(工作频率为12MHz时,如果CPU主频采用20MHz到36MHz,则可更高,从模式时速度无法太快,SYSclk/4以内较好),还具有传输完成标志和写冲突标志保护。

一、 与SPI功能模块相关的特殊功能寄存器

1.1 SPI控制寄存器SPCTL

SPCTL : SPI控制寄存器

SSIG:SS引脚忽略控制位。

SSIG=1,MSTR(位4)确定器件为主机还是从机

SSIG=0,SS脚用于确定器件为主机还是从机.SS脚可作为I/O口使用(见SPI主从选择表)

SPEN:SPI使能位。

SPEN=1,SPI使能;

SPEN=0,SPI被禁止,所有SPI引脚都作为I/O口使用。

DORD:设定SPI数据发送和接收的位顺序

DORD=1, 数据字的LSB(最低位)最先发送;

DORD=0, 数据字的MSB(最高位)最先发送。

MSTR:主/从模式选择位(见SPI主从选择表)。

CPOL:SPI时钟极性

CPOL=1,SCLK空闲时为高电平。SCLK的前时钟沿为下降沿而后沿为上升沿。

CPOL=0,SCLK空闲时为低电平。SCLK的前时钟沿为上升沿而后沿为下降沿。

CPHA:SPI时钟相位选择。

CPHA=1, 数据在SCLK的前时钟沿驱动,并在后时钟沿采样

CPHA=0, 数据在SS为低(SSIG=0)时被驱动,在SCLK的后时钟沿被改变,并在前时钟沿被采样。(注:SSIG = 1时的操作未定义)

SPR1、SPR0:SPI时钟频率选择控制位:

表中,CPU_CLK是CPU时钟。

1.2 SPI状态寄存器SPSTAT

SPSTAT: SPI状态寄存器

SPIF:SPI传输完成标志。

当一次串行传输完成时,SPIF置位 SPI中断被打开(即ESPI (IE2.1) 和EA(IE.7) 都置位),则产生中断。SPI处于主模式且SSIG=0时,如果SS为输入并被驱动为低电平,SPIF也将置位 "模式改变"。SPIF标志通过软件向其写入"1"清零。

WCOL:SPI写冲突标志。

在数据传输的过程中如果对SPI 数据寄存器SPDAT执行写操作,WCOL将置位。WCOL标志通过软件向其写入"1"清零。

1.3 SPI数据寄存器SPDAT

SPDAT: SPI数据寄存器

SPDAT.7 - SPDAT.0: 传输的数据位Bit7~Bit0。

1.4 中断允许寄存器2

ESPI : SPI中断允许位

ESPI=1,允许SPI中断,

ESPI=0,禁止SPI中断。

二、SPI接口的结构

STC15系列单片机的SPI功能方框图如下图所示。

SPI的核心是一个8位移位寄存器和数据缓冲器,数据可以同时发送和接收。在SPI数据的传输过程中,发送和接收的数据都存储在数据缓冲器中。对于主模式,若要发送一字节数据,只需将这个数据写到SPDAT寄存器中。主模式下SS信号不是必需的;但是在从模式下,必须在SS信号变为有效并接收到合适的时钟信号后,方可进行数据传输。在从模式下,如果一个字节传输完成后,SS信号变为高电平,这个字节立即被硬件逻辑标志为接收完成,SPI接口准备接收下一个数据。

三、SPI接口的数据通信

SPI接口 有4个管脚 SCLK, MISO, MOSI和SS,可在3组管脚之间进行切换SCLK/P1.5,MISO/P1.4, MOSI/P1.3和SS/P1.2 ]; SCLK_2/P2.1, MISO_2/P2.2, MOSI_2/P2.3和SS_2/P2.4][SCLK_3/P4.3, MISO_3/P4.1, MOSI_3/P4.0和SS_3/P5.4]。MOSI ( Master Out Slave In,主出从入):主器件的输出和从器件的输入,用于主器件到从器件的串行数据传输。当SPI作为主器件时,该信号是输出;当SPI作为从器件时,该信号是输入。数据传输时最高位在先,低位在后 根据SPI规范,多个从机可以共享一根MOSI信号线。在时钟边界的前半周期,主机将数据放在MOSI信号线上,从机在该边界处获取该数据。MISO ( Master In Slave Out,主入从出):从器件的输出和主器件的输入,用于实现从器件到主器件的数据传输。当SPI作为主器件时,该信号是输入;当SPI作为从器件时,该信号是输出。数据传输时最高位在先,低位在后 SPI规范中,一个主机可连接多个从机,因此,主机的MISO信号线会连接到多个从机上,或者说,多个从机共享一根MISO信号线。当主机与一个从机通信时,其他从机应将其MISO引脚驱动置为高阻状态。SCLK ( SPI Clock,串行时钟信号):串行时钟信号是主器件的输出和从器件的输入,用于同步主器件和从器件之间在MOSI和MISO线上的串行数据传输。当主器件启动一次数据传输时,自动产生8个SCLK时钟周期信号给从机。在SCLK的每个跳变处(上升沿或下降沿)移出一位数据。所以,一次数据传输可以传输一个字节的数据。

SS( Slave Select,从机选择信号):这是一个输入信号,主器件用它来选择处于从模式的SPI模块。主模式和从模式下SS的使用方法不同。在主模式下,SPI接口只能有一个主机,不存在主机选择问题,该模式下SS不是必需的。主模式下通常将主机的SS管脚通过10KΩ的电阻上拉高电平。每一个从机的SS接主机的I/O口,由主机控制电平高低,以便主机选择从机。在从模式下,不管发送还是接收,SS信号必须有效。因此在一次数据传输开始之前必须将SS为低电平。SPI主机可以使用I/O口选择一个SPI器件作为当前的从机。

SPI从器件通过其SS脚确定是否被选择。如果满足下面的条件之一,SS就被忽略:如果SPI系统被禁止,即SPEN(SPCTL.6)= 0(复位值)如果SPI配置为主机,即MSTR(SPCTL.4)=1,并且P1.2/SS配置为输出( P1M0.2和P1M1.2)如果SS脚被忽略,即SSIG(SPCTL.7)= 1,该脚配置用于I/O口功能。

注:即使SPI被配置为主机(MSTR = 1),它仍然可以通过拉低SS脚配置为从机(如P1.2/SS配置为输入且SSIG=0)。要使能该特性,应当置位SPIF(SPSTAT.7)。

四、SPI测试代码

这里采用的是查询法。


#define u16 unsigned int
#define u8  unsigned char
// 控制寄存器 SPCTL
#define SSIG 1 // 1: 忽略SS脚,由MSTR位决定主机还是从机  0: SS脚用于决定主从机。
#define SPEN 1 // 1: 允许SPI,0:禁止SPI,所有SPI管脚均为普通IO
#define DORD 0 // 1:LSB先发,0:MSB先发
#define MSTR 1 // 1:设为主机 0:设为从机
#define CPOL 1 // 1: 空闲时SCLK为高电平,0:空闲时SCLK为低电平
#define CPHA 1 // 数据在SCLK的前时钟沿驱动,并在后时钟沿采样
#define SPEED_4 0 // fosc/4
#define SPEED_8 1 // fosc/8
#define SPEED_16 2 // fosc/16
#define SPEED_32 3 // fosc/32
// 状态寄存器 SPSTAT
#define SPIF 0x80 //SPI传输完成标志。写入1清0。
#define WCOL 0x40 //SPI写冲突标志。写入1清0。
void Spi_Init(void)
{SPDAT = 0;                           //初始化SPDATSPSTAT = SPIF | WCOL;                //清除SPI状态标志SPCTL = (SSIG << 7) + (SPEN << 6)  + (MSTR << 4) + (CPOL << 3) + (CPHA << 2) + SPEED_4;
}
void Spi_Send(u8 dat)
{SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志SPDAT = dat; //发送一个字节while (!(SPSTAT & SPIF));  //等待SPI数据传输完成SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志
}

13.STC15W408AS单片机SPI相关推荐

  1. 2.STC15W408AS单片机时钟

    STC15W408AS单片机有两个时钟源:内部高精度R/C时钟和外部时钟(外部输入时钟或外部晶体振荡器产生的时钟).内部高精度R/C时钟(±0.3%),±1%温漂,常温下温漂±0.6%(-20℃~+6 ...

  2. STC15系列单片机SPI使用教程(一)

    硬件SPI(查询方式)以STC15W408AS单片机为例 一.硬件接线 1.普通SPI设备接线 2.FLASH设备接线 二.程序编写 1.和SPI相关的寄存器 ① SPCTL寄存器 ② SPSTAT寄 ...

  3. 基于STC15W408AS单片机的陀螺仪显示器设计

    提示:本文属于技术的交流,如有抄袭请联系删除. 文章目录 前言 一.STC15W408AS单片机 二.总体设计 1.硬件设计 (1)原理图设计 a.MCU设计 b.传感器接口设计 c.液晶显示 d.电 ...

  4. SPI通信协议:单片机spi通信接口什么意思,spi接口干什么用的?

    讲真,以前做开发的时候最怕就是调spi和iic. 因为公司没有逻辑分析仪,调起来全凭经验,一出问题找都找不到,只能仔细看代码盲调,看是不是哪个时序有问题. 说到这里,可能刚初学的小伙伴会问:单片机sp ...

  5. 51单片机——SPI

    单片机--SPI总线 宗旨:技术的学习是有限的,分享的精神是无限的. UART. I2C 和 SPI 是单片机系统中最常用的三种通信协议. 1.初步介绍 SPI 是一种高速的.全双工.同步通信总线,标 ...

  6. 10.STC15W408AS单片机A/D转换器

    10.STC15W408AS单片机A/D转换器 STC15系列单片机内部集成了8路10位高速A/D转换器.STC15系列单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器 ...

  7. 6.STC15W408AS单片机外部中断

    一.外部中断简介 STC15W408AS单片机有4个外部中断,它们分别是:外部中断0(INT0).外部中断1(INT1).外部中断2(INT2).外部中断3(INT3). 外部中断0(INT0)和外部 ...

  8. 11.STC15W408AS单片机CCP/PCA/PWM应用

    STC15W408AS单片机集成了3路可编程计数器阵列(CCP/PCA)模块可用于软件定时器.外部脉冲的捕捉.高速脉冲输出以及脉宽调制(PWM)输出. 一.与CCP/PWM/PCA应用有关的特殊功能寄 ...

  9. STC15W408AS单片机串口切换与下载问题

    STC15W408AS单片机串口切换与下载问题 STC15W408AS这款单片机支持串口的引脚切换功能.但是在配置过程中,发现从默认引脚P3.0和P3.1切换到P3.6和P3.7切换不成功. 官方推荐 ...

  10. STC15W408AS单片机通过ADC端口采集模拟量并从串口打印数值

    STC15W408AS单片机通过ADC端口采集模拟量并从串口打印数值 0-1023数据采集 STC15W408AS引脚功能图 STC15系列单片机的A/D转换器 A/D转换器的结构 STC15系列单片 ...

最新文章

  1. 科大星云诗社动态20210212
  2. Angular2 组件与模板 -- 输入和输出属性
  3. Linux 文本格式显示折线图,linux 折线图
  4. streaming api_通过Spring Integration消费Twitter Streaming API
  5. python十个运维实战项目_干货 | 这4个Python实战项目,让你瞬间读懂Python!
  6. 怎样用计算机记账,仓管员怎么用电脑记账?简单实用的电脑操作方式一览!
  7. 【Java】浅谈Java的I/O体系
  8. Python判断一个集合族是否为σ代数
  9. zabbix详解(十一)——zabbix监控MySQL性能实战
  10. Win8.1系统 Ghost 64位 专业版下载 2014年3月份
  11. OpenCV官方教程节选
  12. 证件照素材大合集(全网最全版本,免费分享)
  13. 操作系统重要知识清单:一起来搞懂进程呀!!
  14. NBUT 1181 Big Mouth of Abyss - Kog'Maw(删k位留最大最小数)
  15. 网络Sniffing原理
  16. Bootstrap 实例1
  17. react-native连接夜神模拟器
  18. 彻底掌握 Javascript(十一)日期-曾亮-专题视频课程
  19. OpenJudge NOI题库 1.1 编程基础之输入输出
  20. 安徽省全省计算机水平考试成绩查询时间,2021年安徽省计算机等级考试分数公布时间|成绩查询入口...

热门文章

  1. 业绩梯队:让各层级领导者做出正确的业绩
  2. 中兴linux下载软件,最新中兴新支点操作系统v3.2.2 最新版下载地址电脑版-CC软件...
  3. 网站SQL注入漏洞检测
  4. 计算机主板电流图形,终于找到电脑主板供电电路介绍
  5. 机器人读懂人心的九大模型
  6. IPS与IDS部署场景
  7. Ps学习(色彩范围工具使用和多边形抠图案例)
  8. 激光打印机与计算机相连,Hp laserjet1010打印机怎么连接电脑使用?
  9. 关于源级串联电感提高稳定性的理由
  10. 特殊日历计算 —— C++