版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章
SPI接口与
OLED显示屏作者:黄克亚2025年5月本章概要CONTENTSSPI通信接口与互连方式SPI相关库函数STM32F103的SPI工作原理OLED显示屏简介及连接方式OLED显示项目实施11.1SPI通信原理SPI(SerialPeripheralInterface串行外设接口)是由美国摩托罗拉公司提出的一种高速全双工串行同步通信接口。SPI采用主/从模式(master/slave),支持一个或多个从设备,能够实现主设备和从设备之间的高速数据通信。11.1SPI通信原理11.1.1SPI接口SCK(SerialClock),即时钟线,由主设备产生MOSI(MasterOutputSlaveInput),即主设备数据输出/从设备数据输入线MISO(MasterInputSlaveOutput),即主设备数据输入/从设备数据输出线SS(SlaveSelect),SPI从设备选择信号线SPI接口还有包含一个串行移位寄存器,如右图所示SPI接口组成11.1SPI通信原理11.1.2SPI互连1.“一主一从”一个SPI主设备和一个SPI从设备进行通信。主设备的SCK、MOSI、MISO和从设备的SCK、MOSI、MISO直接相连。主设备的SS置高电平,从设备的SS接地。“一主一从”的SPI互连11.1SPI通信原理11.1.2SPI互连2.“一主多从”一个SPI主设备可以和多个SPI从设备进行通信。所有的SPI设备(包括主设备和从设备)共享时钟线和数据线。在主设备端使用多个GPIO引脚来选择不同的SPI从设备。“一主多从”的SPI互连11.2STM32F103的
SPI工作原理STM32F103微控制器的小容量产品有1个SPI接口,中等容量产品有2个SPI,大容量产品则有3个SPI。11.2STM32F103的SPI工作原理11.2.1SPI主要特征●3线全双工同步传输●带或不带第三根双向数据线的双线单工同步传输●8或16位传输帧格式选择●主或从操作●支持多主模式●8个主模式波特率预分频系数(最大为fPCLK/2)●从模式频率(最大为fPCLK/2)●主模式和从模式的快速通信●主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变●可编程的时钟极性和相位●可编程的数据顺序,MSB在前或LSB在前●可触发中断的专用发送和接收标志●SPI总线忙状态标志●支持可靠通信的硬件CRC●可触发中断的主模式故障、过载以及CRC错误标志●支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求STM32F103微控制器的SPI模块允许MCU与外部设备以半/全双工、同步、串行方式通信。通常,它被配置为主模式,并为外部从设备提供通信时钟。11.2STM32F103的SPI工作原理11.2.2SPI内部结构STM32F103微控制器SPI主要由波特率发生器,收发控制和数据存储转移三部分组成●MISO:主设备输入/从设备输出引脚。●MOSI:主设备输出/从设备输入引脚。●SCK:串口时钟,作为主设备的输出,从设备的输入●NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。11.2STM32F103的SPI工作原理11.2.3时钟信号的相位和极性CPOL(时钟极性)
:如果CPOL被清“0”,SCK引脚在空闲状态保持低电平;如果CPOL被置“1”,SCK引脚在空闲状态保持高电平。CPHA(时钟相位):如果CPHA位被清“0”,数据在SCK时钟的奇数跳变沿进行数据位的存取如果CPHA位被置“1”,数据在SCK时钟的偶数跳变沿进行数据位的存取11.2STM32F103的SPI工作原理11.2.3时钟信号的相位和极性SPI通信的时序模型由SPI控制寄存器SP1_CR1中的CPOL位和CPHA位控制,由CPOL和CPHA的不同组合构成了4种SPI时序模式,如下表所示:SPI时序模式CPOL时钟极性CPHA时钟相位空闲时SCK电平采样时刻模式
000低电平第1跳变沿模式
101低电平第2跳变沿模式
210高电平第1跳变沿模式
311高电平第2跳变沿11.2STM32F103的SPI工作原理11.2.4数据帧格式由SPI_CR1寄存器的LSBFIRST位,输出数据位时可以MSB在先或LSB在先由SPI_CR1寄存器的DFF位,每个数据帧可以是8位或16位数据帧格式决定发送/接收的数据长度11.2STM32F103的SPI工作原理11.2.5配置SPI为主模式011.通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。2.选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关。3.设置DFF位来定义8位或16位数据帧格式。4.配置SPI_CR1寄存器的LSBFIRST位定义帧格式。5.如果需要NSS引脚工作在输入模式,——硬件模式下,在整个数据帧传输期间应把NSS脚连接到高电平;——在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。——如果NSS引脚工作在输出模式,则只需设置SSOE位。6.必须设置MSTR位和SPE位(只当NSS脚被连到高电平,这些位才能保持置位)。配置步骤(
MOSI引脚是数据输出,而MISO引脚是数据输入)02当写入数据至发送缓冲器时,发送过程开始。数据发送过程03●传送移位寄存器里的数据到接收缓冲器,并且RXNE标志被置位。●如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。数据接收过程11.2STM32F103的SPI工作原理11.2.6配置SPI为从模式011.设置DFF位以定义数据帧格式为8位或16位。2.选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系。为保证正确的数据传输,从设备和主设备的CPOL和CPHA位必须配置成相同的方式。3.帧格式(SPI_CR1寄存器中的LSBFIRST位定义的”MSB在前”还是”LSB在前”)必须与主设备相同。4.硬件模式下(参考从选择(NSS)脚管理部分),在完整的数据帧(8位或16位)传输过程中,NSS引脚必须为低电平。在NSS软件模式下,设置SPI_CR1寄存器中的SSM位并清除SSI位。5.清除MSTR位、设置SPE位(SPI_CR1寄存器),使相应引脚工作于SPI模式下配置步骤(
MOSI引脚是数据输入,MISO引脚是数据输出)02在写操作中,数据字被并行地写入发送缓冲器。数据发送过程03●移位寄存器中的数据传送到接收缓冲器,SPI_SR寄存器中的RXNE标志被设置。●如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。数据接收过程11.3OLED显示屏OLED显示屏具有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度等优点。但是作为高端显示屏,价格上也会比LCD贵。11.3OLED显示屏11.3.1OLED简介有机发光二极管(英文:OrganicLight-EmittingDiode,缩写:OLED)又称有机电激发光显示、有机发光半导体。OLED的基本结构是由一薄而透明具半导体特性之铟锡氧化物(ITO),与电力之正极相连,再加上另一个金属阴极,包成如三明治的结构。整个结构层中包括了:空穴传输层(HTL)、发光层(EL)与电子传输层(ETL)。OLED的特性是自己发光,不像TFTLCD需要背光,因此可视度和亮度均高,其次是电压需求低且省电效率高,加上反应快、重量轻、厚度薄,构造简单,成本低等。11.3OLED显示屏11.3.2开发板OLED显示屏(1)0.96寸OLED有黄蓝,白,蓝三种颜色可选;其中黄蓝是屏上1/4部分为黄光,下3/4为蓝;白光则为纯白,也就是黑底白字;蓝色则为纯蓝,也就是黑底蓝字。(2)分辨率为128*64(3)多种接口方式;OLED裸屏总共种接口包括:6800、8080两种并行接口方式、3线或4线的串行SPI接口方式、IIC接口方式(只需要2根线就可以控制OLED了!),这五种接口是通过屏上的BS0~BS2来配置的。(4)开发了两种接口的Demo板,接口分别为六针的SPI/IIC兼容模块,四针的IIC模块。开发板实际选用的是六针SPI接口的蓝色或白色显示屏,采用模拟SPI接口连接。11.3OLED显示屏11.3.3OLED显示屏接口微控制器硬件SPI连接方式1.GND:电源地2.VCC:电源正(3~5.5V)3.SCL:OLED的SCL脚,在SPI通信中为时钟管脚4.SDA:OLED的SDA脚,在SPI通信中为数据管脚5.RES:OLED的RES#脚,用来复位(低电平复位)6.DC:OLED的D/C#E脚,数据和命令控制管脚11.3OLED显示屏11.3.3OLED显示屏接口微控制器I/O模拟SPI连接方式1号脚:GND电源地2号脚:VCC接5V电源3号脚:SCL接PD64号脚:SDA接PD75号脚:RES接PD46号脚:DC接PD511.4SPI库函数本章实际项目采用模拟SPI接口连接OLED显示屏,本节介绍的SPI库函数,仅供使用硬件SPI接口时查询。11.4SPI库函数11.4.1函数SPI_I2S_DeInit函数名
SPI_I2S_DeInit函数原形
voidSPI_I2S_DeInit(SPI_TypeDef*SPIx)功能描述
将外设SPIx寄存器重设为缺省值输入参数
SPIx:x可以是1或者2,来选择SPI外设输出参数
无返回值
无先决条件
无被调用函数
对SPI1,RCC_APB2PeriphClockCmd().对SPI2,RCC_APB1PeriphClockCmd().11.4.2函数SPI_Init函数名SPI_Init函数原形voidSPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef*SPI_InitStruct)功能描述根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器输入参数1SPIx:x可以是1或者2,来选择SPI外设输入参数2SPI_InitStruct:指向结构SPI_InitTypeDef的指针,包含了外设SPI的配置信息参阅输出参数无返回值无先决条件无被调用函数无11.4SPI库函数11.4.3函数SPI_Cmd函数名SPI_Cmd函数原形voidSPI_Cmd(SPI_TypeDef*SPIx,FunctionalStateNewState)功能描述使能或者失能SPI外设输入参数1SPIx:x可以是1或者2,来选择SPI外设输入参数2NewState:外设SPIx的新状态
这个参数可以取:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无11.4SPI库函数11.4.4函数SPI_I2S_SendData函数名SPI_I2S_SendData函数原形voidSPI_I2S_SendData(SPI_TypeDef*SPIx,u16Data)功能描述通过外设SPIx发送一个数据输入参数1SPIx:x可以是1或者2,来选择SPI外设输入参数2Data:待发送的数据输出参数无返回值无先决条件无被调用函数无11.4.5函数SPI_I2S_ReceiveData函数名SPI_I2S_ReceiveData函数原形u16SPI_I2S_ReceiveData(SPI_TypeDef*SPIx)功能描述返回通过SPIx最近接收的数据输入参数SPIx:x可以是1或者2,来选择SPI外设输出参数无返回值接收到的字先决条件无被调用函数无11.4SPI库函数11.4.6函数SPI_I2S_ITConfig函数名SPI_I2S_ITConfig函数原形voidSPI_I2S_ITConfig(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT,FunctionalStateNewState)功能描述使能或者失能指定的SPI/I2S中断输入参数1SPIx:x可以是1或者2,来选择SPI外设输入参数2SPI_I2S_IT:待使能或者失能的SPI/I2S中断源输入参数3NewState:SPIx/I2S中断的新状态这个参数可以取:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无11.4SPI库函数11.4.7函数SPI_I2S_GetITStatus函数名SPI_I2S_GetITStatus函数原形ITStatusSPI_I2S_GetITStatus(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT)功能描述检查指定的SPI_I2S中断发生与否输入参数1SPIx:x可以是1或者2,来选择SPI外设输入参数2SPI_I2S_IT:待检查的SPI_I2S中断源输出参数无返回值SPI_IT的新状态先决条件无被调用函数无11.4.8函数SPI_I2S_ClearFlag函数名SPI_I2S_ClearFlag函数原形voidSPI_I2S_ClearFlag(SPI_TypeDef*SPIx,uint16_tSPI_I2S_FLAG)功能描述清除SPI/I2S的待处理标志位输入参数1SPIx:x可以是1或者2,来选择SPI外设输入参数2SPI_I2S_FLAG:待清除的SPI/I2S标志位
参阅Section:SPI_FLAG查阅更多该参数允许取值范围
注意:标志位BSY,TXE和RXNE由硬件重置输出参数无返回值无先决条件无被调用函数无11.5项目实例项目实施工作主要包括显示屏底层驱动移植、汉字取模、中英文字符显示。11.5项目实例11.5.1项目分析本项目要实现的目标是在OLED12864显示屏上显示普通汉字(16X16)、大号汉字(32X32)以及ASCII字符。要实现这一目标,必须先将所有可显示的ASCII字符和要显示的中文汉字的字库存放到一个字库文件当中。然后逐级编写微控制器与OLED显示屏通信程序,分别涉及向显示屏送一位数据,送一个字节数据,在显示屏显示一个字符,显示一个字符串,显示一个汉字,最终将所有显示程序封装成一个个独立的函数,供其它模块调用。11.5项目实例11.5.2项目实施第一步:复制上一章创建工程模板文件夹到桌面,并将文件夹改名为“10OLED”,将原工程模板编译一下,直到没有错误和警告为止。9USART10OLED第二步:点击“File/New”新建三个文件,将其改名为OLED.C、OLED.H和OLEDFont.H并保存到工程模板下的APP文件夹中。并将OLED.C文件添加到APP项目组下。11.5项目实例11.5.2项目实施第三步:将ASCII字符、普通汉字和大号汉字字库数据存放到OLEDFont.H头文件当中。普通汉字为16X16点阵形式,需要将要显示的汉字用取字模软件“PCtoLCD2002.exe”提取字模,存放成C51格式。大号汉字为32X32点阵形式,需要将要显示的汉字用取字模软件“PCtoLCD2002.exe”提取字模,存放成C51格式。11.5项目实例11.5.2项目实施ifndef__OLEDFONT_H#define__OLEDFONT_HcharHzk32[][128]={/*"黄",0,(32X32,宋体)*/{0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0x48,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0xFC,0x48,0x40,0x40,0x40,0x60,0x60,0x40,0x00,0x00,0x00,0x00},{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xC8,0xC8,0x48,0x48,0x47,0x48,0x48,0x48,0xF8,0xF8,0x48,0x48,0x47,0x47,0x48,0x48,0xC8,0xE8,0x48,0x08,0x04,0x06,0x04,0x00,0x00},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0xFF,0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x40,0x40,0x20,0x30,0x11,0x19,0x0C,0x0E,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x04,0x0D,0x19,0x38,0x70,0x70,0x00,0x00,0x00,0x00}};charHzk[][32]={{0x04,0x44,0x44,0x44,0x5F,0x44,0xF4,0x44,0x44,0x44,0x5F,0xC4,0x04,0x04,0x04,0x00},{0x00,0x10,0x8E,0x40,0x20,0x18,0x07,0x00,0x40,0x80,0x40,0x3F,0x00,0x01,0x0E,0x00},/*"苏",0*/{0x00,0xE0,0x00,0xFF,0x00,0x20,0xC0,0x00,0xFE,0x00,0x20,0xC0,0x00,0xFF,0x00,0x00},{0x81,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0xFF,0x00,0x00}/*州",1*/};#endifOLEDFont.H字库文件内容如左所示,因为字库数据很大,汉字字库只贴出了1~2个字,ASCII字库内容没有贴出来,读者可以从教材配套素材中下载11.5项目实例第四步:在OLED.C文件中输入如下源程序,在程序中首先包含OLED.H头文件,然后创建若干个OLED显示函数。11.5.2项目实施11.5项目实例第五步:在OLED.H文件中输入如下源程序,其中条件编译格式不变,只要更改一下预定义变量名称即可,需要将我们刚定义函数的声明加到头文件当中。11.5.2项目实施11.5项目实例第六步:在main.h文件的中间部分添加“#include"OLED.H"”语句,即包含OLED.H头文件,任何时候程序中需要使用某一源文件中函数,必须先包含其头文件,否则编译是不能通过的。第七步:在main.c文件中输入如下源程序,主要工作包括显示屏初始化,显示屏清屏,调用显示函数,分别完成普通汉字、大号汉字和ASCII字符的显示。第六步参考代码如下:#ifndef_MAIN_H#define_MAIN_H#include"stm32f10x.h"#include"LED.h"#include"beepkey.h"#include"dsgshow.h"#include"EXTI.H“#include"timer.h“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年医博士全员培训考试题及参考答案
- 临床医师“三基”考试试题(一)及答案
- 2026年继续教育医院感染管理与防控试题及答案
- 产业园项目雨季基坑施工方案
- 体育馆陶板幕墙施工方案
- 全科医学中医类中级真题及答案
- 专升本真题306现代汉语
- 第一单元自测练习卷-2026-2027学年三年级上册语文统编版
- 基础题2026年新版水稻知识检测题及答案试卷+答案
- 家庭芽苗菜测试题
- 香港全校参与模式(融合教育运作指南)简体中文
- 2026年高考语文备考之语言文字运用:构词方式+错别字+语病专练
- 农资产品购买与使用免责协议
- 《公路边坡灾害监测技术指南》
- 腹腔镜手术皮下气肿处理
- 《幼儿园班级管理》:幼儿园班级管理原则
- 耳针法(耳穴埋豆)操作评分标准
- 建筑信息模型施工应用标准
- 华为公司员工手册培训
- 碳酸盐岩的成岩作用课件
- QC工作流程图模板
评论
0/150
提交评论