




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
任務17
用硬件SPI口控制OLED屏任務要求OLED顯示器的控制芯片為SSD1306,接口形式為4線制SPI接口,掛載在STM32的SPI2口上,STM32采用硬件SPI的方式訪問SSD1306,要求用硬件SPI傳送數據的方式修改任務13中的寫數函數,使OLED屏中顯示公民的基本道德觀,如圖所示。知識儲備
1.SPI接口的信號線SPI是SerialPeripheralInterface的縮寫,其含義是串行外圍設備接口,SPI接口是Motorola公司推出的一種同步串行外設接口,用于單片機與各種外設以串行方式進行數據通信。SPI總線接口芯片有很多種,目前已有帶有SPI接口的鍵盤、顯示接口芯片、A/D芯片、D/A芯片、EEPROM芯片、看門狗芯片等等。標準的SPI總線有SCK、MISO、MOSI、NSS(
)四根線,簡化的SPI總線只有SCK、
和DIO三根線,它將MISO、MOSI線合并成DIO線。
線名功能SCK串行時鐘線。由主設備控制發出,傳送由單片機產生的時鐘信號,控制SPI接口芯片內部的移位寄存器的移位操作,使數據傳輸同步。NSS()片選線,由主設備控制。控制芯片的選擇,低電平有效。MISO(或DIO)主機輸入從機輸出數據線。用于傳輸從芯片傳往單片機的數據。MOSI(或DIO)主機輸出從機輸入數據線。用于傳輸從單片機傳往芯片的數據。(1)SPI總線中各線的功能1.SPI接口的信號線
1.SPI接口的信號線(2)單片機擴展SPI接口芯片從右圖連接電路可以看出,帶有SPI接口的單片機擴展SPI接口芯片的連接方法是,在單片機中用若干根I/O口線作芯片的片選線,分別與各芯片的線相接,單片機的SCL腳、MOSI腳、MISO腳分別與各SPI接口芯片的SCK、MOSI、MISO引腳相接。如果芯片為簡化的SPI總線接口,則將芯片的DIO引腳既接到單片機的MISO引腳上,又接到單片機的MOSI引腳上。具有SPI接口的單片機擴展SPI接口芯片的連接電路
2.STM32中SPI口的應用特性STM32集成有SPI1、SPI2、SPI3共3個SPI口,它們的幀格式可選擇為8位/幀或16位/幀,數位傳輸的順序可編程設置為MSB(MostSignificantBit,最高有效位)在前或LSB(LeastSignificantBit,最低有效位)在前,可編程設置時鐘的極性(CPOL)和相位(CPHA),可用DMA控制數據傳輸操作。每個SPI口都可工作在全雙工主機/從機模式、半雙工主機/從機模式、主機/從機僅接收/發送模式下。這3個SPI口掛載在不同的總線上,SPI1掛載在APB2上,最高通信速率高達36Mb/s,SPI2、SPI3掛載在APB1上,最高通信速率為18Mb/s。這3個SPI口除了通信速度不同外,其結構和功能相同。
2.STM32中SPI口的應用特性(1)SPI口的結構右圖為SPI口的結構,如圖所示,STM32的SPI口主要由MOSI、MISO、SCK、NSS等4個引腳、移位寄存器、收發緩沖器、波特率發生器、內部控制寄存器和控制電路組成。MOSI引腳:主機輸出/從機輸入引腳。SPI口工作在主機模式時,該引腳為數據發送腳,工作在從機模式時,該引腳為數據接收腳。2.STM32中SPI口的應用特性(1)SPI口的結構MOSI以及其他幾個引腳、移位寄存器的功能示意圖如圖所示。MISO引腳:主機輸入/從機輸出引腳。SPI口工作在主機模式時,該引腳為數據接收腳,工作在從機模式時,該引腳為數據發送腳2.STM32中SPI口的應用特性(1)SPI口的結構移位寄存器:實現串行數據與并行數據之間的轉換,MOSI引腳和MISO引腳分別為移位寄存器的串行輸入、輸出端,發送緩沖區和接收緩沖區分別為移位寄存器的并行輸入、輸出端。在主機模式下,MOSI引腳為移位寄存器的串行輸出端,MISO引腳為移位寄存器的串行輸入端。在從機模式下,MOSI引腳為移位寄存器的串行輸入端,MISO引腳為移位寄存器的串行輸出端。SCK引腳:串行時鐘腳。在主機模式下,SCK引腳輸出串行時鐘。在從機模式下,SCK引腳輸入時鐘信號,控制從機內部的移位寄存器的移位操作,使數據傳輸同步。2.STM32中SPI口的應用特性(1)SPI口的結構NSS引腳:從設備選擇腳。STM32作從設備時,NSS引腳為片選輸入控制腳,NSS=0,芯片被選中,SPI口自動處于從機模式,STM32與主機進行數據通訊,NSS=1,芯片沒被選中,STM32不能與主機進行數據通訊。STM32作主設備時,NSS引腳可作為片選輸出引腳,用來輸出片選信號,并在SPI處于主機模式時輸出低電平信號。在實際應用中,常用的方法是,取消NSS的硬件片選控制功能,而用某個GPIO引腳充當片選輸出腳,用軟件模擬輸出片選信號。波特率發生器:在主機模式下用來產生SPI的時鐘信號。內部控制寄存器和控制電路用來設置SPI的工作模式、數據位的長度,移位的方式、時鐘信號的極性和數據采樣的時刻,記錄SPI的工作狀態。2.SPI口的引腳STM32有3個SPI口,各個SPI口的引腳定義在不同的GPIO口上。其中,SPI1、SPI3的引腳可以映射至不同GPIO口上,STM32中各SPI口的引腳分布如下表所示。其中,“/”左邊的GPIO口為SPI默認的GPIO口,“/”右邊的GPIO口為SPI口可映射的GPIO口。例如,SPI1的CLK腳在表中的GPIO口為PA5/PB3,其含義是,若使能SPI1口,默認情況下,SPI1口的CLK腳為PA5腳,但可以映射至PB3腳上。SPI口的引腳分布如下圖所示SPI口NSSCLKMISOMOSISPI1PA4/PA15PA5/PB3PA6/PB4PA7/PB5SPI2PB12PB13PB14PB15SPIPA15/PA4BP3/PC10PB4/PC11PB5/PC12(1)SPI口的引腳2.SPI口的引腳SPI口的操作時序是指SPI口進行數據傳輸時,MOSI、MISO、SCK等引腳信號之間的時序關系,包括上升沿、下降沿出現的先后次序、數據線上出現數據的時間及先后次序等。SPI口的操作時序由SPI_CR寄存器的CPOL(時鐘極性)、CPHA(時鐘相位)位設置,其中,CPOL(時鐘極性)位定義了無數據傳輸時SCK的狀態,其規則如下:CPOL=0:空閑時SCK=0。CPOL=1:空閑時SCK=1。CPHA(時鐘相位)定義了數據采樣的時間,其規則如下:CPHA=0:時鐘的第一個跳變沿(上升沿或下降沿)進行數據采樣。CPHA=1:時鐘的第二個跳變沿(上升沿或下降沿)進行數據采樣。(2)SPI口的操作時序2.SPI口的引腳根據CPOL、CPHA的取值組合,SPI的時序有4種,如圖1、圖2所示。(2)SPI口的操作時序
圖1:CPHA=0時的操作時序
圖2:CPHA=1時的操作時序2.SPI口的引腳上述圖1、圖2的含義如下表所示(2)SPI口的操作時序CPHACPOL空閑時SCK狀態CLK的第1個時鐘沿數據采集時刻000上升沿時鐘的第1邊沿(上升沿)011下降沿時鐘的第1邊沿(下降沿)100下降沿時鐘的第2邊沿(下降沿)111上升沿時鐘的第2邊沿(上升沿)3.SPI口的設置方法在實際應用中一般是用STM32控制帶有SPI接口的擴展芯片,此時STM32為主控器(主機),SPI接口芯片為從控制。在配置STM32的SPI口時需要我們具備依規辦事的意識,先弄清楚接口芯片的時序圖,然后依據接口芯片的時序圖來設置STM32的SPI時序,設置的原則如下:(1)時鐘的極性要與接口芯片的SPI時鐘極性相同;(2)時鐘序頻率不超過接口芯片SPI時鐘的最高頻率;(3)數據采樣時間相同、數據傳輸的方向相同;(4)每幀數據的位數位相同3.SPI口的設置方法例如,在OLED的控制芯片中,SSD1306的SPI接口時序如下圖所示。時序圖給出了MCU對SSD1306芯片進行讀寫操作時,SSD1306芯片的各引腳的狀態及其出現的時間關系。包括上升沿、下降沿出現的先后次序、間隔的時間、數據線上出現數據的時刻及先后次序等。3.SPI口的設置方法【說明】SSD1306的時序圖中雖沒給出時鐘周期數據,但在實際應用中,SSD1306采用4線制SPI接口時,SCLK的頻率可高達18MHz。從SSD1306的SPI接口時序圖中可以看出以下信息:(1)寫命令和寫數據的時序除DC引腳的狀態不同外,其他引腳的時序相同。寫顯存數據時DC=1,寫命令時DC=0。(2)CS=1時,禁止訪問SSD1306,僅當CS=0時才能訪問SSD1306。(3)CS的下降沿前,即時鐘空閑時,SCLK可以是高電平,也可以是低電平。(4)時鐘上升沿采樣數據。也就是說,如果空閑時的時鐘為低電平,則數據采集發生在第1個時鐘沿。(5)每次傳輸8位數據,且數據移位的方向是,高位(D7)在先,低位(D0)在后。3.SPI口的設置方法所以,在STM32CubeMX中配置SPI的參數時,應將數位設置成8位,起始位設置成MSB,時鐘的極性設為LOW,時鐘的相位設為第1邊沿,如右圖所示。4.HAL庫中常用的SPI操作函數HAL庫中常用的SPI操作函數主要有HAL_SPI_Init()、HAL_SPI_Receive()、HAL_SPI_Transmit()、HAL_SPI_TransmitReceive()等幾個函數,這些函數的定義位于stm32f1xx_hal_spi.c文件中,這些函數的說明位于stm32f1xx_hal_spi.h中,在使用這些函數時需在程序中用#include指令將stm32f1xx_hal_spi.h頭文件包含至程序文件中。(1)HAL_SPI_Init()函數原型HAL_StatusTypeDefHAL_SPI_Init(SPI_HandleTypeDef*hspi);功能用指定的參數初始化SPI口。參數hspi:SPI口句柄,取值為hspix,x為SPI的編號,取值為1~3。返回值HAL的狀態(2)HAL_SPI_Receive()函數4.HAL庫中常用的SPI操作函數原型HAL_StatusTypeDefHAL_SPI_Receive(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout);功能用查詢方式接收若干數據并存放至指定的緩沖區中。參數1hspi:SPI口句柄,取值為hspix,x為SPI的編號,取值為1~3。參數2pData:數據接收緩沖區的地址。參數3Size:接收數據的長度。參數4Timeout:查詢等待的最長時間,單位為ms。返回值HAL的狀態。【舉例】SPI2用查詢方式接收20節字數據,并存入無符號字符型數組rBuf[]中,接收數據的最長時間為100ms,則其程序如下:HAL_SPI_Receive(&hspi2,rBuf,20,100);(3)HAL_SPI_Transmit()函數4.HAL庫中常用的SPI操作函數原型HAL_StatusTypeDefHAL_SPI_Transmit(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout)功能用查詢方式發送數據。參數1hspi:SPI口句柄,取值為hspix,x為SPI的編號,取值為1~3。參數2pData:數據接收緩沖區的地址。參數3Size:接收數據的長度。參數4Timeout:查詢等待的最長時間,單位為ms。返回值HAL的狀態。【舉例】用SPI2將無符號字符型變量dat中的數據發送出去,其程序如下:
HAL_SPI_Transmit(&hspi2,&dat,1,0xff);(4)HAL_SPI_TransmitReceive()函數4.HAL庫中常用的SPI操作函數原型HAL_StatusTypeDefHAL_SPI_TransmitReceive(SPI_HandleTypeDef*hspi,uint8_t*pTxData,uint8_t*pRxData,uint16_tSize,uint32_tTimeout);功能用查詢方式同時接收和發送數據。參數1hspi:SPI口句柄,取值為hspix,x為SPI的編號,取值為1~3。參數2pTxData:發送數據緩沖區的地址。參數3pRxData:接收數據緩沖區的地址。參數4Size:收發送數據的長度。參數5Timeout:查詢等待的最長時間,單位為ms。返回值HAL的狀態。【舉例】SPI1工作在全雙工模式下,用SPI1口將aTxBuf[]中的1字節數據發送出去,同時將外部輸入的數據接收到aRxBuf[]中,其程序如下:
HAL_SPI_TransmitReceive(&hspi1,aTxBuf,aRxBuf,1,0xff);實現方法與步驟任務17的硬件電路:
1.搭建電路
2.生成SPI口的初始化代碼步驟(1)啟動STM32CubeMX,然后新建STM32CubeMX工程、配置SYS、RCC,其中,Debug模式選擇SerialWire,HSE選擇外部晶振。(2)配置時鐘,結果如下圖所示,其中APB1外設時鐘的頻率為36MHz。
2.生成SPI口的初始化代碼步驟(3)配置SPI2口第1步:在窗口中點擊“Pinout&Configuration”標簽,然后在窗口左邊的小窗口中點擊“Categories”標簽,再在配置列表中點擊“Connectivity”->“SPI2”列表項,窗口的中間會顯示如右圖所示的SPI2配置窗口。
2.生成SPI口的初始化代碼步驟(3)配置SPI2口第2步:在SPI2的配置窗口中點擊Mode下拉列表框,從中選擇“TransmitOnlyMaster”(僅主機發送)列表項,Configuration欄中會出現SPI2的一列參數設置項,包括SPI的基本參數、時鐘參數等。如右圖所示。
2.生成SPI口的初始化代碼步驟(3)配置SPI2口第3步:點擊“HardwareNSSSignal”下拉列表框,從中選擇“Disable”,禁止SPI2口的NSS輸出,也就是片選擇信號可能用其他引腳控制。第4步:點擊“ParameterSettings”標簽,然后對SPI2的參數作如右圖設置
3.完善SPI通信程序步驟(1)將任務13中的OLED文件夾(D:\ex\task13中)復制到任務17工程文件所在的文件夾中(D:\ex\task17中)。(2)在Keil工程中新建OLED組,并將OLED文件夾中的oled.c文件添加至OLED組中。(3)修改oled.c文件中的代碼第1步:在oled.c文件的開頭處聲明全局變量hspi2,如下圖所示。
3.完善SPI通信程序步驟(3)修改oled.c文件中的代碼第2步:在OLED_WR_Byte()函數中,注釋掉第50行~第59行的軟件模擬SPI寫數程序,然后添加用硬件SPI2發送數據的代碼,如下圖所示。(4)在Keil工程的include路徑中添加“D:\ex\Task17\OLED”文件夾,該文件夾是oled.h頭文件所在的文件夾。
4.編寫顯示程序步驟(1)按照任務13中所介紹的方法制作本任務中所要顯示漢字的字模,即制作“公民的道德規范愛國敬業誠信友善、”等16個中文字符的字模。(2)將16個中文字符的字模添加至font.h文件的Hzk[]數組中。(3)在main.c文件中添加顯示公民道德規范的程序,程序代碼如下:12345678…#include "oled.h"…intmian(void){…OLED_Init();OLED_ShowCHinese((128-7*16)/2,0,0);//顯示編號為0的漢字公
4.編寫顯示程序main.c文件中的顯示程序9101112131415161718192021
OLED_ShowCHinese((128-7*16)/2+1*16,0,1);//顯示編號為0的漢字民OLED_ShowCHinese((128-7*16)/2+2*16,0,2);//顯示編號為0的漢字的OLED_ShowCHinese((128-7*16)/2+3*16,0,3);//顯示編號為0的漢字道OLED_ShowCHinese((128-7*16)/2+4*16,0,4);//顯示編號為0的漢字德OLED_ShowCHinese((128-7*16)/2+5*16,0,5);//顯示編號為0的漢字規OLED_ShowCHinese((128-7*16)/2+6*16,0,6);//顯示編號為0的漢字范
OLED_ShowCHinese((128-5*16)/2,3,7); //顯示編號為0的漢字愛OLED_ShowCHinese((128-5*16)/2+1*16,3,8);//顯示編號為0的漢字國OLED_ShowCHinese((128-5*16)/2+2*16,3,15);//顯示編號為0的漢字、OLED_ShowCHinese((128-5*16)/2+3*16,3,9);//顯示編號為0的漢字敬OLED_ShowCHinese((128-5*16)/2+4*16,3,10);//顯示編號為0的漢字業
4.編寫顯示程序main.c文件中的顯示程序22…
OLED_ShowCHinese((128-5*16)/2,6,11);//顯示編號為0的漢字民OLED_ShowCHinese((128-5*16)/2+1*16,6,12);//顯示編號為0的漢字的OLED_ShowCHinese((128-5*16)/2+2*16,6,15);//顯示編號為0的漢字道OLED_ShowCHinese((128-5*1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人類疾病學概論考試題含答案
- 2025應屆生在簽訂勞動合同過程中應注意什么細節
- 代理銷售協議規定
- 浙江國企招聘2025寧波前灣產業集團有限公司第1批次招聘10人筆試參考題庫附帶答案詳解
- 2025貴州高速公路集團有限公司招聘77人筆試參考題庫附帶答案詳解
- 2025招商新檢及成員公司招聘(53人)筆試參考題庫附帶答案詳解
- 2025山東滕州市悟通香料有限責任公司省博士后創新實踐基地招聘筆試參考題庫附帶答案詳解
- 2025上半年貴州畢節市納雍縣鴿子花農業有限公司招聘10人筆試參考題庫附帶答案詳解
- 紡織檢測領域的發展趨勢試題及答案
- 紡織工程師證書考試常見誤區試題及答案
- 2025年北京市東城區九年級初三一模英語試卷(含答案)
- 支教培訓考試題及答案
- 2025至2030中國芳綸纖維行業需求預測及發展前景趨勢研究報告
- 2025-2030全球及中國游戲化行業市場現狀供需分析及投資評估規劃分析研究報告
- 功夫茶泡茶技巧
- 2025年高中學業水平考試政治知識點歸納總結(復習必背)
- 中央2025年國家民委直屬事業單位招聘48人筆試歷年參考題庫附帶答案詳解
- JT-T 1495-2024 公路水運危險性較大工程專項施工方案編制審查規程
- 個人工勞務分包合同
- MOOC 創業管理-江蘇大學 中國大學慕課答案
- 2024年四川省自然資源投資集團有限責任公司招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論