關於stm32的spi傳送命令時的注意事項

2021-06-20 12:45:53 字數 729 閱讀 5142

近日在進行乙個傾角儀產品操作時,發現了stm32在往外傳送資料時出現的乙個問題。類似問題以前也出過,現在再次出現。特地寫下來提醒自己注意以後防止再犯錯。

該傾角儀adis16210與主控制器stm32通訊時選用的是spi介面,並且在後續的操作過程中是使用stm32的官方函式庫。在初期程式除錯時,只是進行了spi的讀操作(adis可以不用設定初試引數),能正常進行spi的讀操作,能獲取到隨姿態變好的角度值。

在使用過程中,發現傾角儀更新資料太慢,因此需要對傾角儀進行設定。在程式的初始化階段,增加了乙個spi的寫操作,寫入乙個位元組以設定該感測器。更新完程式,執行程式發現再無法正常讀取感測器資料了,感測器總是返回0。多次測試,發現該寫操作導致傾角儀資料出現問題。

查閱資料手冊,發現在進行spi雙向通訊時,需要及時讀出spi接收暫存器資料,否則會出現快取溢位問題。儘管在程式的初始階段,我們只是進行了spi的傳送操作。但是因為spi是雙向通訊,在主裝置傳送資料時,有傳送時鐘,因此主裝置也會接收到資料,也即接收緩衝器中有資料,我們需要進行一下讀取操作(結果可以當無效資料丟棄),以讀空資料。

因此,在stm32傳送乙個設定引數之後,我等待傳送完成,等待接受完成,再進行了一下讀spi接受暫存器的操作。再在程式原來位置進行傾角資料讀出時,可以正常讀取資料。

因為spi的工作原理類似,因此其它器件在多次傳送資料時,中間如果不進行spi接收緩衝器清空操作,就有可能導致接收快取器溢位,當然有的器件溢位了可能會繼續正常工作,但stm32系列晶元在溢位時肯定不會再繼續正常工作了。

STM32之間SPI通訊

這幾天實驗室比較忙,所以部落格這邊停了一下,繼續吧。繼串列埠中斷後,大家可以嘗試微控制器間串列埠通訊,這裡就不再多贅述。串列埠完了之後,我接著學的就是spi通訊了,作為hello moto公司推出的這種4線全雙工通訊,很節約pcb布局空間,但缺點就是沒有指定的流控制,沒有應答機制來確定訊號收到與否,...

STM32 快速上手SPI

基本的部分前文 stm32 spi 已經介紹過了,這裡只記怎麼用。stm32f103zet6的三個spi的引腳分別為 spi1在apb1時鐘下,spi2和spi3在apb2時鐘下。void spi i2s deinit spi typedef spix void spi init spi typed...

STM32 SPI傳送波形

三 實測波形總結 根據spi協議,stm32傳送的波形有四種可能,如圖所示,主要分為兩種時鐘相位 cpha 和時鐘極性 cpol 關於時鐘極性,也有很多人把它理解為第乙個邊沿,第二個邊沿 也有人覺得cpha 0時,時鐘是從第乙個邊沿啟動,這樣理解不是很準確。其實還有第二種理解方式,那就是它們都是 第...