STM32F7實現SPI讀寫,讀取W25Q16型號

2021-10-05 09:01:38 字數 2631 閱讀 2875

spi協議的原理,網上大把的資料可以找到,這裡記錄一下spi的初始化過程,以即以讀取w25q16型號為例的乙個簡單的spi讀寫過程。

cubemx配置:

有只傳送、只接收、半雙工和全雙工模式;

根據自己的需求,和spi裝置支援的型別,這裡選擇全雙工的spi;

因為我們這個spi匯流排上會掛載多個從裝置,而且只有乙個主機,所以,這裡禁用硬體片選,程式裡面讀寫之前使用軟體進行片選;

這裡選擇motorola幀格式;

選擇ti格式不能設定cpol和cpha,而且必須要開啟硬體nss這裡才能選擇ti模式。

博主在網上搜了一些關於ti的ssp協議相關的資料,只有簡簡單單的一句:ssp匯流排相容spi,ssi 和microwire 匯流排的介面。

博主又搜了以下microwire協議,和spi一樣,只不過片選訊號是高電平有效。

這是手冊裡關於ti模式的說明部分和波形圖:

也不清楚這個sck的觸發訊號是幹嘛的,所以這裡老老實實選擇motorola就行了。

4-16bit可選,根據實際,選擇8bit;

第乙個傳輸的bit是高位還是低位,這裡根據裝置來選擇,好像msb(先傳送高位)的比較多,注意這裡的會同時設定傳送和接收,如果設定錯了,傳送的指令對方就無法識別,可能收到的就是0xff這種值。

spi的波特率是由時鐘分頻得到的,cubemx很方便的還幫我們計算出來了時鐘速率,可以根據自己的需求設定。

根據極性和相位的不同,可以有4種不同的工作模式,這個根據晶元手冊支援的模式選擇,注意,一條匯流排上盡量掛載支援相通模式的裝置,這樣就不用每次在裝置切換之前重新配置spi外設。

暫時還沒研究到這裡……

參考spi的nss 脈衝模式的作用,這裡用不到;

因為前面禁用了硬體片選,所以這裡只能設定位軟體模式。

除此意外,還需要把連線硬體片選訊號的gpio,設定為輸出模式。

cubemx生成的**如下:

spi_handletypedef spi3_handler;

//spi2控制代碼

void

spi3_init

(void

)void

hal_spi_mspinit

(spi_handletypedef* hspi);if

(hspi->instance==spi3)

}static

void

mx_gpio_init

(void);

/* gpio ports clock enable */

__hal_rcc_gpioa_clk_enable()

;/*configure gpio pin output level */

hal_gpio_writepin

(gpioa, gpio_pin_4, gpio_pin_reset)

;/*configure gpio pin : pa4 */

gpio_initstruct.pin = gpio_pin_4;

gpio_initstruct.mode = gpio_mode_output_pp;

gpio_initstruct.pull = gpio_nopull;

gpio_initstruct.speed = gpio_speed_freq_low;

hal_gpio_init

(gpioa,

&gpio_initstruct)

;}

同一匯流排上不同裝置,工作在不同模式的時候,速率可能不一樣,需要乙個重新設定速率的函式:

void

spi3_setspeed

(u8 spi_baudrateprescaler)

因為全雙工的讀寫是同時的,封裝乙個讀寫函式:

//spi2 讀寫乙個位元組

//txdata:要寫入的位元組

//返回值:讀取到的位元組

u8 spi3_readwritebyte

(u8 txdata)

根據w25qxx的資料手冊,寫乙個讀id的函式:

//讀取晶元id

//返回值如下:

//0xef13,表示晶元型號為w25q80

//0xef14,表示晶元型號為w25q16

//0xef15,表示晶元型號為w25q32

//0xef16,表示晶元型號為w25q64

//0xef17,表示晶元型號為w25q128

u16 w25qxx_readid

(void

)

最後寫乙個在主函式中呼叫的介面函式。

void

w25qxx_init

(void

)

stm32f7網口 STM32F7串列埠通訊問題

stm32f7串列埠通訊問題 所屬分類 stm32f系列 瀏覽數 4572 提問者 dlx6969 問 stm32f767用到2個串列埠 串列埠1,230400,dma傳送,中斷接收 串列埠5,460800,dma傳送,中斷接收。初始化程式如下 初始化函式 void mx uart5 init vo...

STM32F7是否支援linux系統

1 作業系統有兩種 用mmu的 和 不用mmu的 用mmu的是windows macos linux android 不用mmu的是freertos vxworks ucos.2 cpu有兩種 帶mmu的 和 不帶mmu的 帶mmu的有 cortex a系列 arm9 arm11系列 不帶mmu的有...

STM32F407 SPI通訊介面

spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,主要應用在 eeprom,flash,實時時鐘,ad轉換器,還有數字訊號處理器和數碼訊號解碼器之間。spi介面一般使用4條線通訊 主機和從機都有乙個序列移位暫存器...