STM32_參考手冊(cè)-中文.pdf_第1頁(yè)
STM32_參考手冊(cè)-中文.pdf_第2頁(yè)
STM32_參考手冊(cè)-中文.pdf_第3頁(yè)
STM32_參考手冊(cè)-中文.pdf_第4頁(yè)
STM32_參考手冊(cè)-中文.pdf_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、nw切p 片tn用戶到23串行外設(shè)接口 (SPI)頁(yè)內(nèi)tf23.123.2小容量產(chǎn)品是指閃存存儲(chǔ)器容量在16K至32K?節(jié)之間的STM32F101XX. STM32F102XX和 STM32F103XX微控制器。中容量產(chǎn)品是指閃存存儲(chǔ)器容量在64K至128K字節(jié)之間的STM32F101XX. STM32F102XX 和STM32F103XX微控制器。大容量產(chǎn)品是指閃存存儲(chǔ)器容量在256K至512K字節(jié)之間的STM32F101XX和STM32F103XX微 控制器0互聯(lián)型產(chǎn)品是指STM32F105XX和STM32F107XX微控制器。除非特別說(shuō)明,本章描述的模塊適 用于整個(gè)STM32F10XXX

2、微控制器系列。SPI簡(jiǎn)介在大容量產(chǎn)屈和互聯(lián)型產(chǎn)品上,SPI接口可以配置為支持SPI協(xié)議或者支持fs音頻協(xié)議。SPI 接口默認(rèn)工作在SPI方式,可以通過(guò)軟件把功能從SPI模式切換到FS模式。在小容量和中容量產(chǎn)品上,不支持1%音頻協(xié)議。串行外設(shè)接口(SPI)允許芯片與外部設(shè)備以半/全雙工、同步、串行方式通信。此接口可以被配置 成主模式,并為外部從設(shè)備提供通信時(shí)鐘(SCK)o接口還能以多主配置方式工作。它可用于多種用途,包括使用一條雙向數(shù)據(jù)線的雙線單工同步傳輸,還可使用CRC校臉的可靠 通信。FS也是一種3引腳的同步串行接口通訊協(xié)議。它支持四種音頻標(biāo)準(zhǔn),包括飛利浦PS標(biāo)準(zhǔn), MSB和LSB對(duì)齊標(biāo)準(zhǔn),

3、以及PCM標(biāo)準(zhǔn)。它在半雙工通訊中可以工作在主和從2種模式下0 當(dāng)它作為主設(shè)備時(shí),通過(guò)接口向外部的從設(shè)備提供時(shí)鐘借號(hào)。警告: 由于SPI3/I2S3的部分引腳與JTAG引腳共享(SPI3_NSS/I2S3_WS與JTDI , SPI3_SCK/I2S3_CK與JTDO),因此這些引腳不受10控甬!器控制,龜們(在每次復(fù)位 后)疵默認(rèn)保留忘JTAG用途。如果用戶想把引腳配置給SPI3/I2S3,必須(在調(diào)試時(shí)) 關(guān)閉JTAG并切換至SWD接口,或者(在標(biāo)準(zhǔn)應(yīng)用時(shí))同時(shí)關(guān)閉JTAG和SWD接 口。詳見第8.3.5: JTAG/SWD復(fù)用功能重映射。SPI和Ps主要特征23,2.1 SPI 特征 3線

4、全雙工同步傳輸帶或不帶第三根雙向數(shù)據(jù)線的雙線單工同步傳輸 8或16位傳輸幀格式選擇主或從操作支持多主模式 8個(gè)主模式波特率預(yù)分頻系數(shù)(最大為fpCLK/2) 從模式頻率(最大為fPCLK/2)主模式和從模式的快速通信主模式和從模式下均可以由軟件或硬件進(jìn)行NSS管理:主/從操作模式的動(dòng)態(tài)改變叮編程的時(shí)鐘極性和相位 可編程的數(shù)據(jù)順序,MSB在前或LSB在前叮觸發(fā)中斷的專用發(fā)送和接收標(biāo)志 SPI總線忙狀態(tài)標(biāo)志支持可靠通信的硬件CRC一在發(fā)送模式下,CRC值可以被作為最后一個(gè)字節(jié)發(fā)送- 在全雙工模式中對(duì)接收到的最后一個(gè)字節(jié)自動(dòng)進(jìn)行CRC校驗(yàn)可觸發(fā)中斷的主模式故障、過(guò)載以及CRC錯(cuò)誤標(biāo)志支持DMA功能的

5、1字節(jié)發(fā)送和接收緩沖器:產(chǎn)生發(fā)送和接受請(qǐng)求23,2.2 PS 功能單工通信(僅發(fā)送或接收)主或者從操作 8位線性可編程預(yù)分頻器,獲得精確的音頻采樣頻率(8KHZ到96kHz) 數(shù)據(jù)格式可以是16位,24位或者32位音頻信道固楚數(shù)據(jù)包幀為16位(16位數(shù)據(jù)幀)或32位(16、24或32位數(shù)據(jù)幀)町編程的時(shí)鐘極性(穩(wěn)楚態(tài))從發(fā)送模式下的下溢標(biāo)志位和主/從接收模式下的溢出標(biāo)志位 16位數(shù)據(jù)寄存器用來(lái)發(fā)送和接收,在通道兩端外有一個(gè)寄存器支持的1綸協(xié)議:一 Fs飛利浦標(biāo)準(zhǔn)一 MSB對(duì)齊標(biāo)準(zhǔn)(左對(duì)齊)一 LSB對(duì)齊標(biāo)準(zhǔn)(右對(duì)齊)一 PCM標(biāo)準(zhǔn)(16位通逍幀上帶長(zhǎng)或短幀同步或者16位數(shù)據(jù)幀擴(kuò)展為32位通道幀

6、)數(shù)據(jù)方向總是MSB在先發(fā)送和接收都具有DMA能力主時(shí)鐘可以輸出到外部音頻設(shè)備,比率固立為256xFs(Fs為音頻采樣頻率) 在互聯(lián)型產(chǎn)品中,兩個(gè)I%模塊(I2S2和I2S3)有一個(gè)專用的PLL(PLL3),產(chǎn)生更加精準(zhǔn)得時(shí) 鐘/yw切*拳并帆用戶芋23.3SPI功能描述23.3.1概述SPI的方框圖見下圖。圖209 SPI框圖an4744該引腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù)。 該引腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù)。 從設(shè)備的輸入通常SPI通過(guò)4個(gè)引腳與外部器件相連: MISO:主設(shè)備輸入/從設(shè)備輸出引腳。 MOSI:主設(shè)備輸岀/從設(shè)備輸入引腳。 SCK:串口時(shí)鐘,作為主設(shè)備的

7、輸出, NSS:從設(shè)備選擇。這是一個(gè)可選的引腳,用來(lái)選擇主/從設(shè)備。它的功能是用來(lái)作為“片 選引腳",讓主設(shè)備可以單獨(dú)地與特定從設(shè)備通訊避免數(shù)據(jù)線上的沖突。從設(shè)備的NSS引 腳可以由主設(shè)備的一個(gè)標(biāo)準(zhǔn)I/O引腳來(lái)驅(qū)動(dòng)。一旦被使能(SSOE位),NSS引腳也可以作為 輸出引腳,并在SPI處于主模式時(shí)拉低:此時(shí),所有的SPI設(shè)備,如果它們的NSS引腳連 接 到主設(shè)備的NSS引腳,則會(huì)檢測(cè)到低電平,如果它們被設(shè)置為NSS硬件模式,就會(huì)自動(dòng) 進(jìn) 入從設(shè)備狀態(tài)。當(dāng)配置為主設(shè)備、NSS配置為輸入引腳(MSTR=1 > SSOE=0)時(shí),如果 NSS被拉低,則這個(gè)SPI設(shè)備進(jìn)入主模式失敗狀態(tài):

8、即MSTR位被自動(dòng)淸除,此設(shè)備進(jìn)入 從模式(參見)下圖是一個(gè)單主和單從設(shè)備互連的例子。/Wf第片釈用戶界圖210 單主和單從應(yīng)用主設(shè)備 最高位垠低位Slave最高位1_18位移位奇存器卜;J1 8位移位奇存器p1JJiMOSIMOSI rI-SPI時(shí)鐘1_iSCKSCK,最低位發(fā)生器NSS如果NSS由軟件管理 則不用這個(gè)引腳31147451 這里NSS引腳設(shè)g為輸入MOSI腳相互連接,MISO腳相互連接。這樣,數(shù)據(jù)在主和從之間串行地傳輸(MSB位在前)。 通信總是由主設(shè)備發(fā)起。主設(shè)備通過(guò)MOSI腳把數(shù)據(jù)發(fā)送給從設(shè)備,從設(shè)備通過(guò)MISO引腳回 傳數(shù)據(jù)。這意味全雙工通信的數(shù)據(jù)輸出和數(shù)據(jù)輸入是用同一

9、個(gè)時(shí)鐘信號(hào)同步的:時(shí)鐘信號(hào)由主 設(shè)備通過(guò)SCK腳提供。從選擇(NSS)腳管理有2種NSS模式: 軟件NSS模式:可以通過(guò)設(shè)置SPLCR1寄存器的SSM位來(lái)使能這種模式(見圖211).在 這種 模式下NSS引腳可以用作它用,而內(nèi)部NSS信號(hào)電平可以通過(guò)寫SPI_CR1的SSI 位來(lái)驅(qū)動(dòng) fiS件NSS模式,分兩種情況:一 NSS輸出被使能:當(dāng)STM32F10XXX工作為主SPI.并LNSS輸出已經(jīng)通過(guò)SPLCR2 寄存 器的SSOE位使能,這時(shí)NSS引腳被拉低,所有NSS引腳與這個(gè)主SPI的NSS 引腳相連并 配置為硬件NSS的SPI設(shè)備,將自動(dòng)變成從SPI設(shè)備。當(dāng)一個(gè)SPI設(shè)備需 要發(fā)送廣播數(shù)

10、據(jù),它必須拉低NSS信號(hào),以通知所有貝它的設(shè)備它是主設(shè)備;如果它不 能拉低NSS.這意味著總線上有另外一個(gè)主設(shè)備在通信,這時(shí)將產(chǎn)生一個(gè) 硬件失敗錯(cuò)誤一 n3s輸出被關(guān)閉:允許操作于多主環(huán)境。圖211 粳件/軟件的從選擇管理M4*'2016-08-09 09:13:27SSI位SSM位丄內(nèi)部NSSNSS外部引腳3114746時(shí)鐘信號(hào)的相位和極性SPLCR寄存器的CPOL和CPHA位,能夠組合成四種可能的時(shí)序關(guān)系。CPOL(時(shí)鐘極性)位控 制屋沒有數(shù)據(jù)傳輸時(shí)時(shí)鐘的空閑狀態(tài)電平,此位對(duì)主模式和從模式下的設(shè)備都有效。如果 CPOL被淸O, SCK引腳在空閑狀態(tài)保持低電平:如果CPOL被置匸,S

11、CK引腳在空閑狀態(tài)保 持髙電平。如果CPHA(時(shí)鐘相位)位被置T, SCK時(shí)鐘的第二個(gè)邊沿(CPOL位為0時(shí)就是下降沿,CPOL位為叩時(shí)就是上升沿)進(jìn)行數(shù)據(jù)位的采樣,數(shù)據(jù)在第二個(gè)時(shí)鐘邊沿被鎖存。如果CPHA位被淸O. SCK時(shí)鐘的第一邊沿(CPOL位為O時(shí)就是下降沿,CPOL位為T時(shí)就是上升沿)進(jìn)行數(shù)據(jù)位采樣,數(shù)據(jù)在第一個(gè)時(shí)鐘邊沿被鎖存。CPOL時(shí)鐘極性和CPHA時(shí)鐘相位的組合選擇數(shù)據(jù)捕捉的時(shí)鐘邊沿。圖212顯示了 SPI傳輸?shù)?4種CPHA和CPOL位組合。此圖可以解釋為主設(shè)備和從設(shè)備的SCK腳、MISO腳、MOSI腳宜接連接的主或從時(shí)序圖。注意:1.在改變CPOUCPHA位之前,必須清除S

12、PE位將SPi禁止。2. 主和從必須配置成相同的時(shí)序模式。3. SCK的空閑狀態(tài)必須和SPLCR1寄存器指定的極性一致(CP0L為1時(shí),空閑時(shí)應(yīng)上拉SCK為 高電旳 CPOL為0時(shí),空鬲時(shí)應(yīng)下拉SCK為低電平)。4. 數(shù)據(jù)幀格式(8位或16劭曲SPI_CR1寄存器的DFF位選擇,并且決定發(fā)送*接收的數(shù)據(jù)長(zhǎng)度。 圖212數(shù)據(jù)時(shí)鐘時(shí)序圖CP 0L=1CPHA =1CPOL = 0決整備):Mi須UWOQGDSt:由SPLCR1決定數(shù)據(jù)幀槪式是8位還是16位侏自蔦邂圈=00?NSS (至從設(shè)備)采樣時(shí)間點(diǎn)杲低位CPHA =0CPOL = 1CPOL 二 0垠低位毎高位MISO (來(lái)自從設(shè)備)1由SP

13、ICFd決定數(shù)據(jù)幀格決是g位還是仏位:NSS 至從設(shè)備采樣時(shí)間點(diǎn)Jt:這里顯示的是SPLCR1奇存器的LSBFIRST-0時(shí)的時(shí)序數(shù)據(jù)幀格式 根據(jù)SPLCR1寄存器中的LSBFIRST位,輸出數(shù)據(jù)位時(shí)可以MSB在先也可以 LSB在先。根據(jù)SPI_CR1寄存器的DFF位,每個(gè)數(shù)據(jù)幀可以是8位或是16位。所選擇的數(shù)據(jù) 幀格式對(duì)發(fā)送和/或接收都有效。23.3,2配置SPI為從模式在從模式下,SCK引腳用于接收從主設(shè)備來(lái)的串行時(shí)鐘。SPLCR1寄存器中BR2:0的設(shè)置不影 響數(shù)據(jù)傳輸速率。注:建議在主設(shè)備發(fā)送時(shí)鐘之前使能SP從設(shè)備,否則可能會(huì)發(fā)生意外的數(shù)據(jù)傳輸。在通信時(shí)鐘的第一個(gè)邊沿到來(lái)之前或正在進(jìn)行

14、的通信結(jié)束之前,從設(shè)備的數(shù)據(jù)寄存器必須就緒。在使能從設(shè) 備和主設(shè)備之前,通信時(shí)鐘的極性必須處于穩(wěn)定的數(shù)值。請(qǐng)按照以下步驟配置SPI為從模式:配置步驟1.設(shè)置DFF位以立義數(shù)據(jù)幀格式為8位或16位。2選擇CPOL和CPHA位來(lái)立義數(shù)據(jù)傳輸和串行時(shí)鐘之間的相位關(guān)系(見圖212)0為保證正確 的數(shù)據(jù)傳輸,從設(shè)備和主設(shè)備的CPOL和CPHA位必須配巻成相同的方式。3幀格式(SPI_CR1寄存器中的LSBFIRST位定義的DISB在前是工$8在前。必須與主設(shè) 備相同。4硬件模式下(參考從選擇(NSS)腳管理部分),在完整的數(shù)據(jù)幀(8位或16位)傳輸過(guò)程中, NSS引腳必須為低電平0在NSS軟件模式下,設(shè)

15、置SPLCR1寄存器中的SSM位并淸除 SSI 位。5.淸除MSTR位、設(shè)置SPE位(SPI_CR1寄存器),使相應(yīng)引腳工作于SPI模式下。在這個(gè) 配背中,MOSI引腳是數(shù)據(jù)輸入,MISO引腳是數(shù)據(jù)輸出。數(shù)據(jù)發(fā)送過(guò)程在寫操作中,數(shù)據(jù)字被并行地寫入發(fā)送緩沖器。當(dāng)從設(shè)備收到時(shí)鐘信號(hào),并且在MOSI引腳上出現(xiàn)第一個(gè)數(shù)據(jù)位時(shí),發(fā)送過(guò)程開始(譯注:此 時(shí)第一個(gè)位被發(fā)送出去)。余下的位(對(duì)于8位數(shù)據(jù)幀格式,還有7位:對(duì)于16位數(shù)據(jù)幀格 式,還有15位)被裝進(jìn)移位寄存器。當(dāng)發(fā)送緩沖器中的數(shù)據(jù)傳輸?shù)揭莆患拇嫫鲿r(shí),SPLSP寄 存器的TXE標(biāo)志被設(shè)置,如果設(shè)置了 SPLCR2寄存器的TXEIE位,將會(huì)產(chǎn)生中斷。

16、數(shù)據(jù)接收過(guò)程對(duì)于接收器,當(dāng)數(shù)據(jù)接收完成時(shí): 移位寄存器中的數(shù)據(jù)傳送到接收緩沖器,SPI_SR寄存器中的RXNE標(biāo)志被設(shè)置。 如果設(shè)置了 SPI_CR2寄存器中的RXNEIE位,則產(chǎn)生中斷。在最后一個(gè)采樣時(shí)鐘邊沿后,RXNE位被置'T,移位寄存器中接收到的數(shù)據(jù)字節(jié)被傳送到接收緩 沖器“當(dāng)讀SPLDR寄存器時(shí),SPI設(shè)備返回這個(gè)接收緩沖器的數(shù)值0讀SPI_DR寄存器時(shí),RXNE位被淸除。23.3.3配置SPI為主模式在主配置時(shí),在SCK腳產(chǎn)生串行時(shí)鐘。配置步驟1.通過(guò)SPI_CR1寄存器的BR2:0位立義串行時(shí)鐘波特率。2選擇Cp6l和CPHA位,定義數(shù)據(jù)傳輸和串行時(shí)鐘間的相位關(guān)系(見圖2

17、12)03設(shè)置DFF位來(lái)定義8位或16位數(shù)據(jù)幀格式。4配置SPLCR1寄存器的LSBFIRST位定義幀格式5如果需要NSS引腳工作在輸入模式,硬件模式下,在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連 接到高電平:在軟件模式下,需設(shè)置SPLCR1寄存器的SSM位和SSI位0如果NSS 引腳工作在輸出模式,則只需設(shè)置SSOE位。6必須設(shè)置MSTR位和SPE位(只當(dāng)NSS腳被連到高電平,這些位才能保持宜位)。在這個(gè) 配置中,MOSI引腳是數(shù)據(jù)輸出,而MISO引腳是數(shù)據(jù)輸入。數(shù)據(jù)發(fā)送過(guò)程當(dāng)寫入數(shù)據(jù)至發(fā)送緩沖器時(shí),發(fā)送過(guò)程開始。在發(fā)送第一個(gè)數(shù)據(jù)位時(shí),數(shù)據(jù)字被并行地(通過(guò)內(nèi) 部總線)傳入移位寄存器,而后串行地移出到

18、MOSI腳上;MSB在先還是LSB在先,取決于SPI CR1寄存器中的LSBFIRST位的設(shè)宜。數(shù) 據(jù)從一發(fā)送緩沖器傳輸?shù)揭莆患拇嫫鲿r(shí)TXE標(biāo)志將被置位,如果設(shè)置了 SPLCR1寄存器中的 TXEIE位,將產(chǎn)生中斷。數(shù)據(jù)接收過(guò)程對(duì)于接收器來(lái)說(shuō),當(dāng)數(shù)據(jù)傳輸完成時(shí):傳送移位寄存器里的數(shù)據(jù)到接收緩沖器,井且RXNE標(biāo)志被置位。 如果設(shè)置了 SPI_CR2寄存器中的RXNEiE位,則產(chǎn)生中斷。在最后采樣時(shí)鐘沿,RXNE位 被設(shè)置,在移位寄存器中接收到的數(shù)據(jù)字被傳送到接收緩沖器。讀SPLDR寄存器時(shí),SPI設(shè)備返回接收緩沖器中的數(shù)據(jù)。讀SPLDR寄存器將清除RXNE位0 旦傳輸開始,如果下一個(gè)將發(fā)送的數(shù)

19、據(jù)被放進(jìn)了發(fā)送 緩沖器,就可以維持一個(gè)連續(xù)的傳輸 流。在試圖寫發(fā)送緩沖器之前,需確認(rèn)TXE標(biāo)志應(yīng)該 為'仁在NSS硬件模式下,M設(shè)備的NSS輸入由NSS引腳控制或另一個(gè)由軟件驅(qū)動(dòng)的GPIO引腳控制。23,3.4配置SPI為單工通信SPI模塊能夠以兩種配置工作于單工方式: 1條時(shí)鐘線和1條雙向數(shù)據(jù)線: 1條時(shí)鐘線和1條數(shù)據(jù)線(只接收或只發(fā)送):1條時(shí)鐘線和1條雙向數(shù)據(jù)線(BIDIMODE=1)設(shè)置SPI_CR1寄存器中的BIDIMODE位而 啟用此模式。在這個(gè)模式下,SCK引腳作為時(shí)鐘,主設(shè)備使fflMOSI引腳而從設(shè)備使用MISO 引腳作為數(shù)據(jù)通信。傳輸?shù)姆较蛴蒘PLCR1寄存器里的B

20、IDIOE控制,當(dāng)這個(gè)位是叩的時(shí)候,顧據(jù)線是輸出,否則是輸入。1條時(shí)鐘和1條單向數(shù)據(jù)線(BIDIMODE=0)在這個(gè)模式卞,SPI模塊可以或者作為只發(fā)送,或者作為只接收。 只發(fā)送模式類似于全雙工模式(BIDIMODE=0, RXONLY=0):數(shù)據(jù)在發(fā)送引腳(主模式時(shí)是 MOSL從模式時(shí)是MISO)上傳輸,而接收引腳(主模式時(shí)是MISO、從模式時(shí)是MOSI)叮 以作為通用的I/O使用。此時(shí),軟件不必理會(huì)接收緩沖器中的數(shù)據(jù)(如果讀出數(shù)據(jù)寄存器, 它不 包含任何接收數(shù)據(jù))。 在只接收模式,可以通過(guò)設(shè)置SPI_CR2寄存器的RXONL丫位而關(guān)閉SPI的輸岀功能:此 時(shí),發(fā)送引腳(主模式時(shí)是MOSL從

21、模式時(shí)是MISO)被釋放,可以作為尖它功能使用。配置并使能SPI模塊為只接收模式的方式是: 在主模式時(shí),一旦使能SPI.通信立即啟動(dòng),當(dāng)清除SPE位時(shí)立即停止當(dāng)前的接收。在此模 式下,不必讀取BSY標(biāo)志,在SPI通信期間這個(gè)標(biāo)志始終為T。 在從模式時(shí),只要NSS被拉低(或在NSS軟件模式時(shí),SSI位為O)同時(shí)SCK有時(shí)鐘脈沖, SPI就一宜在接收。23,3.5數(shù)據(jù)發(fā)送與接收過(guò)程接收與發(fā)送緩沖器在接收時(shí),接收到的數(shù)據(jù)被存放在一個(gè)內(nèi)部的接收緩沖器中:在發(fā)送時(shí),在被發(fā)送之前,數(shù)據(jù) 將首先被存放在一個(gè)內(nèi)部的發(fā)送緩沖器中。對(duì)SPLDR寄存器的讀操作,將返回接收緩沖器的內(nèi)容;寫入SPLDR寄存器的數(shù)據(jù)將被

22、寫入 發(fā)送緩沖器中。主模式下開始傳輸 全雙工模式(BIDIMODE=0井且RXONLY=0)一 當(dāng)寫入數(shù)據(jù)到SPLDR寄存器(發(fā)送緩沖器)后,傳輸開始:一 在傳送第一位數(shù)據(jù)禹同時(shí),數(shù)據(jù)被并行地從發(fā)送緩沖器傳送到8位的移位寄存器 中,然后按順序被串行地移位送到MOSI引腳上:一 與此同時(shí),在MISO引腳上接收到的數(shù)據(jù),按順序被串行地務(wù)位進(jìn)入8位的移位寄存 器中,然后被并行地傳送到SPLDR寄存器(接收緩沖器)中。單向的只接收模式(BIDIMODE=0并且RXONLY=1)一 SPE=1時(shí),傳輸開始:一 只有接收器被激活,在MISO引腳上接收到的數(shù)據(jù),按順序被串行地移位進(jìn)入8位的 移 位寄存器中,

23、然后被并行地傳送到SPLDR寄存器(接收緩沖器)中。雙向模式,發(fā)送時(shí)(BIDIMODE=1并且BIDIOE=1)一 當(dāng)寫入數(shù)據(jù)到SPI_DR寄存器(發(fā)送緩沖器)后,傳輸開始:一 在傳送第一位數(shù)據(jù)禹同時(shí),數(shù)據(jù)被井行地從發(fā)送緩沖器傳送到8位的移位寄存器 中.然后按順序被串行地移位送到MOSI引腳上:一 不接收數(shù)據(jù)。雙向模式,接收時(shí)(BIDIMODE=1并且BIDIOE=0)一 SPET并且BIDIOE=0時(shí),傳輸開始;一 在MOSI引腳上接收到的數(shù)據(jù),按順序被串行地移位進(jìn)入8位的移位寄存器中,然后 被并行地傳送到SPLDR寄存器(接收緩沖器)中0一 不激活發(fā)送器,沒有藪據(jù)被串行地送到MOSI引腳上

24、。從模式下開始傳輸 全雙工模式(BIDIMODE=0并且RXONLY=0)一 當(dāng)從設(shè)備接收到時(shí)鐘信號(hào)并且第一個(gè)數(shù)據(jù)位出現(xiàn)在它的MOSI時(shí),數(shù)據(jù)傳輸開始, 隨后的數(shù)據(jù)位依次移動(dòng)進(jìn)入移位寄存器:一 與此同時(shí),在傳輸?shù)谝粋€(gè)數(shù)據(jù)位時(shí)發(fā)送緩沖器中的數(shù)據(jù)被并行地傳送到8位的移 位 寄存器,隨后被串行地發(fā)送到MISO引腳上C軟件必須保證在SPI主設(shè)備開始 數(shù)據(jù)傳輸Z前在發(fā)送寄存器中歸入要發(fā)送的數(shù)據(jù)。單向的只接收模式(BIDIMODE=0并且RXONLY=1)一 當(dāng)從設(shè)備接收到時(shí)鐘信號(hào)并且第一個(gè)數(shù)據(jù)位出現(xiàn)在它的MOSI時(shí),數(shù)搖傳輸開始, 隨后數(shù)據(jù)位依次移動(dòng)進(jìn)入移位寄存器:一 不啟動(dòng)發(fā)送器,沒有數(shù)據(jù)被串行地傳送

25、到MISO引腳上。雙向模式,發(fā)送時(shí)(BIDIMODE=1并且BIDIOE=1)一 當(dāng)從設(shè)備接收到時(shí)鐘信號(hào)并且發(fā)送緩沖器中的第一個(gè)數(shù)據(jù)位被傳送到MISO引腳上 的時(shí)候,數(shù)據(jù)傳輸開始:一在第一個(gè)數(shù)據(jù)位被傳送到MISO引腳上的同時(shí),發(fā)送緩沖器中要發(fā)送的數(shù)據(jù)被平行地 傳送到8位的移位寄存器中,隨后被串行地發(fā)送到MISO引腳上。軟件必須保證在 SPI主設(shè)備開始數(shù)據(jù)傳輸之前在發(fā)送寄存器中寫入要發(fā)送的數(shù)據(jù);一 不接收數(shù)據(jù)。雙向模式,接收時(shí)(BIDIMODE=1并且BIDIOE=0)一 當(dāng)從設(shè)備接收到時(shí)鐘信號(hào)并且第一個(gè)數(shù)據(jù)位出現(xiàn)在它的MOSI時(shí),數(shù)據(jù)傳輸開始:一 從MISO引腳上接收到的數(shù)據(jù)被串行地傳送到8位

26、的移位寄存器中,然后被平行地傳 送 到SPLDR寄存器(接收緩沖器h一 不啟動(dòng)發(fā)逢器,沒有數(shù)據(jù)被串行地傳送到MISO引腳上0處理數(shù)據(jù)的發(fā)送與接收牛數(shù)據(jù)從發(fā)送緩沖器傳送到移位寄存器時(shí)設(shè)置TXE標(biāo)志(發(fā)送緩沖器空)它表示內(nèi)部的發(fā)送 緩沖器可以接收下一個(gè)數(shù)據(jù);如果在SPLCR2寄存器中設(shè)置了 TXEIE位,則此時(shí)會(huì)產(chǎn)生一 個(gè)中斷;寫入SPLDR寄存器即可淸除TxE位。在寫入發(fā)送緩沖器之前,軟件必須確認(rèn)TXE標(biāo)志為仁 否則新的數(shù)據(jù)會(huì)覆蓋己經(jīng)在發(fā)送緩沖器 中的數(shù)據(jù)。he為0時(shí)發(fā)送新數(shù)據(jù)在采樣時(shí)鐘的垠后一個(gè)邊沿,當(dāng)數(shù)據(jù)被從移位寄存器傳送到接收緩沖器時(shí),設(shè)置RXNE標(biāo)志 (接收緩沖器非空):它表示數(shù)據(jù)已經(jīng)就

27、緒可以從SPLDR寄存器讀出:如果在SPLCR2寄 存器中設(shè)置了 RXNEIE位,則此時(shí)會(huì)產(chǎn)生一個(gè)中斷;忘出SPLDR寄存器即可淸除fNIE標(biāo) 志位。在一些配置中,傳輸最后一個(gè)數(shù)據(jù)時(shí),可以使用BS丫標(biāo)志等待數(shù)據(jù)傳輸?shù)慕Y(jié)束。主或從模式 下(BIDIMODE=0并且RXONLYxO)全雙工發(fā)送和接收過(guò)程模式 軟件必須遵循下述過(guò)程, 發(fā)送和接收數(shù)據(jù)(見圖213和圖214):1. 設(shè)置SPE位為T,使能SPI模塊:2在SPLDR寄存器中寫入第一個(gè)要發(fā)送的數(shù)據(jù),這個(gè)操作會(huì)淸除TXE標(biāo)志:3等待TXE=1,然后寫入第二個(gè)要發(fā)送的數(shù)據(jù)。等待RXNE=1,然后讀出SPLDR寄存器 并獲得第一個(gè)接收到的數(shù)據(jù),讀

28、SPLDR的同時(shí)淸除了 RXNE位。重復(fù)這些操作,發(fā) 送后續(xù) 的數(shù)據(jù)同時(shí)接收rvl個(gè)數(shù)據(jù):4等待RXNE=1,然后接收最后一個(gè)數(shù)據(jù):5等待TXE=1 在BSY=O Z后關(guān)閉SPI模塊。也可以在響應(yīng)RXNE或TXE標(biāo)志的上升沿 產(chǎn)生的中斷的處理程序中實(shí)現(xiàn)這個(gè)過(guò)程。圖213 主模式、全雙工模式K(BIDIMODE=0并且RXONLY=0)連續(xù)傳輸時(shí), TXE/RXNDBSY的變化示意圖上«大的制 f CPOL=LCPHA=1SCKMISO/MSI (輸出)injuumnnnittWi 瞥1bOlbl |b2b3|b4|b5be|b7juuuinnnjmmuuinnr薩嚴(yán) ¥ I

29、 q 曲 r曾3.b0|b1 |b2j2|g|b5|b6|bqg|bT 卜2|詞詁匕5|誡b7TXE標(biāo)忠發(fā)送沖2 E入SPI DR)OxF2OxF3BSY標(biāo)志itlfetn 91P«1.OxA1M|b1 |b2b3|t>4|b5|be|b7MISO.WSI (箱入)RXNE標(biāo)左7接ttfig沖器 (ifcaj SPLDRAOxFl i TXE=1 « SPLDR «后算入 OxF2 I ¥SPI_DnItt»3qxA3|b2|b3|b4|b5|b6|b7bo|a |b2b3| M|b5|b6| Me«26cA2OxAl)o>

30、;A3ttfl需特RXNE>1«f;從 SPLDR瀆岀OxAlttfT 等 «TXEsI然麻h入Oxf3¥ SPLDR軟伴鄒待RXMDRMidi oxA2軟件尋掙RXNE=1然R從 SPl.DRyC 出 OxA30*17343nw切p 片in用戶到圖214從模式、全雙工模式下(BIDIMODEn并且RXONLYR)連續(xù)傳輸時(shí), TXE/RXNE/BSY的變化示意圖從極式的制f CPOL=t CPHA=1SCKMISO/MOSITXE敕UH Oxf(山U件設(shè)X井山 KftiKNcbO|b1 |bf|b3|b4|b5|S0JUUUUUUUlft叫2 嚴(yán)F2bO|

31、bl |M jMjb4bs|beb7Ljuuinjuinrg«3«yxF3b0|bl |zb3b4|b5be| b7發(fā)送4沖S 入 SPI-DR)xFl0xF2OxF3BSY悴忑MISO/MOSHK 入)由堆件3V和清m |b2|b3b4|bi|g|t>7ttW20gRXNE杯志7按收嫌沖 (讀出SPI嗎入 OxFlTXEmI壬SPI OR燃后耳入0xF2*¥ SPLDR由峽frag/、y / oxAitt件爭(zhēng)伶TXEmIfX0xA3ttft零旳RXNE«1«)C;從SPLDR fi后寫入0xF3ittUCxAl VSPI OR«

32、;憐3»RXNE=1然C從SPLOft讀出0xA2tt件籌憐AXNE-IJttJbJykSPI_DR債出6(A3flil7344頁(yè)內(nèi)tf只發(fā)送過(guò)程但I(xiàn)DIMODE=0并且RXONLYxO)在此模式下,傳輸過(guò)程可以簡(jiǎn)要說(shuō)明如下,使用BS丫位等待傳輸?shù)慕Y(jié)束(見圖215和圖216):1.設(shè)苣SPE位為T,使能SPI模塊:2在SPLDR寄存器中寫入第一個(gè)要發(fā)送的數(shù)據(jù),這個(gè)操作會(huì)淸除TXE標(biāo)志:3.等待TXE=1,然后寫入第二個(gè)要發(fā)送的數(shù)據(jù)。重復(fù)這個(gè)操作,發(fā)送后續(xù)的數(shù)據(jù):4寫入最后一個(gè)數(shù)據(jù)到SPLDR寄存器之后,等待TXE=1:然后等待BSY=0.這表示最后一 個(gè)數(shù)據(jù)的傳輸已經(jīng)完成。也可以在響

33、應(yīng)TXE標(biāo)志的上升沿產(chǎn)生的中斷的處理程序中實(shí)現(xiàn)這個(gè)過(guò)程。注:1 對(duì)于不連續(xù)的傳輸,在寫入SPLDR寄存器的操作與設(shè)置BSY位之間有2個(gè)APB時(shí)鐘周期的延 遲,因此在只發(fā)送模式下,寫X最后一個(gè)數(shù)據(jù)后,最好先等待TXEJ 然后再等待BSY=0。2只發(fā)送模式下,在傳輸2個(gè)數(shù)據(jù)之后,由于不會(huì)讀出接收到的數(shù)據(jù),SPLSR寄存器中的OVR位 會(huì)變?yōu)槿剩ㄗg注:軟件不必理會(huì)這個(gè)OVR標(biāo)志位)圖215主設(shè)備只發(fā)送模式(BIDIMODE=0并且RXONLY=0) F連續(xù)傳輸時(shí)TXE/BSY變化 示意圖I HS式的例子CPOL1 CPHAwlSCKupjumnnmmnnnnTumjuumjmjJ 型批=OxFla:

34、iK3.0xF3MISOfMOSKMlH)bo|b( bg|b3|b4jt5bs|b7bo嚴(yán)2二嚴(yán)#IM b2|b3|b4|p5p>6b7t>0|bt | b2 | 昭| 2卜5 * b7TXE)t-£發(fā)送殂沖(9入SPI DR)山件設(shè)£BSY杯志軟ft 弓入(bcF, ¥$PLDR曲仗件設(shè)X幷由由ttftSE軟?待TXE-1TXE-t«JR IJ入0xF2 然后寫入0tf3:¥SPLDR至SPLOR |0xF3由純件tt件為抽BSY=OAI1734&圖216從設(shè)備只發(fā)送模式(BIDIMODE=0并且RXONLY=0) K連

35、續(xù)傳輸時(shí),TXE/BSY變化示 意圖從«式下的例F CPOL=i.CPHA=tuumnnnnjuuuuuuuwbOpg |b2b3|b4|b5|M|b7|boh( |b2|b3|M|b5|M?7曲帔件設(shè)X井由軟件訴SCKLnjumfuuu牧撇3 « 8P3bO |bi |bg |bJ l&s |bs7TXE標(biāo)志u發(fā)送«沖(tJXSPI_DR)IMBSY標(biāo)怎軟fl軟件等伶I;入 Ox"TX“1SPI OR 然 JK 寫入 OxF2 ¥ SPLDRt_山件設(shè)X0xF2Txe=i !REi 耳入 0xF3 5SPL0R曲址件9«Ox

36、F3tt件尋拎BSY-00117346雙向發(fā)送過(guò)程但I(xiàn)DIMODE=1并且BIDIOE=1)在此模式下,操作過(guò)程類似于只發(fā)送模式,不同的是:在使能SPI模塊之前,需要在SPI_CR2 寄存器中同時(shí)設(shè)置BIDIMODE和BIDIOE位為'仁 單向只接收模式(BIDIMODE=0菲且RXONLY=1)在此模式下,傳輸過(guò)程可以簡(jiǎn)要說(shuō)明如下(見):使能SPI模塊:立刻產(chǎn)生SCK時(shí)鐘信號(hào),在關(guān)閉SPI(SPE=O)Z前,不斷地接收串行數(shù)據(jù): 當(dāng)SPI主設(shè)備拉低NSS信號(hào)并產(chǎn)生SCK時(shí)鐘時(shí),接收串行數(shù)據(jù)。1. 在SPl_CR2寄存器中,設(shè)置RXONL丫 =1;2. 設(shè)置 SPE=1,a) 主模式下

37、,b) 從模式下,3. 等待RXNE=1.然后讀出SPI_DR寄存器以獲得收到的數(shù)據(jù)(同時(shí)會(huì)淸除RXNE位)。重復(fù) 這個(gè)操作接收所有數(shù)據(jù)。也可以在響應(yīng)RXNE標(biāo)志的上升沿產(chǎn)生的中斷的處理程序中實(shí)現(xiàn)這個(gè)過(guò)程。如果在最后一個(gè)數(shù)據(jù)傳輸結(jié)束關(guān)閉SPI模塊,請(qǐng)按照第23.3.8節(jié)的建議操作。圖217只接收模式(BIDIMODE=0并且RX0NLY=1)下連續(xù)傳輸時(shí),RXNE變化示意圖W于«W: CPOLT.CPHAT.RXONL丫曰SCKMISOWSHtt 入)uuuuuinjummnjinjuumjumjwi&Wl«OxAII&M2«0xA2 IBtK3&

38、#187;OxA3ibobffb2fa3b4b5b6b7|bo|bl b2b3| b4|b5 應(yīng)| b7|b0 |b1 b? |b3 加飛怡t)7RXNE標(biāo)占由皎ftag 八由tt件清隱接收«沖a(lisll SPI DR)X OxA1JttflWRXNE-1I躬后從SPI DA it岀OxA)I然后從 SPLDRi#HlOxA2j 0xA2軟件 TfftRXNE-1 «后從SPI OR讀出OxA3YToxASati7M7單向接收過(guò)程(BIDIMODET并且BIDIOExO)在此模式下,操作過(guò)程類似于只接收模式,不同的是:在使能SPI模塊之前,需要在SPLCR2 寄存器中設(shè)

39、置BIDIMODE為T并涓除BIDIOE位為連續(xù)和非連續(xù)傳輸 當(dāng)在主模式下發(fā)送數(shù)據(jù)時(shí),如果軟件足夠快能夠在檢測(cè)到每次TXE的上升沿(或TXE中斷), 并立即在正在進(jìn)行的傳輸結(jié)束之前寫入SPLDR寄存器,則能夠?qū)崿F(xiàn)連續(xù)的通信:此時(shí),在每 個(gè)數(shù)據(jù)項(xiàng)的傳輸之間的SPI時(shí)鐘保持連續(xù),H時(shí)BSY位不會(huì)被清除。如果軟件不夠快,則會(huì)導(dǎo)致不連續(xù)的通信:這時(shí),在每個(gè)數(shù)據(jù)傳輸之間會(huì)被清除(見下圖)。在主 模式的只接收模式下(RXONLY=1).通信總是連續(xù)的,而且BSY標(biāo)志始終為叩。在從模式卜,通信的連續(xù)性由SPI主設(shè)備決出。不管怎樣,即使通信杲連續(xù)的,BSY標(biāo)志會(huì)在每 個(gè)數(shù)據(jù)項(xiàng)之間至少有個(gè)SPI時(shí)鐘周期為低(見

40、圖216)圖218 非連續(xù)傳輸發(fā)送(BIDIMODE=0并且RXONLY=0)時(shí),TXE/BSY變化示意圖例子CPOL=1.CPHA=1scKLnmuinjuimmnjuuui廠pumnnnnf1F*?.嚴(yán)勺.1 I 玫 放性 I 節(jié) 3:O£3 IMOSI(輸;I"|botn |tg|b3b4|b5|w|b7j |Mbi |tg|wb4b5|t6|b7| |bo|bi |b2gb4b5|be|m|發(fā)送級(jí)沖V (耳入SP LDRI 一ABSY 標(biāo)£OxFl0xF2oxfaTXERftlfMBSy=O7Rtt耳入OrflVSPI DRttftT?ttTXE-1 .

41、Nt 較晚巧入OmF2乍SPf DRttft3傳TXE=1 fltt «l!feAOxF3 至 SPl.DRMl 734823.3.6 CRC 計(jì)算CRC校驗(yàn)用于保證全雙工通信的可靠性。數(shù)據(jù)發(fā)送和數(shù)據(jù)接收分別使用單獨(dú)的CRC i|算器。 通過(guò)對(duì)每一個(gè)接收位進(jìn)行可編程的多項(xiàng)式運(yùn)算來(lái)計(jì)算CRC. CRC的計(jì)算是在由SPLCR1寄存 器中CPHA和CPOL位泄義的采樣時(shí)鐘邊沿進(jìn)行的。注骯 該SPI接n提供了兩種CRC計(jì)算方法,取決于所選的發(fā)送和/或接收的數(shù)據(jù)幀格式:8位數(shù)據(jù)幀 采用CR8: 16位數(shù)據(jù)幀釆用CRC16。CRC 11算是通過(guò)設(shè)置SPI_CR1寄存器中的CRCEN位啟用的。設(shè)置

42、CRCEN位時(shí)同時(shí)復(fù)位CRC 寄存器(SPLRXCRdh 和 SPITXCRCR)。當(dāng)設(shè)程了 SPLCR1 的 CRCNEXT 位,SPLTXCRCR 的?J容嵌當(dāng)前字節(jié)發(fā)送之后發(fā)出。在傳輸SPLTXCRCR的內(nèi)容時(shí),如果在移位寄存器中收到的數(shù)值與SPLRXCRCR的內(nèi)容不 匹配,則SPLSR寄存器的CRCERR標(biāo)志位被置1 °如果在TX緩沖器中還有數(shù)據(jù),CRC的數(shù)值僅在數(shù)據(jù)字節(jié)傳輸結(jié)朿后傳送。在傳輸CRC期 間,CRC訃算器關(guān)閉,寄存器的數(shù)值保持不變。注意:請(qǐng)參考產(chǎn)品說(shuō)明書,以確認(rèn)有此功能(不是所有型號(hào)都有此功能)°SPI通信可以通過(guò)以下步驟使用CRC:設(shè)置 CPOL、C

43、PHA、LSBFirst、BR、SSM、SSI 和 MSTR 的值; 在SPI_CRCPR寄存器輸入多項(xiàng)式;通過(guò)設(shè)置SPI_CR1寄存器CRCEN位使能CRC訃算,該操作也會(huì)晴除寄存器 SPLRXCRCR 和 SPLTXCRC: 設(shè)£sPI_CR1寄存器&JSPE位啟動(dòng)SPI功能;啟動(dòng)通信并且維持通信,直到只剩最后一個(gè)字節(jié)或者半字:在把最后一個(gè)字節(jié)或半字寫進(jìn)發(fā)送緩沖器時(shí),設(shè)置SPLCR1的CRCNext位,指示fig件在發(fā) 送完成最后一個(gè)數(shù)據(jù)之后,發(fā)送CRC的數(shù)值。在發(fā)送CRC數(shù)值期間,停止CRC il-算:當(dāng)最后一個(gè)字節(jié)或半字被發(fā)送后,SPI發(fā)送CRC數(shù)值,CRCNext位

44、被淸除。同樣,接收到 的CRC與SPLRXCRCR值進(jìn)行比較,如果比較不相配,貝ij設(shè)置SPLSR上的CRCERR標(biāo) 志位,當(dāng)設(shè)f SPI CR2寄存器的ERRIE時(shí),則產(chǎn)生中斷。/yw切*拳并帆用戶芋注筈 當(dāng)SPI模塊處丁從設(shè)備模式時(shí),請(qǐng)注意在時(shí)鐘穩(wěn)定之后再使能CRC計(jì)算,否則可能會(huì)得到錯(cuò)誤 的CRC計(jì)算結(jié)果。事實(shí)上,只耍設(shè)置了 CRCEN位,只要在SCK引腳上有輸入時(shí)鐘,不管SPE 位的狀態(tài),都會(huì)進(jìn)行CRC的計(jì)算。當(dāng)SPI時(shí)鐘頻率較高時(shí),用戶在發(fā)送CRC時(shí)必須小心。在CRC傳輸期間.使用CPU的時(shí)間應(yīng) 盡可能少:為了避免在接收最后的數(shù)據(jù)和CRC時(shí)出錯(cuò),在發(fā)送CRC過(guò)程中磁禁止函數(shù)調(diào)用。 必

45、須在發(fā)送/接收最后一個(gè)數(shù)據(jù)之前完成設(shè)置CRCNEXT位的操作。當(dāng)SPI時(shí)鐘頻率較高時(shí),因?yàn)镃PU的操作會(huì)影響SPI的帶寬,建議采用DMA模式以避免SPI降 低的速度。當(dāng)STM32F10XXX配置為從模式并 11使用了 NSS硬件模式,NSS引腳應(yīng)該在數(shù)據(jù)傳輸和CRC傳輸 期間保持為低。當(dāng)配置SPI為從模式并且使用CRC的功能,即使NSS引腳為髙時(shí)仍然會(huì)執(zhí)行CRC的il算(譯 注:當(dāng)NSS信號(hào)為高時(shí),如果SCK引腳上有時(shí)鐘脈沖,則CRC訃算會(huì)繼續(xù)執(zhí)行)。例如:當(dāng) 主設(shè)備交替地與多個(gè)從設(shè)備進(jìn)行通信時(shí),將會(huì)出現(xiàn)這種情況(譯注:此時(shí)要想辦法避免CRC的 誤操作)。在不選中一個(gè)從設(shè)備(NSS信號(hào)為高)轉(zhuǎn)

46、換到選中一個(gè)新的從設(shè)備(NSS信號(hào)為低)的時(shí)候,為了保 持主從設(shè)備端下次CRC訃算結(jié)果的同步,應(yīng)該淸除主從兩端的CRC數(shù)值。按照下述步驟淸除CRC數(shù)值:1.關(guān)閉 SPI 模塊(SPE=O);2淸除CRCEN位為3設(shè)置CRCEN位為4使能SPI模塊(SPE=1)o23.3.7 狀態(tài)標(biāo)志應(yīng)用程序通過(guò)3個(gè)狀態(tài)標(biāo)忠可以完全監(jiān)控SPI總線的狀態(tài)。發(fā)送緩沖器空閑標(biāo)志(TXE)此標(biāo)志為T時(shí)表明發(fā)送緩沖器為空,可以寫下一個(gè)待發(fā)送的數(shù)據(jù) 進(jìn)入緩沖器中。當(dāng)寫入SPLDR時(shí),TXE標(biāo)志被清除。接收緩沖器非空(RXNE)此標(biāo)志為'1'時(shí)表明在接收緩沖器中包含有效的接收數(shù)據(jù)。讀SPI 數(shù)據(jù)寄存器可以淸除

47、此標(biāo)志。忙(Busy)標(biāo)志BS丫標(biāo)志由硬件設(shè)置與$青除(寫入此位無(wú)效 果),此標(biāo)志表明SPI通借層的狀態(tài)。當(dāng)它被設(shè)置為'1'時(shí),表明SPI正忙于通信,但有一個(gè)例外:在主模式的雙向接收模式下 (MSTR=1. BDMT并且BDOE=0),在接收期間BSY標(biāo)忠保持為低在軟件要關(guān)閉SPI模塊并進(jìn)入停機(jī)模式(或關(guān)閉設(shè)備時(shí)鐘)之前,可以使用BSY標(biāo)志檢測(cè)傳輸是 否結(jié)束,這樣可以避免破壞最后一次傳輸,因此需要嚴(yán)格按照下述過(guò)程執(zhí)行。BSY標(biāo)志還可以用于在多主系統(tǒng)中避免寫沖突。除了主模式的雙向接收模式(MSTR=1. BDM"并且BDOE=0),當(dāng)傳輸開始時(shí) BSY標(biāo)志 被置叩。以下

48、情況時(shí)此標(biāo)志將被淸除為O:肖傳輸結(jié)束(主模式下,如果是連續(xù)通信的情況例外):當(dāng)關(guān)閉SPI模塊;當(dāng)產(chǎn)生主模式失效(M0DF=1)如果通信不是連續(xù)的,則在毎個(gè)數(shù)據(jù)項(xiàng)的傳輸之間,BS丫標(biāo)志為低"當(dāng)通信是連續(xù)時(shí): 主模式下:在整個(gè)傳輸過(guò)程中,BSY標(biāo)志保持為高:從模式下:在每個(gè)數(shù)據(jù)項(xiàng)的傳輸之間,BSY標(biāo)志在一個(gè)SPI時(shí)鐘周期中為低。注不耍使用BSY標(biāo)志處理每一個(gè)數(shù)據(jù)項(xiàng)的發(fā)送和接收,最好使用TXE和RXNE標(biāo)志。23.3.8 關(guān)閉 SPI當(dāng)通訊結(jié)束,町以通過(guò)關(guān)閉SPI模塊來(lái)終止通訊。清除SPE位即可關(guān)閉SPIo在某些配置下,如果再傳輸還未完成時(shí),就關(guān)閉SPI模塊并進(jìn)入停機(jī)模式,則可能導(dǎo)致當(dāng)前的

49、傳 輸被破壞,而且BSY標(biāo)志也變得不可信。為了避免發(fā)生這種情況,關(guān)閉SPI模塊時(shí),建議按照下述步驟操作:在主或從模式下的全雙工模式(BIDIMODE=0, RXONLY=0)1.等待RXNET并接收?qǐng)?bào)后一個(gè)數(shù)據(jù);2等待TXE=1:3. 等待 BSY=0:4. 關(guān)閉SPI(SPE=0).最后進(jìn)入停機(jī)模式(或關(guān)閉該模塊的時(shí)鐘)。在主或從模式下的單向 只發(fā)送模式(BIDIMODE=0, RXONLY=0)或雙向的發(fā)送模式(BIDIMODE=1. BIDIOE=1)在SPI_DR寄存器中寫入最后一個(gè)數(shù)據(jù)后:1.等待 TXE=1i2等待BSY=0;3.關(guān)閉SPI(SPE=0).最后進(jìn)入停機(jī)模式(或關(guān)閉該

50、模塊的時(shí)鐘L在主或從模式下的單向 只接收模式(MSTR=1, BIDIMODExO, RXONLY=1)或雙向的接收模式(MSTR=1, BIDIMODE=1> BIDIOE=0)這種情況需要特別地處理,以保證SPI不會(huì)開始一次新的傳輸:1.等待倒數(shù)第二個(gè)(第nJ個(gè))RXNE=1:2在關(guān)閉SPI(SPE=O)Z前等待一個(gè)SP1時(shí)鐘周期(使用軟件延遲);3在進(jìn)入停機(jī)模式(或關(guān)閉該模塊的時(shí)鐘)之前等待最后一個(gè)RXNE=1o注:在主模式下的單向只發(fā)送模式(MSTRT, BDM=1. BDOE曲時(shí),傳輸過(guò)程中BSY標(biāo)志始終為低。在從模式下的只接收模式(MSTR=O. BIDIMODE=0, RX

51、ONLY=1)或雙向的接收模 式(MSTR=O, BIDIMODE=1> BIDIOE=0)1.町以在任何時(shí)候關(guān)閉SPI(SPE=0). SPI會(huì)在當(dāng)前的傳輸結(jié)束后被關(guān)閉;2如果希望進(jìn)入停機(jī)模式,在進(jìn)入停機(jī)模式(或關(guān)閉該模塊的時(shí)鐘)之前必須首先等待 BSY=Oo23.3.9 利用DMA的SPI通信為了達(dá)到最大通借速度,需要及時(shí)往SPI發(fā)送緩沖器填數(shù)據(jù),同樣接收緩沖器中的數(shù)據(jù)也必須 及時(shí)讀走以防止溢出。為了方便離速率的數(shù)據(jù)傳輸,SPI實(shí)現(xiàn)了一種采用簡(jiǎn)單的請(qǐng)求/應(yīng)答的 DMA機(jī)制.當(dāng)SPI_CR2寄存器上的對(duì)應(yīng)使能位被設(shè)置時(shí),SPI模塊可以發(fā)出DMA傳輸請(qǐng)求。發(fā)送緩沖器 和接收緩沖器亦有各自

52、的DMA請(qǐng)求(見)。 發(fā)送時(shí),在每次TXE被設(shè)置為時(shí)發(fā)出DMA請(qǐng)求,DMA控制器則寫數(shù)據(jù)至SPI_DR寄存 器,TXE標(biāo)志因此而被淸除0 接收時(shí),在每次RXNE被設(shè)置為'r時(shí)發(fā)出DMA請(qǐng)求,DMA控制器則從SPI_DR寄存器讀出 數(shù)據(jù),RXNE標(biāo)志因此而被淸除。當(dāng)只使用SPI發(fā)送數(shù)據(jù)時(shí),只需使能SPI的發(fā)送DMA通道0此時(shí),因?yàn)闆]有讀取收到的數(shù) 據(jù),OVR被置為叩(譯注:軟件不必理會(huì)這個(gè)標(biāo)志)。當(dāng)只使用SPI接收數(shù)據(jù)時(shí),只需使能SPI的接 收DMA通道。MMnw切p 片in用戶到在發(fā)送模式下,當(dāng)DMA已經(jīng)傳輸了所有要發(fā)送的數(shù)據(jù)(DMAJSR寄存器的TCIF標(biāo)志變?yōu)楸澹?后,可以通過(guò)監(jiān)視

53、BSY標(biāo)志以確認(rèn)SPI通信結(jié)束,這樣可R避免在關(guān)閉SPI或進(jìn)入停止模式 時(shí),破壞最后一個(gè)數(shù)據(jù)的傳輸.因此軟件需要先等待TXE=1.然后等待BSY=0.注:在不連續(xù)的通信中,在寫數(shù)據(jù)到SP'JDR的操作與BSY位彼豐為丫之間,有2個(gè)APB時(shí)鐘周期 的延遲,剛匕在寫完最后一不破據(jù)后需要先等待TXEi再等待BSY"。圖219使用DMA發(fā)送Mf配CPOUl.CPHA«1邸tnnjuuumrLruinjuuuumjuuuuinj頁(yè)內(nèi)tfKJK 1 bOxFiMISCVMOSIfSftdi)b0klb2| b3 b4|b5| be| b7bo|b1 |b2|t33jb4|bS|

54、b6|b7|bO|t>l|l>2|t>3|t>4|l>5|be|l?7TXEHi£nrti«件設(shè)X f井由5*虧aff清BSY標(biāo)志DMA詁求Six級(jí)沖S (弓入SPI DR)DMA 寫入 SPLDlHDMA TCIF 標(biāo)& (DMAft綸丸成由件清除a0xF20xF3lUWn S富軟件第hBSYSDM A佟輸己經(jīng)處蟲 不«艸會(huì)«個(gè)請(qǐng)*ttfraiKSPifiiDMA 發(fā)OM寫入DMAy 入DWA耳入DMA伎輸*A Mttft等待送 3個(gè)iS«i¥ft«2平ftK3?(DMA ISR 中T

55、Ci"nTXE=1廉.焦席使施SPISPINOR1 SPLDRSPI DR力、rtl軟什«除6*17349圖220使用DMA接收倂 f配a: CPOL=1.CPHA=1mnnjuuiRjinRnnnniirIE*廣曾'I?*?警¥MISO/MOSI (綸入)|bo|tM |b2|b3|b4bs|b6|b7jbo|tn |M|b3|b4|b5b6|b7LTUiruiRjinrbobi b2|t>3b4|bS|b6M|RXNE杯七ihttniSSDMA濟(jì)求損枚«沖8 (迪 MS PI DR J.DMA 講取 SPLDRDMA TCIF 標(biāo)店 (DMA件*絡(luò)東)fl0xA20xA3ftftIWBSPi 的 OMAtt 收通UtU笊收3個(gè)&W «后便能SPIDMAJASP1_DR0MAUSP1 DR itJURMaDMA 從 SP1_DR itUtSlKJOhWfVttfA* (OMAJSR 中 TCIF-"ail 7帶CRC的DMA功能 當(dāng)便能SPI使用CRC檢驗(yàn)并且啟用DMA模式時(shí),在通信結(jié)束時(shí), CRC字節(jié)的發(fā)送和接收是自動(dòng)完成的。數(shù)據(jù)和CRC

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論