前言
隨著嵌入式系統(tǒng)的迅猛發(fā)展,STM32系列微控制器在各種應(yīng)用中得到廣泛應(yīng)用。在嵌入式系統(tǒng)設(shè)計(jì)中,串行外設(shè)接口(SPI)是一種常見且重要的通信協(xié)議。為了更便捷地配置和使用SPI,STMicroelectronics提供了一款強(qiáng)大的工具——STM32 CubeMX。本文將著重介紹STM32 CubeMX中SPI的層次結(jié)構(gòu)、SPI協(xié)議以及SPI控制器的結(jié)構(gòu)。
一、SPI 程序?qū)哟?/h2>
1.1 硬件原理圖
以 SPI 接口的 Flash 為例,它跟主控的連接圖如下:
其中DI為SPI設(shè)備發(fā)給主控的。SCK為時(shí)鐘(所以SPI協(xié)議是一種同步協(xié)議)
主控發(fā)出。DO為主控發(fā)送給SPI設(shè)備的,CS為片選引腳,我們可以通過CS片選引腳來選中不同的SPI設(shè)備,可以實(shí)現(xiàn)一主多從。
1.2 硬件框圖
我們會(huì)編寫程序通過SPI控制器來操作Flash,SPI來幫我們傳遞數(shù)據(jù)。
1.3 軟件層次
要操作 Flash,涉及這幾個(gè)層次的程序:
① 應(yīng)用程序:我來決定“在哪個(gè)位置、讀寫什么數(shù)據(jù)”
② Flash 驅(qū)動(dòng):我知道發(fā)送什么格式的 SPI 數(shù)據(jù)才能讀、寫、擦除 Flash
③ SPI 控制器驅(qū)動(dòng)(HAL):我可以發(fā)送 SPI 數(shù)據(jù)
二、SPI協(xié)議
2.1 硬件連線
SPI(Serial Peripheral Interface,串行外設(shè)接口)是由摩托羅拉(Motorola)在
1980 前后提出的一種全雙工同步串行通信接口,它用于 MCU 與各種外圍設(shè)備以串行方式進(jìn)
行通信以交換信息,通信速度最高可達(dá) 25MHz 以上。
SPI 接口主要應(yīng)用在 EEPROM、FLASH、實(shí)時(shí)時(shí)鐘、網(wǎng)絡(luò)控制器、OLED 顯示驅(qū)動(dòng)器、AD
轉(zhuǎn)換器,數(shù)字信號(hào)處理器、數(shù)字信號(hào)解碼器等設(shè)備之間。
SPI 通常由四條線組成,一條主設(shè)備輸出與從設(shè)備輸入(Master Output Slave Input,
MOSI),一條主設(shè)備輸入與從設(shè)備輸出(Master Input Slave Output,MISO),一條時(shí)鐘信
號(hào)(Serial Clock,SCLK),一條從設(shè)備使能選擇(Chip Select,CS)。
SPI 可以一個(gè)主機(jī)連接單個(gè)或多個(gè)從機(jī),每個(gè)從機(jī)都使用一個(gè)引腳進(jìn)行片選,物理連
接示意圖如圖所示:
我們可以通過把SCLK時(shí)鐘,輸入和輸出所有從機(jī)共用一根線,通過CS引腳(片選引腳)來區(qū)分發(fā)送和接收哪個(gè)設(shè)備。
這樣就可以使用I2C的一主多從
2.2 如何訪問SPI設(shè)備
首先,使能片選引腳,在片選引腳有用的期間再去訪問
那怎么發(fā)數(shù)據(jù)和讀數(shù)據(jù)呢?
假設(shè)主控要發(fā)送0x56(二進(jìn)制:0101 0110
)給Flash,時(shí)序如下:
首先發(fā)送CS片選信號(hào),選中他,在每個(gè)時(shí)鐘周期傳輸一位。第一個(gè)時(shí)鐘周期傳遞最高位。然后其他的位就接著傳輸。
在一開始的時(shí)候,這個(gè)SCK是高電平還是低電平?
這是可以設(shè)置的。(CPOL)
傳輸數(shù)據(jù)時(shí),是在第一個(gè)跳邊緣("跳邊緣"通常指的是在數(shù)字信號(hào)中的變化,特別是從低電平到高電平或從高電平到低電平的變化。
)傳輸數(shù)據(jù)還是在第二個(gè)跳邊緣傳輸數(shù)據(jù)?
這也是可以設(shè)置的(CPHA)
通過上面的CPOL和CPHA的組合,可以組合成4個(gè)SPI不同的模式
比如說我們可以組合成下面這個(gè)時(shí)鐘時(shí)序圖:
當(dāng)CPHA為1時(shí)在第二個(gè)跳邊緣傳輸數(shù)據(jù)
當(dāng)CPHA為1,CPOL不同時(shí),可以觀察到,他們的初始電平分別為高電平和低電平
無論哪種模式,我們都可以同時(shí)發(fā)送和同時(shí)接收8位數(shù)據(jù)
2.3 SPI 框圖
在我們實(shí)際編程中我們是不需要這樣去控制引腳的
我們編寫的程序?qū)?huì)通過內(nèi)部的SPI控制器去訪問外部的SPI設(shè)備,這個(gè)SPI控制器幫我們實(shí)現(xiàn)時(shí)序,進(jìn)行讀寫。
SPI控制器框圖:
- 當(dāng)我們要操作SPI的時(shí)候,我們要去設(shè)置他的模式:時(shí)鐘平時(shí)是什么電平,在第幾個(gè)跳邊緣傳輸數(shù)據(jù)
- 我們需要設(shè)置時(shí)鐘的頻率
- 我們可以去寫數(shù)據(jù)了
比如上面的框圖,他有SPI控制寄存器2,控制寄存器1,我們可以設(shè)置控制寄存器1的時(shí)鐘平時(shí)是什么電平,在第幾個(gè)跳邊緣傳輸數(shù)據(jù):
然后我們就可以通過寫/讀緩沖區(qū)來得到數(shù)據(jù)了文章來源:http://www.zghlxwxcb.cn/news/detail-829080.html
總結(jié)
STM32 CubeMX作為一款強(qiáng)大的開發(fā)工具,為嵌入式系統(tǒng)設(shè)計(jì)提供了便利。在SPI層次結(jié)構(gòu)的配置中,CubeMX提供了直觀而靈活的界面,使得用戶能夠輕松定制SPI通信的各種參數(shù)。同時(shí),SPI協(xié)議和SPI控制器結(jié)構(gòu)的詳細(xì)配置也為開發(fā)者提供了更高的靈活性和控制權(quán)。通過深入了解STM32 CubeMX中SPI的層次結(jié)構(gòu)、協(xié)議和控制器結(jié)構(gòu),開發(fā)者能夠更加高效地設(shè)計(jì)和實(shí)現(xiàn)復(fù)雜的嵌入式系統(tǒng)。文章來源地址http://www.zghlxwxcb.cn/news/detail-829080.html
到了這里,關(guān)于【STM32 CubeMX】SPI層次結(jié)構(gòu)SPI協(xié)議與SPI控制器結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!