當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]Ⅰ、寫在前面SPI(Serial Perripheral Interface)串行外設(shè)通信接口,主要實現(xiàn)設(shè)備(主從)之間的通信。硬件上由CS、SCK、MISO、MOSI四根通信線連接而成。關(guān)于SPI更多介紹不再詳細描述,本文主要以STM32F103為主機、

Ⅰ、寫在前面

SPI(Serial Perripheral Interface)串行外設(shè)通信接口,主要實現(xiàn)設(shè)備(主從)之間的通信。硬件上由CS、SCK、MISO、MOSI四根通信線連接而成。關(guān)于SPI更多介紹不再詳細描述,本文主要以STM32F103為主機、W25Q16為從機進行SPI通信實驗。

本文將提供STM32硬件SPI、軟件模擬SPI兩實例工程代碼供大家參考、掌握兩種方式的區(qū)別。

STM32硬件SPI:控制簡單、運行效率高、使用方便等。

軟件模擬SPI:移植性強,只需要簡單修改接口,就能在其他MCU芯片(如:51、430等)上使用。

實例實驗效果:

兩個實例SPI通信控制方式不一樣,但實驗效果是一樣的。

W25Q16設(shè)備ID:

上電,讀取W25Q16設(shè)備ID,并通過串口打印出來;

寫數(shù)據(jù):

SFLASH_WriteNByte((uint8_t*)"ABCDEF", 0, 6); 通過該函數(shù)在W25Q16的0地址處 連續(xù)寫入6字節(jié)“ABCDEF”數(shù)據(jù)。(測試的時候:第一次下載之后讓程序運行一次,即寫入W25Q16數(shù)據(jù)。再將該函數(shù)屏蔽、下載。斷電重新讓程序運行看讀出來的數(shù)據(jù)是否是前面寫入的數(shù)據(jù))

讀數(shù)據(jù):

SFLASH_ReadNByte(read_buf, 0, 6); 通過該函數(shù)從W25Q16的0地址連續(xù)讀取6字節(jié)數(shù)據(jù),保存在read_buf里面。(地址、數(shù)據(jù)及數(shù)據(jù)長度都可以修改,但讀寫的地址要相同,讀出來的數(shù)據(jù)才是寫入的數(shù)據(jù))

關(guān)于本文的更多詳情請往下看。

Ⅱ、實例工程下載

筆者針對于初學(xué)者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學(xué)者一看就明白,以簡單明了的工程供大家學(xué)習(xí)。

筆者提供的實例工程都是在板子上經(jīng)過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學(xué)習(xí)。

提供下載的軟件工程是基于Keil(MDK-ARM) V5版本、STM32F103ZE芯片,但F1其他型號也適用(適用F1其他型號: 關(guān)注微信,回復(fù)“修改型號”)。

STM32F10x_SPI(硬件接口)讀寫Flash(25Q16)實例源代碼工程:

https://yunpan.cn/c6mfRJWva6AJ2訪問密碼

STM32F10x_SPI(軟件模擬)讀寫Flash(25Q16)實例源代碼工程:

https://yunpan.cn/c6mf6zyzCaMwd訪問密碼

STM32F1資料:

https://yunpan.cn/crBUdUGdYKam2 訪問密碼 ca90

Ⅲ、STM32硬件SPI

STM32所有系列芯片都帶有SPI硬件控制器,根據(jù)芯片型號不同,SPI數(shù)量也不同,有些有一個SPI,有些有3個SPI。STM32的SPI控制器功能也是很強大的,只需要簡單的配置就能高效的進行SPI通信。

1.SPI原理

上面是SPI的系統(tǒng)框圖,來自STM32F1的參考手冊.

A.引腳

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

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

SCK:串口時鐘,為通信提供時鐘。(作為主設(shè)備的輸出,從設(shè)備的輸入)。

NSS:從設(shè)備選擇。這是一個可選的引腳,用來選擇主/從設(shè)備。它的功能是用來作為“片選引腳”,讓主設(shè)備可以單獨地與特定從設(shè)備通訊,避免數(shù)據(jù)線上的沖突。

B.緩沖區(qū)SPI->DR

發(fā)送緩沖區(qū):只要往SPI1->DR寫入數(shù)據(jù),它自動將存入發(fā)送緩沖區(qū),并執(zhí)行發(fā)送操作。這就是高效的一點,而不像模擬SPI,還需要我們控制時鐘,控制MOSI引腳輸出高低電平。

接收緩沖區(qū):原理和發(fā)送緩沖區(qū)差不多,只是這個是接收數(shù)據(jù)。接收滿了,才通知我們需要去讀取數(shù)據(jù)。

C.波特率發(fā)生器

STM32的硬件SPI還可以通過配置來控制通信的速度。

2.SPI引腳

該函數(shù)位于spi.c文件下面;

使用的SPI需與引腳對應(yīng),CS片選信號我們這里是通過普通IO來控制的,若不同請在spi.h里面修改為你開發(fā)板上的引腳。

3.SPI配置

該函數(shù)位于spi.c文件下面;

該函數(shù)是文章的重要一項,主要是對硬件SPI進行的一些初始化配置。

SPI為主模式,時鐘線平時為高,上升沿采集數(shù)據(jù),8位數(shù)據(jù)格式,軟件控制片選,數(shù)據(jù)高位在前。

1.傳輸方向:SPI_Direction = SPI_Direction_2Lines_FullDuplex;

總共有四個方式:

兩線全雙工:SPI_Direction_2Lines_FullDuplex

兩線只接收:SPI_Direction_2Lines_RxOnly

單線只接收:SPI_Direction_1Line_Rx

單線只發(fā)送:SPI_Direction_1Line_Tx

2.模式:SPI_Mode = SPI_Mode_Master;

總共有兩種模式:

主機模式:SPI_Mode_Master

從機模式:SPI_Mode_Slave

3.數(shù)據(jù):SPI_DataSize = SPI_DataSize_8b;

8位數(shù)據(jù)長度:SPI_DataSize_8b

16位數(shù)據(jù)長度:SPI_DataSize_16b

4.時鐘極性:SPI_CPOL = SPI_CPOL_High;

也就是我們平時不操作時,時鐘的電平。

低電平:SPI_CPOL_Low

高電平:SPI_CPOL_High

5.時鐘相位:SPI_CPHA = SPI_CPHA_2Edge;

也就是我們需要等多少個“時鐘”操作通信口MOSI、MISO。

1個時鐘:SPI_CPHA_1Edge

2個時鐘:SPI_CPHA_2Edge

6.片選信號:SPI_NSS = SPI_NSS_Soft;

也就是我們?nèi)绻刂芅SS片選引腳;

軟件控制:SPI_NSS_Soft

硬件控制:SPI_NSS_Hard

7.波特率(時鐘)分頻:SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;

也就是我們控制SPI通信的速率,和USART串口的波特率類似。

這里的參數(shù)有很多種,請見源代碼。

8.第一位傳輸數(shù)據(jù):SPI_FirstBit = SPI_FirstBit_MSB;

在一根通信線上一字節(jié)(8Bit)數(shù)據(jù)分8次傳輸才能完成,這里是高位先傳輸,還是低位先傳輸?shù)囊馑肌?/p>

高位:SPI_FirstBit_MSB

低位:SPI_FirstBit_LSB

9.校驗:SPI_CRCPolynomial = 7;

校驗的數(shù)據(jù)位長度。

4.SPI讀寫數(shù)據(jù)

函數(shù)位于spi.c文件下面;

這兩個函數(shù)就是我們使用到的接口,在上面SPI配置好之后,操作這兩個函數(shù)就可以控制其引腳讀寫了。

這兩個函數(shù)就是我們上面說的“發(fā)送緩沖區(qū)”和“接收緩沖區(qū)”所需要使用到的部分。

這里需要注意:發(fā)送和接收數(shù)據(jù)都是通過SPI->DR寄存器,讀、寫操作會控制數(shù)據(jù)的流向。

Ⅳ、軟件模擬SPI

從51學(xué)習(xí)過來的朋友就應(yīng)該知道,51的資源很少,沒有SPI硬件控制器,要想使用SPI通信方式,就需要使用IO口模擬的方式來實現(xiàn)SPI通信。只需要按照通信的時序就能控制其通信。

使用軟件模擬SPI通信有優(yōu)點,也有缺點。

優(yōu)點:移植很方便,代碼只需要簡單修改就可以使用在其他芯片上;

缺點:控制IO麻煩,對時序要求高;

1.模擬SPI引腳

該函數(shù)位于spi.c文件下面;

這個主要配置模擬SPI引腳。(如果你板子上使用的引腳不同,請修改spi.h文件的定義即可)

2.模擬SPI初始化

該函數(shù)位于spi.c文件下面;

這里初始化需要把狀態(tài)定好,不然第一次操作會有問題。

3.模擬SPI寫函數(shù)(時序)

該函數(shù)位于spi.c文件下面;

這種時序的寫法在學(xué)習(xí)過51的朋友來看再熟悉不過了。

注意:

1、高字節(jié)在前,說以上面紅色標(biāo)記的的部分就是將高位先輸出,依次移位輸出。

2、在時鐘的上升沿將數(shù)據(jù)輸出,所以在“時鐘-高”之前將數(shù)據(jù)輸出。

4.模擬SPI讀函數(shù)(時序)

該函數(shù)位于spi.c文件下面;

讀時序和寫時序原理類似,但還是存在差異。

注意:

1、高位先輸出來(從機輸出),所以,需要將讀取的數(shù)據(jù)依次移向高位。

2、在時鐘的下降沿讀出數(shù)據(jù),所以,我紅色標(biāo)記的部分可以看得出來,是在時鐘為低之后才去讀取數(shù)據(jù)。

Ⅴ、修改代碼,適應(yīng)開發(fā)板

看見這篇文章,你可能覺得芯片型號(STM32F103ZE)不是你的芯片芯片型號,硬件接口(SPI1)、(USART1)也不是板子上的接口,那怎么辦呢,其實很簡單,適當(dāng)修改一下就行。

1.修改芯片型號

該工程適合STM32F1系列的所有芯片,只需要修改一下型號。修改芯片型號,可以看我的另外一篇文章:如何將工程(修改來)運行在自己開發(fā)板上;

當(dāng)然,其他系列(F0、F2、F3、F4等)也可以使用該配置,但需要更換外設(shè)庫。

2.修改硬件接口

筆者提供的工程源代碼,在個人看來整理的還算比較整潔(名稱清晰、排版整齊、文件分類明確)、相比很多開發(fā)板賣家提供的例程來說,要好的多。所以,看了之后,你應(yīng)該知道如何修改。

1、LED燈的IO,位于bsp.h下,修改為你的LED燈IO口就行了。

2、USART,本文是使用USART1,如果你使用USART2的話,需要usart.c文件下“USART_GPIO_Configuration”引腳配置、USART_Configuration串口配置、發(fā)送接收函數(shù)USART1 改為USART2等。

3、SPI接口

這個在上面講述中都提及了修改,就是修改spi.c和spi.h文件里面的配置。

Ⅵ、說明

該文有點面向應(yīng)用的朋友,但為提及W25Q16相關(guān)的內(nèi)容,如有需要了解可以在微信留言。

關(guān)于筆者提供的軟件工程實例,可關(guān)注微信,在會話框回復(fù)“關(guān)于工程”,有關(guān)于工程結(jié)構(gòu)描述、型號修改等講述。

以上總結(jié)僅供參考,若有不對之處,敬請諒解。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉