一、STM32F4xx系列的SPI特點:
1. 支持全雙工的3線SPI模式(即SCK, MISO, MOSI)
2. 支持單工2線傳輸,同時數據線可以設置成單向或者雙向模式
3. 8-bit, 16-bit可選的數據長度
4. 可選主從模式,並且支持多主模式
5. 主模式8種波特率選擇(最高波特率fPCLK/2),從模式最高頻率為fPCLK/2
6. 主從模式下,片選線(NSS)可以設置為硬件控制或軟件控制,同時支持主/從操作下的動態轉換
7. 時鍾線的極性和相位可以通過寄存器設置
8. 移位寄存器可以設置成高位先出(MSB-first)或者低位先出(LSB-fisrt)
9. 具有SPI 總線忙碌(bus busy)標志位
10. 支持 SPI TI 模式
11. 支持硬件CRC
- 可以在數據流后傳輸CRC(發送模式)
- 自動校驗校驗CRC(接收模式)
12.具有主模式錯誤標志位,溢出標志位,CRC錯誤校驗標志位,同時可觸發中斷
13. 1-byte發送/接受緩存,並且支持DMA請求。
二、傳輸過程中的狀態標志位(BSY, TXE, RXNE)
1. 全雙工主模式連續傳輸
圖1. 全雙工主模式連續傳輸時序圖
- BSY 在傳輸時硬件置1,傳輸完成后硬件清0,圖1方框①所示
- 當Tx緩存器無數據時,TXE置1;對DR(數據寄存器,下同)進行寫操作將使TXE清0,圖1方框②所示
- 當SPI接收到完整的數據后(Rx 緩存器不為0),RXNE將置1;對DR進行讀操作將使RXNE清0,圖1方框③所示
2. 全雙工從模式連續傳輸
圖2. 全雙工從模式連續傳輸
- BSY在傳輸期間硬件置1,在下一次傳輸的第一個SPI時鍾周期硬件清0,然后再由硬件置1,圖2方框①所示
- 當Tx緩存器無數據時,TXE置1;對DR進行寫操作將使TXE清0,圖2方框②所示
- 當SPI接收到完整的數據后(Rx 緩存器不為0),RXNE將置1;對DR進行讀操作將使RXNE清0,圖2方框③所示
3. 單工發送主模式連續傳輸
圖3. 單工發送主模式連續傳輸時序圖
- BSY在傳輸期間硬件置1,在傳輸完成后硬件清0,圖3方框①所示
- 當Tx緩存器無數據時,TXE置1;對DR進行寫操作將使TXE清0,圖3方框②所示
4. 單工發送從模式連續傳輸
圖4. 只發送從模式連續傳輸時序圖
- BSY在傳輸期間硬件置1,在下一次傳輸的第一個SPI時鍾周期硬件清0,然后再由硬件置1,圖4方框①所示
- 當Tx緩存器無數據時,TXE置1;對DR進行寫操作將使TXE清0,圖4方框②所示
5. 單工接收模式連續傳輸
圖5. 單工接收模式連續傳輸時序圖
- 當SPI接收到完整的數據后(Rx 緩存器不為0),RXNE將置1;對DR進行讀操作將使RXNE清0,圖5方框①所示
6. 非連續傳輸
圖6. 非連續傳輸時序圖
- BSY 在傳輸期間硬件置1,在每次傳輸完成后置0,如圖6方框①所示
- 當Tx緩存器無數據時,TXE置1;對DR進行寫操作將使TXE清0,圖6方框②所示
三、連續傳輸與非連續傳輸的定義
主模式下,假如程序能很快地檢測TXE的上升沿或TXE中斷(即發送緩存器為空),在當前數據還未發送完成時(即移位寄存器還有數據尚未發送完),對DR寄存器進行寫操作,這種情況稱作連續傳輸,傳輸過程中SPI CLK是連續的,如圖1~圖5所示。
反之,假如在對DR寄存器進行寫操作時,上一次的數據已發送完(即移位寄存器為空),這種情況稱為非連續傳輸,傳輸過程中SPI CLK是斷續的,如圖6所示。
/×××××××××××××××××××××××××××××××××××××××× THE END××××××××××××××××××××××××××××××××××××××××××××/