STM8S103 SPI 单线双向数据模式 問題

2019-07-19 22:01发布

各位想請教一下,
STM8的SPI 硬件在 单线双向数据模式 在接收模式是如何使用的,
單線發送就比較簡單, 小弟一直都在用, 
程序如下, 

/* ==================================              SPI init ================================== */ void SPI_init(void){     SPI_ICR = 0;     SPI_CRCPR = 0;     SPI_CR1 = (1<<7| 1<<6| 0<<5| 0<<4| 1<<3| 1<<2| 1<<1| 1<<0);//      SPI_CR2 = (1<<7| 1<<6| 0<<5| 0<<4| 0<<3| 0<<2| 0<<1| 1<<0);//
}

/* ==================================                SPI Out ================================== */ void SPI_Send(unsigned char DataToSend){     while(!SPI_SR_TXE);     SPI_DR = DataToSend; }

以上簡單設置就可以了, 
但是在接收模式的話, 假如, 
我寫以下其中一句,
SPI_CR2_RXONLY = 1; SPI_CR2_BDOE = 0; SPI的SCK腳就會一直工作


假如我在READ的程序, 用SPI RXNE來檢測
程序:
char SPI_Read(){     unsigned RXBf;     SPI_CR2_BDOE = 0;     while(!SPI_SR_RXNE);     SPI_CR2_BDOE = 1;     RXBf = SPI_DR;     return RXBf; }


void ReadData(){     for(unsigned j = 0;j<5;j++){         DataBuf[j] = SPI_Read();     } }

程序上理論只有讀5次, 而實際讀了一共是8次, 同時, 關上SPI READ的時間完全找不到對準的方法
希望有高人指教, 這是SPI硬件的問題, 還是我的程序問題, 如何改動
萬分感激
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。