各位想請教一下,
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硬件的問題, 還是我的程序問題, 如何改動
萬分感激
|