STM32 SPI發送波形
前言
本文主要內容為STM32 的SPI發送波形,不涉及相關軟件配置,相關內容網絡上一搜就有很多參考。
一、SPI的四種波形
根據SPI協議,STM32發送的波形有四種可能,如圖所示,主要分為兩種時鍾相位(CPHA)和時鍾極性(CPOL)。
關於時鍾極性,也有很多人把它理解為第一個邊沿,第二個邊沿:也有人覺得CPHA=0時,時鍾是從第一個邊沿啟動,這樣理解不是很准確。其實還有第二種理解方式,那就是它們都是 第 2 T \cfrac{2}{T} T2 的邊沿信號,如下圖所示:
我個人感覺這樣比第幾個邊沿好理解一些。
二、連續和不連續傳輸
1.連續傳輸
首先,連續傳輸或者不連續傳輸都是針對主設備(Master)而言。連續傳輸就是指發送完數據后,時鍾沒有空閑,立即進行下一次傳輸。如圖所示。2.不連續傳輸
不連續傳輸和連續傳輸相反,在完成一次傳輸之后,時鍾會有一段空閑。如圖所示。
關於什么情況下是連續傳輸,什么情況下是間斷傳輸,官方手冊有這么一段說明。
大概意思就是,你的軟件運行足夠快,能夠檢測到TXE標志,並且立即將數據寫入SPI_DR寄存器,那么就可以實現連續傳輸,否則,就只有間斷傳輸。
然而實際情況就是,無論你是使用輪詢方式,或者中斷方式,甚至使用寄存器編寫程序,也不可能使用軟件做到連續傳輸,除非你將SPI的頻率降得很低。
而想要實現連續傳輸,只要一種方式,那就是使用硬件完成以上操作,也就是使用DMA進行發送數據。
三、實測波形
以下波形是使用HAL庫,采用輪詢方式發送三個字節(0xaa,0x55,0x34)的波形圖。通道1為時鍾信號,通道2為MOSI信號。可以看到,每發送一個字節的數據,時鍾就會空閑一段時間。
以下波形是使用HAL庫,采用DMA方式發送三個字節的波形圖,可以看到,24個時鍾完全連在一起。
本次實驗的SPI配置模式為 CPHA = 0, CPOL = 0,可以看到,剛開始的半個周期,時鍾出現了一些毛刺,同時MOSI引腳的數據變為高,這也說明了在CPHA=0時,時間會提前半個周期開始,而不是從第一個邊沿信號開始。