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條線通訊 主機和從機都有乙個序列移位暫存器...