1.介紹
2. 模擬spi
3. 硬體spi
一、介紹簡述:1)通常 spi 通訊要求 4 根線,分別是 mosi(主機輸出從機輸入), miso(主機輸入從機輸出), clk(時鐘線), cs(片選線)
2)當傳送和接受資料的工作都準備好了,只要有時鐘 clk,就傳送資料,沒有時鐘就不傳送,而且乙個時鐘週期傳送一位(bit)資料,所以傳送資料的快慢由時鐘頻率來控制。
3)至於時鐘和資料的相位沒有特別嚴格的要求(而 iic 中,資料的變化只能在 scl 是低電平的時候發生), spi資料的變化是乙個時鐘週期一次,這樣的方法來傳輸資料就簡單多了。我們可以根據需求對時鐘的極性和相位做調整,看看是在時鐘上公升沿還是下降沿來傳送資料,還有停止傳送時時鐘的極性,是保持高電平還是低電平。
4)另外在多機通訊時, spi 只是簡單的通過乙個片選訊號(拉低電平選擇)來選擇哪個裝置占用匯流排,但是 iic 是通過傳送從裝置位址來自動選擇的。(簡介來自某手冊說明)
spi有四種時序模式:
spi工作原理,方便自己就用了原子哥的原話:
1)硬體上為4根線。
2)主機和從機都有乙個序列移位暫存器,主機通過向它的spi序列暫存器寫入乙個位元組來發起一次傳輸。
3)序列移位暫存器通過mosi訊號線將位元組傳送給從機,從機也將自己的序列移位暫存器中的內容通過miso訊號線返回給主機。這樣,兩個移位暫存器中的內容就被交換。
4)外設的寫操作和讀操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的位元組;反之,若主機要讀取從機的乙個位元組,就必須傳送乙個空位元組來引發從機的傳輸。
在當第一次接觸spi協議的時候,還是練習oled時,當時總感覺這東西太難了,看不懂時序,不清楚原理。但是在學習過iic之後,感覺spi比起iic來說很簡潔明瞭了,iic模擬起來複雜,硬體配置也不是那麼輕鬆。總之,對於現在的我來說,都不是很輕鬆。
二、模擬spi
比起來iic,spi**真是簡潔了許多。模擬spi只需要簡單初始化用到的io再根據時序圖來實現傳送接收資料即可。
/*
#define spi_sck pbout(13)
#define spi_mosi pbout(15)
#define spi_miso pbin(14)
*//*
spi_sck:pb13(spi2)
spi_mosi:pb15,
spi_miso:pb14
片選腳(cs)不用初始化,因為片選腳屬於需要spi控制的晶元自身。可以在驅動晶元時定義cs引腳
*/void spi_init(void)
/*讀寫乙個位元組,因為全雙工同時發收
txdata
配置的時序圖為模式3,即cpol=1,cpha=1
*/u8 spi_readwriteonedata(u8 txdata)
return rxdata;
}
三、硬體spi硬體spi也很好理解,唯一難理解的就是nss(spi_cr1)腳管理。
/*
spi硬體時序配置初始化
hardware:硬體
pb13:sp2_sck
pb14:miso
pb15:mosi
*/void hwspi_init(void)
/*傳送和接收資料(8位)*/
u8 hwspi_readwriteonebyte(u8 data)
spi2->dr = data;
i=0;
while(!(spi2->sr & 1<<0))//等待接收緩衝區非空
return spi2->dr;
}
目前只學習了硬體spi的主模式,好多強大的功能同樣沒有學習到,所有只能記錄到這了。才疏學淺,慚愧慚愧~ STM32 SPI筆記(基於暫存器)
1.說在前面 最近嘗試操作vs1053音訊模組 使用的資料傳輸方法使用spi協議,打算學一下spi的配置方式 2.spi 2 1 spi secial periperal inte ce 作為四線的通訊介面,有著miso mosi sclk和cs miso 主進從出 mosi 主出從進 sclk 時...
stm32暫存器版學習筆記 DMA
dma direct memory access 直接儲存器訪問。dma傳輸方式無需cpu直接控制傳輸,通過硬體為ram與i o裝置開闢一條直接傳送資料的通路,使cpu效率大大提高。stm32f103有2個dma控制器,dma1有7個通道,dma2有5個通道,專門用來管理來自外設對儲存器的訪問請求,...
STM32蜂鳴器 暫存器
這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...