15.1 FLASH
Flash,全名叫做Flash EEPROM Memory,即平時所說的“閃存”,它結合了ROM和RAM的長處,不僅可以反復擦除,還可以快速讀取數據,STM32運行的程序其實就是存放在Flash當中,但是由于STM32的Flash一般1M左右,只能存儲程序大小的數據,所以往往需要外擴Flash來存儲數據,比如LCD界面當中的漢字字庫,以及文件系統中讀取的文件內容。
但是一般Flash的擦除次數有限制,STM32F1系列最新的文檔指出,片內的FLASH擦寫次數大約在1W次左右,所以一般Flash用于擦除次數不多,但是數據量很大的場合。
這個Flash讀寫實驗我們用到的芯片是W25Q128,這是一款采用SPI協議進行讀寫的Flash芯片,存儲容量為128Mbit,合計16Mbyte,工作電壓2.7V~3.6V。這個實驗我們采用STM32內置的SPI模塊來進行對芯片的讀寫操作,STM32F1的SPI功能很強大,SPI時鐘最高可以到18MHz,支持DMA,可以配置為SPI協議或者I2S協議。
15.2 硬件SPI模塊
通過之前51單片機開發我們可以知道,SPI協議一共需要四根線來完成數據通信,即片選CS,總線時鐘SCK,主機輸入從機輸出MISO和主機輸出從機輸入MOSI四根數據線。STM32的內部SPI模塊結構框圖如下圖所示。
從上面的結構框圖我們可以發現,硬件SPI的優勢就在于開發者不需要考慮SPI的詳細參數以及時序,只需要配置內部的寄存器,設置速率,電平就可以實現SPI通信。
15.3 相關寄存器
15.3.1 SPI控制寄存器1:SPIx_CR1
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BIDIMODE | BIDIOE | CRCEN | CRCNEXT | DFF | RXONLY | SSM | SSI | LSBFIRST | SPE | BR[2:0] | MSTR | CPOL | CPHA |
Bit 15:雙向數據模式使能
0:選擇雙線雙向模式
1:選擇單線雙向模式
Bit 14:雙向模式下的輸出使能
0:輸出禁止(只收模式)
1:輸出使能(只發模式)
Bit 13:硬件CRC校驗使能
0:禁止CRC計算
1:啟動CRC計算
Bit 12:下一個發送CRC
0:下一個發送的值來自發送緩沖區
1:下一個發送的值來自發送CRC寄存器
Bit 11:數據幀格式
0:使用8位數據幀格式進行發送/接收
1:使用16位數據幀格式進行發送/接收
Bit 10:只接收
0:全雙工(發送和接收)
1:禁止輸出(只接收模式)
Bit 9:軟件從設備管理
0:禁止軟件從設備管理
1:啟用軟件從設備管理
Bit 8:內部從設備選擇
注:該位只在SSM位為1時有意義。它決定了NSS上的電平,在NSS引腳上的I/O操作無效
Bit 7:幀格式
0:先發送MSB
1:先發送LSB
Bit 6:SPI使能
0:禁止SPI設備
1:開啟SPI設備
Bit 5~Bit 3:波特率控制
000:f PCLK /2
001:f PCLK /4
010:f PCLK /8
011:f PCLK /16
100:f PCLK /32
101:f PCLK /64
110:f PCLK /128
111:f PCLK /256
Bit 2:主設備選擇
0:配置為從設備
1:配置為主設備
Bit 1:時鐘極性
0:空閑狀態時,SCK保持低電平
1:空閑狀態時,SCK保持高電平
Bit 0:時鐘相位
0:數據采樣從第一個時鐘邊沿開始
1:數據采樣從第二個時鐘邊沿開始
15.3.2 SPI狀態寄存器:SPIx_SR
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | BSY | OVR | MODF | CRCERR | UDR | CHSIDE | TXE | RXNE |
Bit 7:忙標志
0:SPI不忙
1:SPI正忙于通信,或者發送緩沖非空
Bit 6:溢出標志
0:沒有出現溢出錯誤
1:出現溢出錯誤
Bit 5:模式錯誤(在SPI模式下不使用)
0:沒有出現模式錯誤
1:出現模式錯誤
Bit 4:CRC錯誤標志(在SPI模式下不使用)
0:收到的CRC值和SPI_RXCRCR寄存器中的值匹配
1:收到的CRC值和SPI_RXCRCR寄存器中的值不匹配
Bit 3:下溢標志位(在SPI模式下不使用)
0:未發生下溢
1:發生下溢
Bit 2:聲道(在SPI模式下不使用)
0:需要傳輸或者接收左聲道
1:需要傳輸或者接收右聲道
Bit 1:發送緩沖為空
0:發送緩沖非空
1:發送緩沖為空
Bit 0:接收緩沖非空
0:接收緩沖為空
1:接收緩沖非空
上一篇:STM32入門學習筆記之外置FLASH讀寫實驗(下)
下一篇:在STM32中的func1和func2函數,哪個效率高?
推薦閱讀最新更新時間:2025-04-15 21:43


設計資源 培訓 開發板 精華推薦
- PI3302-00-EVAL1,使用 PI3302 Cool-Power ZVS 降壓穩壓器的評估板
- DC2160A,基于 LTC4419 18V 雙輸入微功率電源路徑優先器的演示板
- 使用 Microchip Technology 的 TC18C47MJE 的參考設計
- 使用 MikroElektronika 的 MAX8903B 的參考設計
- 基于 L6982CDR 的 38V、2A 同步降壓開關穩壓器評估板
- pro1_ceshi
- MX軸試軸器
- 使用 LT3045EMSE 并聯多個線性穩壓器以提供 2A 輸出電流的典型應用
- ADR5040B 2.048 Vout 精密微功率并聯模式電壓基準的典型應用,用于 ±15 V 輸出,采用堆疊式 ADR5045 器件
- 基于ACEPACK 2電源模塊的工業驅動系統套件