ARM嵌入基礎應用 9_第1頁
ARM嵌入基礎應用 9_第2頁
ARM嵌入基礎應用 9_第3頁
ARM嵌入基礎應用 9_第4頁
ARM嵌入基礎應用 9_第5頁
已閱讀5頁,還剩31頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第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接地?!耙恢饕粡摹钡腟PI互連11.1SPI通信原理11.1.2SPI互連2.“一主多從”一個SPI主設備可以和多個SPI從設備進行通信。所有的SPI設備(包括主設備和從設備)共享時鐘線和數據線。在主設備端使用多個GPIO引腳來選擇不同的SPI從設備?!耙恢鞫鄰摹钡腟PI互連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:主設備輸出/從設備輸入引腳?!馭CK:串口時鐘,作為主設備的輸出,從設備的輸入●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位?!绻鸑SS引腳工作在輸出模式,則只需設置SSOE位。6.必須設置MSTR位和SPE位(只當NSS腳被連到高電平,這些位才能保持置位)。配置步驟(

MOSI引腳是數據輸出,而MISO引腳是數據輸入)02當寫入數據至發送緩沖器時,發送過程開始。數據發送過程03●傳送移位寄存器里的數據到接收緩沖器,并且RXNE標志被置位?!袢绻O置了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標志被設置?!袢绻O置了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的新狀態

這個參數可以?。篍NABLE或者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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論