前面給小伙伴講過串口發(fā)送和接收異常的可能原因,今天我們講下SPI全雙工模式下數(shù)據(jù)接收異常的一個原因。
我們知道,SPI是一主多從的總線結構,主機和哪個從機是通過CS片選來決定的。
我們再來看下SPI的框圖:
除了有發(fā)送緩沖區(qū)和接受緩沖區(qū)外,還有一個移位寄存器,所以當使用SPI發(fā)送最后一個字節(jié)到發(fā)送緩沖區(qū)時,倒數(shù)第二個字節(jié)還在移位寄存器中沒有發(fā)出,此時如果應用程序將從機CS拉高的話,就會導致從機失效,從而不會發(fā)出正確的數(shù)據(jù)。
那么如何解決呢?
只需要在拉高CS片選前,調用下面這個語句即可:
while(SET == (spi_i2s_flag_get(SPI0,SPI_FLAG_TRANS)));
這句的意思是等待SPI通訊空閑,對應讀取的標志位是SPI_STAT 寄存器中的bit7位
當該位為0時,就標志著SPI緩沖區(qū)和移位寄存器中都沒有數(shù)據(jù)了,你就可以放心大膽的控制CS片選腳啦。
-
單片機
+關注
關注
6026文章
44452瀏覽量
630802 -
嵌入式
+關注
關注
5052文章
18909瀏覽量
300716 -
SPI
+關注
關注
17文章
1681瀏覽量
91051
發(fā)布評論請先 登錄
相關推薦
評論