




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、SPI簡介SPI 是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在 EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號處理器和數(shù)字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議,STM32也有SPI接口。SPI接口一般使用4條線: MISO 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。MOSI
2、主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。SCLK時(shí)鐘信號,由主設(shè)備產(chǎn)生。CS從設(shè)備片選信號,由主設(shè)備控制。SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護(hù);總線競爭保護(hù)等。SPI總線四種工作方式 SPI 模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步
3、時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。不同時(shí)鐘相位下的總線數(shù)據(jù)傳輸時(shí)序見下圖:二、STM32的SPI介紹STM32的SPI功能很強(qiáng)大,SPI時(shí)鐘最多可以到18Mhz,支持DMA,可以配置為SPI協(xié)議或者I2S協(xié)議。本節(jié),我們將利用STM32的SPI來讀取外部SPI FLASH芯片(W25X16),這節(jié),我們使用STM32的SPI1的主模式, STM32的主模式配置步驟如下: 1)配置相關(guān)引腳的復(fù)用功能,使能SPI1時(shí)鐘。我們要用SPI1,第一步就要是能SPI1的時(shí)
4、鐘,SPI1的時(shí)鐘通過APB2ENR的第12位來設(shè)置。其次要設(shè)置SPI1的相關(guān)引腳為復(fù)用輸出,這樣才會連接到SPI1上否則這些IO口還是默認(rèn)的狀態(tài),也就是標(biāo)準(zhǔn)輸入輸出口。這里我們使用的是PA5、6、7這3個(gè)(SCK.、MISO、MOSI,CS使用軟件管理方式),所以設(shè)置這三個(gè)為復(fù)用IO。2)設(shè)置SPI1工作模式。這一步全部是通過SPI1_CR1來設(shè)置,我們設(shè)置SPI1為主機(jī)模式,設(shè)置數(shù)據(jù)格式為8位,然后通過CPOL和CPHA位來設(shè)置SCK時(shí)鐘極性及采樣方式。并設(shè)置SPI1的時(shí)鐘頻率(最大18Mhz),以及數(shù)據(jù)的格式(MSB在前還是LSB在前)。3)使能SPI1。這一步通過SPI1_CR1的bi
5、t6來設(shè)置,以啟動SPI1,在啟動之后,我們就可以開始SPI通訊了。Spi.h文件的內(nèi)容:#ifndef _SPI_H_#define _SPI_H_#include "stm32f10x.h"#define SPI_CE_H() GPIO_SetBits(GPIOE, GPIO_Pin_6) #define SPI_CE_L() GPIO_ResetBits(GPIOE, GPIO_Pin_6)#define SPI_CSN_H() GPIO_SetBits(GPIOE, GPIO_Pin_7)#define SPI_CSN_L() GPIO_ResetBits(GPIO
6、E, GPIO_Pin_7)void SPI2_Init(void);u8 Spi_RW(u8 dat);#endifSpi.c 文件內(nèi)容:#include "spi.h"void SPI2_Init(void) GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );/PORTB時(shí)鐘使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENA
7、BLE );/SPI2時(shí)鐘使能 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC, ENABLE); /使能PE/C端口時(shí)鐘/*配置 SPI_NRF_SPI的 SCK,MISO,MOSI引腳,GPIOB13,GPIOB14,GPIOB15 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復(fù)用推挽輸出 GPIO_InitS
8、tructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);/*配置SPI_NRF_SPI的CE引腳PE6,和SPI_NRF_SPI的 CSN 引腳PE7:*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;/PE6 7 推挽 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GP
9、IO_Init(GPIOE, &GPIO_InitStructure);/初始化指定IO/*配置SPI_NRF_SPI的IRQ引腳,*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; /GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ; /下拉輸入 GPIO_Init(GPIOC, &GPIO_InitStructure); SPI_CSN_L();SPI_InitStructure.SPI_Direc
10、tion = SPI_Direction_2Lines_FullDuplex; /雙線全雙工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /主模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /數(shù)據(jù)大小8位 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /時(shí)鐘極性,空閑時(shí)為低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /第1個(gè)邊沿有效,上升沿為采樣時(shí)刻 SPI_InitStructure.SPI_NSS
11、= SPI_NSS_Soft; /NSS信號由軟件產(chǎn)生 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; /SPI_BaudRatePrescaler_88分頻,9MHz SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /高位在前 SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC值計(jì)算的多項(xiàng)式SPI_Init(SPI2, &SPI_InitStructure); /* Enable SPI2 */ SPI_Cmd(SPI2, ENABLE);u8 Spi_RW(u8 dat) /* 當(dāng) SPI發(fā)送緩沖器非空時(shí)等待 */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) = RESET); /* 通過 SPI2發(fā)送一字節(jié)數(shù)據(jù) */ SPI_I2S_Se
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 備考無憂22025年初級護(hù)師考試試題及答案
- 中級審計(jì)師復(fù)習(xí)要點(diǎn)試題及答案
- 消防工程實(shí)踐中的常見錯(cuò)誤試題及答案
- 火災(zāi)現(xiàn)場科學(xué)分析與判斷試題及答案
- 2025年中級會計(jì)理論重點(diǎn)試題及答案
- 2025年護(hù)師疾病預(yù)防與護(hù)理策略試題及答案
- 消防設(shè)施的運(yùn)行狀態(tài)監(jiān)測與改善試題及答案
- 2025年入團(tuán)考試歷年總結(jié)試題及答案
- 中級審計(jì)師考前準(zhǔn)備的試題及答案建議
- 消防安全培訓(xùn)與教育試題及答案
- (課件)肝性腦病
- 國開電大《Java語言程序設(shè)計(jì)》形考任務(wù)三答案
- 全國卷高考標(biāo)準(zhǔn)語文答題卡作文紙3欄800字版
- 新型人工晶體進(jìn)展課件
- 2022年全國大學(xué)生英語競賽C類試題
- 裝飾、裝修施工方案
- 礦井瓦斯抽采
- 施工現(xiàn)場安全檢查記錄表(周)以及詳細(xì)記錄
- 立法學(xué)完整版教學(xué)課件全套ppt教程
- 五年級下冊科學(xué)說課課件 -1.2 沉浮與什么因素有關(guān) |教科版 (共28張PPT)
- 《出口報(bào)關(guān)單模板》word版
評論
0/150
提交評論