STM32 SPI难点浅析
我用的是戰(zhàn)艦STM32開發(fā)板,兩個知識點,一:是STM32 SPI的原理;二:用STM32自帶的SPI對外部flash(W25Q64)的讀寫。
一:STM32 SPI的原理
????? 先上圖:
主模式和從模式:主模式:主設備在SCK腳產(chǎn)生時鐘;從模式:SCK引腳用來接收從主設備傳來的時鐘。
通常SPI通過4個引腳與外部器件相連:
????? 1、MISO:主設備數(shù)據(jù)輸入,從設備數(shù)據(jù)輸出引腳。
????? 2、MOSI:主設備數(shù)據(jù)輸出,從設備數(shù)據(jù)輸入引腳。
????? 3、SCLK:串口時鐘,由主設備輸出,從設備輸入。
????? 4、NSS:從設備選擇
這里必須牢記一點:從上圖中可以看出,SPI通信是雙向的,主機往從機里面寫一個數(shù)據(jù),他自己同時也能讀到一個數(shù)據(jù)。這點在SPI的編程中很重要,理解了很簡單!
前3個引腳根據(jù)框圖都能看明白,下面主要講第4個引腳:NSS。
????? NSS:從設備選擇引腳。這是一個可選的引腳,用來選擇主/從設備。他的功能是用來作為“片選引腳”,讓主設備可以單獨的與特定的從設備通訊,避免數(shù)據(jù)線上的沖突。
????? 前面相信大家都能看明白。下圖是NSS用來選擇主從設備
?????? 先簡單說明一下NSS引腳的兩種模式:硬件NSS模式和軟件NSS模式。
?????? 硬件NSS:是指SPI自動控制SPI的片選信號,發(fā)送數(shù)據(jù)時,輸出低電平;不發(fā)送數(shù)據(jù)時,輸出高電平。但是實際操作中,NSS根本無法自己置位和復位(ST技術人員承認的bug)。故一般不用硬件NSS,因為這種方式就只能一個SPI接一個從機。
?????? 軟件NSS:就是用軟件的方式(普通IO口)控制SPI的片選,發(fā)送數(shù)據(jù)時,軟件置片選為低;結(jié)束傳輸時,軟件置片選為高。優(yōu)點:一個SPI可以控制多個從機(多個片選線)。
在上圖硬件NSS中:
?????? 1的意思:
?????? (前提是NSS輸出被使能)當你的STM32工作為主SPI模式,這時NSS引腳被拉低,所有SPI設備的NSS引腳與這個主SPI設備的NSS相連,將自動被配置為從SPI設備。
?????? 2的意思:
?????? 當SPI配置為NSS 硬件模式時,通過檢測NSS引腳的可以實現(xiàn)自身主機和從機的切換。也就是說,STM32 SPI通過檢測NSS,一旦發(fā)現(xiàn)NSS線不為低,自己就輸出低,從而配置成為主設備。
?????? 如果STM32 SPI檢測到NSS線為低,則說明傳輸系統(tǒng)中已經(jīng)有一個主設備存在了,自己就配置成從設備。
在上圖軟件NSS中:
?????? 1、可以使用STM32給的的NSS引腳(如SPI2的PB12引腳)來實現(xiàn)片選,這時要配置SPI_CR1寄存器來設置PB12輸出高低電平。
?????? 2、也可以用普通IO來實現(xiàn)片選。這里不多說,純軟件控制~
二:用STM32自帶的SPI對外部flash(W25Q64)的讀寫
???????用STM32自帶的SPI對W25Q64的讀寫其實并不難,主要是根據(jù)W25Q64提供的操作時序來編寫相應代碼。譬如:在讀W25Q64數(shù)據(jù)的操作是,先往W25Q64中寫要讀的指令(0x03)。然后按照W25Q64數(shù)據(jù)手冊中給的時序圖來編寫代碼。并不難~
總結(jié)
以上是生活随笔為你收集整理的STM32 SPI难点浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32之spi之NSS管脚信号
- 下一篇: Winbond W25QXX SPI F