版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二節(jié) 通訊及總線-SPI總線復(fù) 習(xí) 總結(jié)uart 1、兩根線:發(fā)送和接收 2、發(fā)送器:TE使能,發(fā)送一個(gè)空閑幀+一個(gè)下降沿,表明開(kāi)始傳輸 3、接收器:如果辨認(rèn)出序列1 1 1 0 X 0 X 0 X 0 0 0 0,那么就認(rèn)為偵測(cè)到一個(gè)起始位,開(kāi)始接收。 4、一幀數(shù)據(jù)包括起始位,數(shù)據(jù)位和停止位(或者包括奇偶校驗(yàn)位),根據(jù)事先的配置或約定SPI總線協(xié)議 SPI,是英語(yǔ)Serial Peripheral interface的縮寫(xiě),顧名思義就是串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX 系列處理器上定義的。SPI總線系統(tǒng)是一種同步串行外設(shè)接口通信以交換信息。外圍設(shè)置FLASH,R
2、AM、網(wǎng)絡(luò)控制器、LCD顯示驅(qū)動(dòng)器、A/D轉(zhuǎn)換器和MCU等。接口包括以下四種信號(hào):接口包括以下四種信號(hào):(1)MOSI 主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入 (主發(fā)從收)(2)MISO 主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出 (主收從發(fā))(3)SCLK 時(shí)鐘信號(hào),由主器件產(chǎn)生 (時(shí)鐘線)(4)CS 從器件使能信號(hào),由主器件控制 (片選線)SPI通信以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,需要至少4根線,事實(shí)上3根也可以(用于單向傳輸時(shí),也就是半雙工方式)。 從選擇(NSS)腳管理 有2種NSS模式: 軟件NSS模式:設(shè)置SPI_CR1寄存器的SSM位來(lái)使能這種模式。在這種模式下NSS引腳
3、可以用作它用,而內(nèi)部NSS信號(hào)電平可以通過(guò)寫(xiě)SPI_CR1的SSI位來(lái)驅(qū)動(dòng) 從選擇(NSS)腳管理 硬件NSS模式,分兩種情況: NSS輸出被使能:當(dāng)STM32為主SPI,并且NSS輸出已經(jīng)通過(guò)SPI_CR2寄存器的SSOE位使能,這時(shí)NSS引腳被拉低,所有NSS引腳與這個(gè)主SPI的NSS引腳相連并配置為硬件NSS的SPI設(shè)備,將自動(dòng)變成從SPI設(shè)備。 當(dāng)一個(gè)SPI設(shè)備需要發(fā)送廣播數(shù)據(jù),它必須拉低NSS信號(hào),以通知所有其它的設(shè)備它是主設(shè)備;如果它不能拉低NSS,這意味著總線上有另外一個(gè)主設(shè)備在通信,這時(shí)將產(chǎn)生一個(gè)硬件失敗錯(cuò)誤(Hard Fault)。 NSS輸出被關(guān)閉:允許操作于多主環(huán)境。 S
4、PI通訊至少兩個(gè)設(shè)備,一個(gè)作為主設(shè)備,一個(gè)作為從設(shè)備。通過(guò)配置CR1決定主從設(shè)備,通過(guò)NSS(CS)管理其他從設(shè)備 如何實(shí)現(xiàn)通訊?除去NSS管腳,還剩3根線。MISO,MOSI,SCK。SCKSPISPI接口實(shí)際上是兩個(gè)簡(jiǎn)單的移位寄存器接口實(shí)際上是兩個(gè)簡(jiǎn)單的移位寄存器, ,傳輸?shù)臄?shù)據(jù)為傳輸?shù)臄?shù)據(jù)為8 8位位, ,在主器件產(chǎn)在主器件產(chǎn)生的從器件使能信號(hào)和移位脈沖下生的從器件使能信號(hào)和移位脈沖下, ,按位傳輸按位傳輸, ,高位在前高位在前, ,低位在后。低位在后。 上升沿發(fā)送,下降沿接收。(有的器件是上升沿接收,下降沿發(fā)送)上升沿發(fā)送,下降沿接收。(有的器件是上升沿接收,下降沿發(fā)送)D7D7. .
5、 . . .D0D0D0D0. . . . .D7D7 SPI相當(dāng)于一個(gè)環(huán)形移位寄存器脈沖 主機(jī)sbuff 從機(jī)sbuff sdi sdo 0 10101010 01010101 0 0 1上 0101010 x 1010101x 0 1 1下 01010100 10101011 0 1 2上 1010100 x 0101011x 1 0 2下 10101001 01010110 1 0 3上 0101001x 1010110 x 0 1 3下 01010010 10101101 0 1 如果要正常發(fā)送和接收,則: 如果主設(shè)備MO上升沿改變數(shù)據(jù),則高電平保持線上數(shù)據(jù),低電平總線空閑;從設(shè)備SI
6、下降沿接收數(shù)據(jù); 同時(shí),SO上升沿改變數(shù)據(jù),高電平保持線上數(shù)據(jù),主設(shè)備MI下降沿接收數(shù)據(jù) 如果主設(shè)備MO下降沿改變數(shù)據(jù),則低電平保持線上數(shù)據(jù),高電平總線空閑;從設(shè)備SI上升沿接收數(shù)據(jù); 兩個(gè)概念: 時(shí)鐘極性(CPOL): 0: 空閑狀態(tài)時(shí),SCK保持低電平; 1: 空閑狀態(tài)時(shí),SCK保持高電平。 時(shí)鐘相位(CPHA) 0: 數(shù)據(jù)采樣從第一個(gè)時(shí)鐘邊沿開(kāi)始; 1: 數(shù)據(jù)采樣從第二個(gè)時(shí)鐘邊沿開(kāi)始。 四種組合模式選擇不同組合的依據(jù)是什么?一般主設(shè)備是MCU,可通過(guò)編程改變從設(shè)備為SPI外設(shè),具有固定的通訊模式因此,主設(shè)備(STM32)選擇何種模式基于從設(shè)備的通訊模式比如:M25P64,64M flas
7、h存儲(chǔ)器,支持SPI訪問(wèn),允許的SPI模式為: CPOL=0, CPHA=0 CPOL=1, CPHA=1如何配置及訪問(wèn)SPI設(shè)備?Stm32之SPI配置 Step 1:使能時(shí)鐘 因此,要使能的時(shí)鐘包括: PA口,AFIO口,SPI口Stm32之SPI配置 Step 1:使能時(shí)鐘 根據(jù)參考手冊(cè),以上端口隸屬于APB2總線,因此使能的庫(kù)函數(shù)可以為: RCC-APB2ENR |= RCC_APB2Periph_GPIOA; RCC-APB2ENR |= RCC_APB2Periph_AFIO; RCC-APB2ENR |= RCC_APB2Periph_SPI1Stm32之SPI配置 Step 2
8、:管腳配置 PA5-PA7 配置為復(fù)用功能 PA4配置為輸出功能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; 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_4; GPIO_InitStructu
9、re.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure);Stm32之SPI配置Step 3:spi參數(shù)配置根據(jù)SPI原理,可將器件配置為主設(shè)備和從設(shè)備。以基于SPI的flash訪問(wèn)為例,將STM32配置為主設(shè)備,外部存儲(chǔ)器flash型號(hào)為:M25P64Stm32之SPI配置 有關(guān)M25P64 64 Mbit of Flash memory 2.7 V to 3.6 V single supply voltage SPI bus compatible serial interface 75 MHz cl
10、ock rate (maximum) More than 100 000 Erase/Program More than 20-year data retention組織結(jié)構(gòu)包括: 8388608 字節(jié) 128 扇區(qū) 32768 頁(yè)Stm32之SPI配置 有關(guān)M25P64 支持的SPI模式: CPOL=0, CPHA=0 CPOL=1, CPHA=1所以,總是上升沿改變數(shù)據(jù),下降沿采集數(shù)據(jù)問(wèn)題: 如何去操作M25P64,包括讀,寫(xiě),擦除通過(guò)SPI總線,向器件寫(xiě)操作指令Stm32之SPI配置 Step 3:spi參數(shù)配置 所以,需要將stm32配置為主設(shè)備配置步驟 1. 通過(guò)SPI_CR1寄存器
11、的BR2:0位定義串行時(shí)鐘波特率。 2. 選擇CPOL和CPHA位,定義數(shù)據(jù)傳輸和串行時(shí)鐘間的相位關(guān)系3. 定義8位或16位數(shù)據(jù)幀格式。 4. 配置SPI_CR1寄存器的LSBFIRST位定義幀格式。 5. 如果需要NSS引腳工作在輸入模式。硬件模式下,在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平;在軟件模式下,需設(shè)置SPI_CR1寄存器的SSM位和SSI位。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位。 6. 設(shè)置MSTR位和SPE位。 Stm32之SPI配置配置步驟 1. 通過(guò)SPI_CR1寄存器的BR2:0位定義串行時(shí)鐘波特率。 SPI控制寄存器1(SPI_CR1)Stm32支持支
12、持18M Hz 波特率,波特率,M25P64支持最高支持最高75M Hz所以,若所以,若PCLK=72M Hz,則,則SPI1-CR1 |=0 x0008Stm32之SPI配置配置步驟 2. 設(shè)置CPOL和CPHA位,確定極性和相位關(guān)系 SPI控制寄存器1(SPI_CR1)根據(jù)根據(jù)M25P64要求,只能為:要求,只能為:0 x00h,或,或0 x03hStm32之SPI配置配置步驟 3. 定義8位或16位數(shù)據(jù)幀格式。 4. 配置SPI_CR1寄存器的LSBFIRST位定義幀格式。 SPI控制寄存器1(SPI_CR1)Stm32之SPI配置配置步驟 5. 如果需要NSS引腳工作在輸入模式。硬件模
13、式下,在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平;在軟件模式下,需設(shè)置SPI_CR1寄存器的SSM位和SSI位。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位。兩種選擇:硬件:固定主從關(guān)系 軟件:可改變Stm32之SPI配置配置步驟 5. 如果需要NSS引腳工作在輸入模式。硬件模式下,在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平;在軟件模式下,需設(shè)置SPI_CR1寄存器的SSM位和SSI位。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位。若NSS引腳工作在輸出模式,此時(shí),該設(shè)備不能工作于多主設(shè)備的網(wǎng)絡(luò)中,只能作為單一主設(shè)備進(jìn)行工作SPI控制寄存器2(SPI_CR2) Stm32之SP
14、I配置配置步驟 6. 設(shè)置MSTR位和SPE位。SPI控制寄存器1(SPI_CR1)Stm32之SPI配置完整配置代碼:unsigned short temp=0;temp |= 0 x0008;/定義波特率為18M Hztemp |= 0 x0003;/定義極性及相位關(guān)系,為11temp &=0 xF77F;/定義8位數(shù)據(jù)格式,且高位在前傳輸temp |= 0 x0200;/NSS引腳工作在軟件模式下temp |= 0 x0042;/配置為主模式,并啟動(dòng)SPISPI1-CR1=temp;接下來(lái)的問(wèn)題:數(shù)據(jù)如何發(fā)送和接收Stm32之SPI配置首先確定連接方式。1、硬件連線確定2、軟件配
15、置確定Stm32之SPI配置首先確定連接方式。1、BIDIMODE=0 BIDIOE=x RXONLY=0雙線雙向,即全雙工2、BIDIMODE=0 BIDIOE=x RXONLY=1用于多個(gè)從設(shè)備時(shí),禁止未被訪問(wèn)的設(shè)備發(fā)送數(shù)據(jù)Stm32之SPI配置首先確定連接方式。4、BIDIMODE=1 BIDIOE=x RXONLY=0雙向,只發(fā)送3、BIDIMODE=1 BIDIOE=x RXONLY=1雙向,此時(shí)只接收5、BIDIMODE=0 BIDIOE=x RXONLY=1單向,只接收Stm32之SPI配置全雙工模式全雙工模式(BIDIMODE=0并且并且RXONLY=0) 當(dāng)寫(xiě)入數(shù)據(jù)到SPI_
16、DR寄存器(發(fā)送緩沖器)后,傳輸開(kāi)始; 在傳送第一位數(shù)據(jù)的同時(shí),數(shù)據(jù)被并行地從發(fā)送緩沖器傳送到8位的移位寄存器中,然后按順序被串行地移位送到MOSI引腳上; 與此同時(shí),在MISO引腳上接收到的數(shù)據(jù),按順序被串行地移位進(jìn)入8位的移位寄存器中,然后被并行地傳送到SPI_DR寄存器(接收緩沖器)中。 對(duì)于發(fā)送器:MSB在先還是LSB在先,取決于SPI_CR1寄存器中的LSBFIRST位的設(shè)置。數(shù)據(jù)從發(fā)送緩沖器傳輸?shù)揭莆患拇嫫鲿r(shí)TXE標(biāo)志將被置位,如果設(shè)置了SPI_CR1寄存器中的TXEIE位,將產(chǎn)生中斷。 對(duì)于接收器來(lái)說(shuō),當(dāng)數(shù)據(jù)傳輸完成時(shí): 傳送移位寄存器里的數(shù)據(jù)到接收緩沖器,并且RXNE標(biāo)志被置位
17、。 如果設(shè)置了SPI_CR2寄存器中的RXNEIE位,則產(chǎn)生中斷。 Stm32之SPI配置SPI 數(shù)據(jù)寄存器(SPI_DR) Stm32之SPI配置完整配置代碼:unsigned short temp=0;temp |= 0 x0008;/定義波特率為18M Hztemp |= 0 x0003;/定義極性及相位關(guān)系,為11temp &=0 xF77F;/定義8位數(shù)據(jù)格式,且高位在前傳輸temp |= 0 x0200;/NSS引腳工作在軟件模式下temp &=0111 1011 1111 1111=0 x7BFF;/全雙工模式temp |= 0 x0042;/配置為主模式,并啟動(dòng)
18、SPI接下來(lái),即向SPI1-DR寄存器中寫(xiě)或讀數(shù)即可,實(shí)現(xiàn)發(fā)送和接收Stm32之SPI讀寫(xiě)SPI_FLASH_SendByte(0 x9F);SPI1-DR = 0 x9F;Temp0 = SPI_FLASH_SendByte(Dummy_Byte);Temp1 = SPI_FLASH_SendByte(Dummy_Byte);Temp2 = SPI_FLASH_SendByte(Dummy_Byte);Temp0 =SPI1-DRTemp1 =SPI1-DRTemp2 =SPI1-DR具體讀寫(xiě)數(shù)據(jù),需根據(jù)從設(shè)備的器件要求Stm32之SPI讀寫(xiě)M25P64操作The memory is org
19、anized as: 8388608 bytes (8 bits each) 128 sectors (512 Kbits, 65536 bytes each) 32768 pages (256 bytes each).每頁(yè)256個(gè)字節(jié) 256個(gè)頁(yè)組成一個(gè)扇區(qū) 128個(gè)扇區(qū)組成整個(gè)塊(bulk或block)允許寫(xiě)頁(yè),寫(xiě)不支持扇區(qū)和塊擦除只支持扇區(qū)和塊Flash中默認(rèn)為0,寫(xiě)操作其實(shí)是1-0改寫(xiě)對(duì)應(yīng)擦出操作,即是0-1的改寫(xiě)。Stm32之SPI讀寫(xiě)M25P64操作1、首先拉低片選,操作完成后,拉高片選SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(0 x9F);Tem
20、p0 = SPI_FLASH_SendByte(Dummy_Byte);Temp1 = SPI_FLASH_SendByte(Dummy_Byte);Temp2 = SPI_FLASH_SendByte(Dummy_Byte);SPI_FLASH_CS_HIGH();Stm32之SPI讀寫(xiě)M25P64操作2、寫(xiě)使能步驟:拉低片選,發(fā)送指令,拉高片選 SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(WREN); 0 x06 指令碼SPI_FLASH_CS_HIGH();Stm32之SPI讀寫(xiě)3、擦除操作步驟:寫(xiě)使能,拉低片選,發(fā)送擦除指令,發(fā)送擦除地址, 拉高片選SP
21、I_FLASH_WriteEnable();SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(SE);0 xD8,扇區(qū)擦除指令SPI_FLASH_SendByte(SectorAddr & 0 xFF0000) 16);SPI_FLASH_SendByte(SectorAddr & 0 xFF00) 8);SPI_FLASH_SendByte(SectorAddr & 0 xFF);SPI_FLASH_CS_HIGH();Stm32之SPI讀寫(xiě)4、寫(xiě)操作步驟:擦除目標(biāo)扇區(qū),寫(xiě)使能,拉低片選,發(fā)送寫(xiě)指令, 發(fā)送寫(xiě)地址,循環(huán)DR寄存器中寫(xiě)數(shù)據(jù)發(fā)送,
22、拉高片選SPI_FLASH_SectorErase(FLASH_SectorToErase); SPI_FLASH_WriteEnable();SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(WRITE);0 x02,扇區(qū)擦除指令SPI_FLASH_SendByte(SectorAddr & 0 xFF0000) 16);SPI_FLASH_SendByte(SectorAddr & 0 xFF00) 8);SPI_FLASH_SendByte(SectorAddr & 0 xFF); while (NumByteToWrite-) SPI_FLASH_SendByte(*pBuffer);pBuffer+; SPI_FLASH_CS_HIGH();Stm32之SPI讀寫(xiě)4、讀操作步驟:拉低片選,發(fā)送讀指令,發(fā)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保設(shè)施項(xiàng)目履約保證金合同范本2篇
- 個(gè)人二手挖掘機(jī)買(mǎi)賣(mài)合同(2024年版)4篇
- 二零二五餐飲企業(yè)年度簽單掛賬信用評(píng)估合同2篇
- 現(xiàn)代商業(yè)環(huán)境下對(duì)公業(yè)務(wù)團(tuán)隊(duì)發(fā)展策略
- 二零二五年度綠色環(huán)保儲(chǔ)藏室購(gòu)置協(xié)議書(shū)4篇
- 2025年度雛雞冷鏈物流配送與銷(xiāo)售合同范本4篇
- 二零二五年度棉花產(chǎn)業(yè)鏈上下游企業(yè)合作框架協(xié)議4篇
- 二零二五年度路燈照明設(shè)備安裝與售后服務(wù)合同4篇
- 二零二五年度大豆產(chǎn)業(yè)鏈環(huán)保治理項(xiàng)目合作協(xié)議4篇
- CFG樁施工服務(wù)合同(2024年度)版
- 三級(jí)人工智能訓(xùn)練師(高級(jí))職業(yè)技能等級(jí)認(rèn)定考試題及答案
- 華為全屋智能試題
- 第三單元名著導(dǎo)讀《經(jīng)典常談》知識(shí)清單 統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)
- 第十七章-阿法芙·I·梅勒斯的轉(zhuǎn)變理論
- 焊接機(jī)器人在汽車(chē)制造中應(yīng)用案例分析報(bào)告
- 合成生物學(xué)在生物技術(shù)中的應(yīng)用
- 中醫(yī)門(mén)診病歷
- 廣西華銀鋁業(yè)財(cái)務(wù)分析報(bào)告
- 無(wú)違法犯罪記錄證明申請(qǐng)表(個(gè)人)
- 大學(xué)生勞動(dòng)教育PPT完整全套教學(xué)課件
- 繼電保護(hù)原理應(yīng)用及配置課件
評(píng)論
0/150
提交評(píng)論