娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年07月06日(星期日)

2020年07月06日 | STM32學習筆記——SPI介紹及配置

發布者:詩意世界 來源: eefocus關鍵字:STM32  SPI介紹  配置 手機看文章 掃描二維碼
隨時隨地手機看文章

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

在這里插入圖片描述

SPI 接口一般使用 4 條線通信:

MISO 主設備數據輸入,從設備數據輸出。

MOSI 主設備數據輸出,從設備數據輸入。

SCLK 時鐘信號,由主設備產生。

CS 從設備片選信號,由主設備控制。


從圖中可以看出,主機和從機都有一個串行移位寄存器,主機通過向它的 SPI 串行寄存器

寫入一個字節來發起一次傳輸。寄存器通過 MOSI 信號線將字節傳送給從機,從機也將自己的移位寄存器中的內容通過 MISO 信號線返回給主機。這樣,兩個移位寄存器中的內容就被交換。外設的寫操作和讀操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的字節;反之,若主機要讀取從機的一個字節,就必須發送一個空字節來引發從機的傳輸。

SPI 主要特點有:可以同時發出和接收串行數據;可以當作主機或從機工作;提供頻率可

編程時鐘;發送結束中斷標志;寫沖突保護;總線競爭保護等。


SPI 總線四種工作方式 SPI 模塊為了和外設進行數據交換,根據外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態為低電平;如果 CPOL=1,串行同步時鐘的空閑狀態為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協議之一進行數據傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數據被采樣;如果 CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣。SPI 主模塊和與之通信的外設備時鐘相位和極性應該一致。


配置步驟如下:

1)配置相關引腳的復用功能,使能 SPI2 時鐘, IO 初始化

2)初始化 SPI2,設置 SPI2 工作模式


void SPI_Init(SPI_TypeDef* SPIx, PI_InitTypeDef* SPI_InitStruct);

1

3)使能 SPI2


SPI_Cmd(SPI2, ENABLE); //使能 SPI 外設

1

4)SPI 傳輸數據


void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);

1

5)查看 SPI 傳輸狀態


SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);

1

//以下是SPI模塊的初始化代碼,配置成主機模式,訪問SD Card/W25Q64/NRF24L01   

//SPI口初始化

//這里針是對SPI2的初始化


void SPI2_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  SPI_InitTypeDef  SPI_InitStructure;


RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB時鐘使能 

RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2,  ENABLE );//SPI2時鐘使能

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB13/14/15復用推挽輸出 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB


  GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15上拉


SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //設置SPI單向或者雙向的數據模式:SPI設置為雙線雙向全雙工

SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設置SPI工作模式:設置為主SPI

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //設置SPI的數據大小:SPI發送接收8位幀結構

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行同步時鐘的空閑狀態為高電平

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內部NSS信號有SSI位控制

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定義波特率預分頻的值:波特率預分頻值為256

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定數據傳輸從MSB位還是LSB位開始:數據傳輸從MSB位開始

SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式

SPI_Init(SPI2, &SPI_InitStructure);  //根據SPI_InitStruct中指定的參數初始化外設SPIx寄存器

 

SPI_Cmd(SPI2, ENABLE); //使能SPI外設

SPI2_ReadWriteByte(0xff);//啟動傳輸  

 


}   

//SPI 速度設置函數

//SpeedSet:

//SPI_BaudRatePrescaler_2   2分頻   

//SPI_BaudRatePrescaler_8   8分頻   

//SPI_BaudRatePrescaler_16  16分頻  

//SPI_BaudRatePrescaler_256 256分頻 

  

void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)

{

  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));

SPI2->CR1&=0XFFC7;

SPI2->CR1|=SPI_BaudRatePrescaler; //設置SPI2速度 

SPI_Cmd(SPI2,ENABLE); 



//SPIx 讀寫一個字節

//TxData:要寫入的字節

//返回值:讀取到的字節

u8 SPI2_ReadWriteByte(u8 TxData)

{

u8 retry=0;

while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //檢查指定的SPI標志位設置與否:發送緩存空標志位

{

retry++;

if(retry>200)return 0;

}   

SPI_I2S_SendData(SPI2, TxData); //通過外設SPIx發送一個數據

retry=0;


while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //檢查指定的SPI標志位設置與否:接受緩存非空標志位

{

retry++;

if(retry>200)return 0;

}       

return SPI_I2S_ReceiveData(SPI2); //返回通過SPIx最近接收的數據     

}

關鍵字:STM32  SPI介紹  配置 引用地址:STM32學習筆記——SPI介紹及配置

上一篇:STM32自學之SPI的DMA操作(寄存器級)
下一篇:STM32F407 SPI2 寄存器操作

推薦閱讀

工業機器人行業用四大家族來形容“abb、fanuc、安川、庫卡”的地位,而國內將“四小龍”榮譽贈與國產機器人企業的佼佼者。近些年來國產機器人四小龍寶座幾經易主,我們來看看其中緣由,來看看誰才會真正得道、主宰風雨! 他山之石可以攻玉、前車之鑒后事之師,我們亦或能從中獲取些許心得。 國產工業機器人“四小龍”的寄托。 龍,神獸。 中華民族的...
為解決汽車觸摸屏開發人員面臨的電磁干擾(EMI)和電磁兼容性(EMC)問題,Microchip Technology Inc.(美國微芯科技公司)宣布推出三款全新的maXTouch? 觸摸屏控制器和附加優化服務。新款TD系列觸摸控制器采用全新差分交互信號采集技術,可顯著提高觸摸屏的信噪比(SNR),即使在被厚玻璃或塑料覆蓋時仍可正常工作,同時也支持駕駛員戴手套多點觸控操作...
LED模塊1. LED燈工作原理發光二極管的核心部分是由P型半導體和N型半導體組成的晶片,在P型半導體和N型半導體之間有一個過渡層,稱為PN結。在某些半導體材料的PN結中,注入的少數載流子與多數載流子復合時會把多余的能量以光的形式釋放出來,從而把電能直接轉換為光能。PN結加反向電壓,少數載流子難以注入,故不發光。當它處于正向工作狀態時(即兩端加上...
7月2日,宇芯(成都)集成電路封裝測試有限公司(以下簡稱“宇芯”)三期項目奠基典禮在成都高新綜保區舉行。該項目將于2022年9月建成、年底投入使用,將進一步提升集成電路封裝測試以及芯片凸點加工的產能。此次奠基的宇芯三期項目采用方形扁平無引腳封裝(QFN)、晶圓片級芯片規模封裝(WLCSP)、柵格陣列封裝(LGA)、微系統封裝(MEMS)、球狀引腳柵格陣列封裝...

史海拾趣

問答坊 | AI 解惑

《單片機C語言編程與實例》的代碼

本帖最后由 paulhyde 于 2014-9-15 09:27 編輯 希望對你的學習有一定的幫助~~~  …

查看全部問答∨

求救:ad9244老冒煙~~

開始時,ad9244工作正常,過一會就冒煙,這是怎么回事啊? 相同的板子制版2次,在同一個pcb加工廠做的,第一次做的就沒事,第二次老是出現工作一會就冒煙的現象,已經燒壞好幾個了。…

查看全部問答∨

請教關于ISP下載線的問題

AT89S51的ISP下載線和STC的ISP下載線是不一樣的吧?因為我看有那種“24針并口--十針”的下載線,還有種就是我調試STC單片機用的,“九針串口-232轉TTL-單片機TXD和RXD”。STC的單片機可以用前一種嗎???這些問題讓我很糾結啊 幫忙解答吧 呵呵…

查看全部問答∨

wince 操作數據庫

新建smart device工程,想操作數據庫。 1.Access數據庫,文件test.mdb,無法下手,不知那個引用。 2.sql server時,文件test_Data.mdf,不知道如何操作,經常出現某某dll找不到錯誤. 反正是一無所知,希望得到幫忙,謝謝。…

查看全部問答∨

IAR編譯器在函數調用時的入棧問題

用IAR 寫51的程序 發現有的函數調用的時候將編譯器返回地址入棧了, 而有的函數在調用的時候卻沒有將返回地址入棧,但是執行完函數后依然能夠正確返回 這是什么原因呢? …

查看全部問答∨

求一個在wince下用directshow filter播放視頻的demo

最好是能在wince6.0下運行的,謝謝各位…

查看全部問答∨

MSP430開發辦申請

希望申請的上哈。主要還是想學習下。…

查看全部問答∨

求助:快速檢測GPIO輸入腳的電平

大家好!我用STM32作攝像頭驅動,直接將攝像頭數據現在到FSMC接口的LCD上,已經可以工作了,但3百萬像素一幀需要2~3秒,想提高速率,問一下除了我下面的方法外,還有沒有更快的方法檢測輸入管腳電平變化?  1009: {   ...…

查看全部問答∨

pp2.21需要iar5.5?????

安裝了IAR 5.4,下載了 pp2.21 ev 30天版本。 居然說 No matching found 為啥?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 玛曲县| 夏河县| 青田县| 新田县| 巴马| 夏邑县| 沽源县| 怀远县| 荣成市| 金阳县| 嘉定区| 鹿泉市| 平江县| 内乡县| 改则县| 阿勒泰市| 曲阜市| 天水市| 五家渠市| 东丰县| 楚雄市| 宁武县| 集贤县| 陈巴尔虎旗| 崇义县| 沛县| 前郭尔| 河源市| 桂平市| 万安县| 南宫市| 蒙城县| 固镇县| 宁都县| 抚远县| 定日县| 和田县| 南江县| 浦北县| 临颍县| 黄梅县|