STM32學習重點spi_第1頁
STM32學習重點spi_第2頁
STM32學習重點spi_第3頁
STM32學習重點spi_第4頁
STM32學習重點spi_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、一、SPI簡介SPI 是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議,STM32也有SPI接口。SPI接口一般使用4條線: MISO 主設備數據輸入,從設備數據輸出。MOSI

2、主設備數據輸出,從設備數據輸入。SCLK時鐘信號,由主設備產生。CS從設備片選信號,由主設備控制。SPI主要特點有:可以同時發出和接收串行數據;可以當作主機或從機工作;提供頻率可編程時鐘;發送結束中斷標志;寫沖突保護;總線競爭保護等。SPI總線四種工作方式 SPI 模塊為了和外設進行數據交換,根據外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態為低電平;如果CPOL=1,串行同步時鐘的空閑狀態為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協議之一進行數據傳輸。如果CPHA=0,在串行同步

3、時鐘的第一個跳變沿(上升或下降)數據被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣。SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。不同時鐘相位下的總線數據傳輸時序見下圖:二、STM32的SPI介紹STM32的SPI功能很強大,SPI時鐘最多可以到18Mhz,支持DMA,可以配置為SPI協議或者I2S協議。本節,我們將利用STM32的SPI來讀取外部SPI FLASH芯片(W25X16),這節,我們使用STM32的SPI1的主模式, STM32的主模式配置步驟如下: 1)配置相關引腳的復用功能,使能SPI1時鐘。我們要用SPI1,第一步就要是能SPI1的時

4、鐘,SPI1的時鐘通過APB2ENR的第12位來設置。其次要設置SPI1的相關引腳為復用輸出,這樣才會連接到SPI1上否則這些IO口還是默認的狀態,也就是標準輸入輸出口。這里我們使用的是PA5、6、7這3個(SCK.、MISO、MOSI,CS使用軟件管理方式),所以設置這三個為復用IO。2)設置SPI1工作模式。這一步全部是通過SPI1_CR1來設置,我們設置SPI1為主機模式,設置數據格式為8位,然后通過CPOL和CPHA位來設置SCK時鐘極性及采樣方式。并設置SPI1的時鐘頻率(最大18Mhz),以及數據的格式(MSB在前還是LSB在前)。3)使能SPI1。這一步通過SPI1_CR1的bi

5、t6來設置,以啟動SPI1,在啟動之后,我們就可以開始SPI通訊了。Spi.h文件的內容:#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 文件內容:#include "spi.h"void SPI2_Init(void) GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );/PORTB時鐘使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENA

7、BLE );/SPI2時鐘使能 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC, ENABLE); /使能PE/C端口時鐘/*配置 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; /復用推挽輸出 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; /數據大小8位 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /時鐘極性,空閑時為低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /第1個邊沿有效,上升沿為采樣時刻 SPI_InitStructure.SPI_NSS

11、= SPI_NSS_Soft; /NSS信號由軟件產生 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; /SPI_BaudRatePrescaler_88分頻,9MHz SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /高位在前 SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC值計算的多項式SPI_Init(SPI2, &SPI_InitStructure); /* Enable SPI2 */ SPI_Cmd(SPI2, ENABLE);u8 Spi_RW(u8 dat) /* 當 SPI發送緩沖器非空時等待 */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) = RESET); /* 通過 SPI2發送一字節數據 */ SPI_I2S_Se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論