找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2815|回復: 0
打印 上一主題 下一主題
收起左側

STM32的SPI介紹和配置

[復制鏈接]
跳轉到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-12 21:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通常SPI通過4個引腳與外部器件相連:

● MISO:主設備輸入/從設備輸出引腳。該引腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù)。

● MOSI:主設備輸出/從設備輸入引腳。該引腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù)。

● SCK:串口時鐘,作為主設備的輸出,從設備的輸入

●NSS:從設備選擇。這是一個可選的引腳,用來選擇主/從設備。它的功能是用來作為“片選引腳”,讓主設備可以單獨地與特定從設備通訊,避免數(shù)據(jù)線上的沖突。從設備的NSS引腳可以由主設備的一個標準I/O引腳來驅動。一旦被使能(SSOE位),NSS引腳也可以作為輸出引腳,并在SPI處于主模式時拉低;此時,所有的SPI設備,如果它們的NSS引腳連接到主設備的NSS引腳,則會檢測到低電平,如果它們被設置為NSS硬件模式,就會自動進入從設備狀態(tài)。當配置為主設備、NSS配置為輸入引腳(MSTR=1,SSOE=0)時,如果NSS被拉低,則這個SPI設備進入主模式失敗狀態(tài):即MSTR位被自動清除,此設備進入從模式。

下圖最能說明SPI的工作原理,非常簡單:

下面是STM32的SPI1模塊的簡單配置
void SPI_configuration()
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|GPIO_Pin_6|RCC_APB2Periph_GPIOA,ENABLE);//使能SP1I和GPIOA時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_7;//MOSISCK復用
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//SPI_CS
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//設置SPI單向或者雙向的數(shù)據(jù)模式:SPI設置為雙線雙向全雙工
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//設置SPI工作模式:設置為主SPI
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//設置SPI的數(shù)據(jù)大小:SPI發(fā)送接收8位幀結構
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;//選擇了串行時鐘的穩(wěn)態(tài):時鐘懸空高
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;//數(shù)據(jù)捕獲于第二個時鐘沿
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//SPI_NSS_Soft;//NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內部NSS信號有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2; //定義波特率預分頻的值:波特率預分頻值為256
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//指定數(shù)據(jù)傳輸從MSB位還是LSB位開始:數(shù)據(jù)傳輸從MSB位開始
//SPI_InitStructure.SPI_CRCPolynomial=7;//CRC值計算的多項式
SPI_Init(SPI1,&SPI_InitStructure);//根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設SPIx寄存器
SPI_Cmd(SPI1,ENABLE);//使能SPI外設  
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表