??此系列文章是小白學習STM32的一些學習筆記,小白第一次寫筆記文章,有不足或是錯誤之處,請多體諒和交流!
目錄
- 1.SPI協議介紹
- (一)SPI物理層
- (二)SPI協議層
- 2.STM32f103的SPI介紹
- (一)SPI通訊程序
- (二)SPI結構體介紹
1.SPI協議介紹
(一)SPI物理層

?相比于IIC通訊,資料傳輸線由一條變成兩條(MOSI、MISO),
?SCK:時鐘總線,同步通信,
?MOSI:主機輸出資料,從機接收資料,
?MISO:主機接受資料,從機輸出資料,
?SS:片選信號,低電平有效,
(二)SPI協議層

??SPI通信時序如圖:NSS(片選信號)發送起始信號、停止信號,時鐘上升沿觸發,下降沿資料有效(這是某一種通訊模式),
通信模式(CPOL/CPHA):
??CPOL(時鐘極性):CPOL=0時,SCK空閑時為低電平;CPOL=1時,SCK空閑時為高電平,(空閑指的SPI未開始使用時)
CPHA(時鐘相位):CPHA=0時,奇數邊沿資料有效;CPHA=1時,偶數邊沿資料有效,
??如下圖:

2.STM32f103的SPI介紹
(一)SPI通訊程序

?兩個標志信號TXE、RXNE:
??一幀資料準備了之后,硬體將TXE置1,然后送到SPI_DR(發送緩沖區),然后軟體清零TXE,這是發送程序;
??一幀資料接受了時,硬體將RXNE自動置1,然后SPI_DR(接識訓沖區)接受資料,軟體清零RXNE,這就是接受程序,
??Tips:該程序是將發送(接受)緩沖區的資料一位一位(按時鐘信號)通過MOSI(MISO)傳輸,
(二)SPI結構體介紹
// SPI_InitTypeDefSPI_InitTypeDef結構體
1 typedef struct
2 {
3 uint16_t SPI_Direction; /*設定 SPI 的單雙向模式 */
4 uint16_t SPI_Mode; /*設定 SPI 的主/從機端模式 */
5 uint16_t SPI_DataSize; /*設定 SPI 的資料幀長度,可選 8/16 位 */
6 uint16_t SPI_CPOL; /*設定時鐘極性 CPOL,可選高/低電平*/
7 uint16_t SPI_CPHA; /*設定時鐘相位,可選奇/偶數邊沿采樣 */
8 uint16_t SPI_NSS; /*設定 NSS 引腳由 SPI 硬體控制還是軟體控制*/
9 uint16_t SPI_BaudRatePrescaler; /*設定時鐘分頻因子,fpclk/分頻數=fSCK */
10 uint16_t SPI_FirstBit; /*設定 MSB/LSB 先行 */
11 uint16_t SPI_CRCPolynomial; /*設定 CRC 校驗的運算式 */
12 } SPI_InitTypeDef;
具體結構體各種配置引數可以去看stm32f103_spi.h頭檔案,
本系列筆記內容和圖片基于《【野火?】零死角玩轉STM32—F103-MINI》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259546.html
標籤:其他
