STM8L SPI使用過程記錄

STM8L SPI使用過程記錄
工作需要,需要使用SPI方式和DSP進行通信,關於SPI通信,作爲一名新手,還停留在大學時候學的MOSI/MISO階段,沒有實際的應用經驗,所以遇到了不少有趣的事情,記錄一下,防止以後再犯同樣的錯誤。

SPI從機:STM8L
SPI主機:DSP

問題一:主機接收異常

現象:從機向主機發送 “1234”,主機收到“11223334”
過程及分析: 從機向主機數據的時候,主機輪訓去讀,但是一直讀到數據如上,一直不正常,主機SPI頻率爲4M,從機主機頻率爲8M,通過示波器測量也是隻要主機發送clk去讀,從機就返回異常的數據,一直找不到原因,後來詢問別人猜測是主機SPI頻率太快導致的此問題
解決方法:降低SPI主機的頻率,數據接收正常

問題二:從機接收異常

現象:主機發送“12345”,從機只能接收到“12”
過程及分析:有點尷尬了,剛剛主機接收正常。馬上從機接收異常。。。。當時在從機中採用的是接收到一個字符,就立馬通過printf重定向的方式打印出來,後來採取接收幾個字符再一起打印出來。猜測原因是STM8L中的printf重定向佔用太多時間,導致接收數據異常
解決方法:去掉printf重定向

問題三:從機接收到大量0xFF無用數據

現象:從機發送完數據後,立馬讀取數據,會讀到0XFF等無用數據
過程及分析:從機在向主機發送數據後,立馬會讀到0xff無用數據,通過詢問電子得知,當主機在讀數據的時候,MOSI引腳被拉高,此時從機去讀數據,則會讀到0xFF,因此需要做些判斷,如果是0Xff,則丟棄無用數據
解決方法:從機讀數據時做判斷

問題四:從機配置成接收中斷方式,當發送數據過程中,系統卡死

現象:從機配置成接收中斷方式,當發送數據過程中,系統卡死,沒有反應
過程及分析:以上現象比較奇怪,後來通過添加打印信息進行分析,其實原因和上面一樣,當從機發送數據之後,主機讀數據會導致MOSI拉高,而從機又被配置成接收中斷,此時就會觸發中斷,然後從機就會一直接收,導致吸引卡死,因此我們現在的方法是在從機發送數據之前先關閉接收中斷,當確認數據發送完畢之後,再打開接收中斷
解決方法:發送時候關閉接收中斷,發送完畢打開接收中斷

問題五:從機接收或者發送阻塞

現象:從機接收或者發送數據時候可能會阻塞
過程及分析:特別是在接收中斷中,可能觸發中斷後,從機就會接收阻塞,導致整個系統沒有反應,現在採用的方法是增加超時機制,超過一定時間數據沒有接收到或者沒有發送出去,就直接退出,不用阻塞
解決方法:增加超時機制

不定時更新中。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章