关于STM32的SPI发送的问题 【悬赏问答】
其实提问很简单。就是一个spi的发送的问题。我用spi写flash,具体的spi发送函数如下。
u8 SPIx_ReadWriteByte(u8 data)
{
u8 retry=0;
/* Loop while DR register in not emplty */
//while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
while (SPI1->SR & SPI_I2S_FLAG_TXE == RESET)
{
retry++;
if(retry>200)return 0;
}
// SPI_I2S_SendData(SPI1,data);//дÈëÒª·¢Ë͵ÄÊý¾Ý
SPI1->DR = data;
/* Wait to receive a byte */
//while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ:½ÓÊÜ»º´æ·Ç¿Õ±ê־λ
retry = 0;
while( SPI1->SR & SPI_I2S_FLAG_RXNE == RESET )
{
retry++;
if(retry>200)return 0;
}
/* Return the byte read from the SPI bus */
return(uint16_t)SPI1->DR; //SPI_I2S_ReceiveData(SPI1); //·µ»ØÍ¨¹ýSPIx×î½ü½ÓÊÕµÄÊý¾Ý
//**********µÈ´ý½ÓÊռĴæÆ÷¾ÍÊÕµ½Êý¾Ý*******************
}
把最后的return语句改成 return SPI1->DR; 总是写不了flash,总是卡住。但是改成SPI_I2S_ReceiveData(SPI1);就可以读写了。
但是SPI_I2S_ReceiveData(SPI1);里面的实现也是 return SPIx->DR啊,为什么会有这样的差别。
RE:关于STM32的SPI发送的问题
SPI_I2S_ReceiveData(SPI1);里面不可能只有SPIx->DR吧,仔细看看里面有其它语句影响不RE:关于STM32的SPI发送的问题
实在没什么语句影响的,你稍延时下再返回试试RE:关于STM32的SPI发送的问题
现读取,后返回。a= SPI1->DR;
return a;
u8 SPIx_ReadWriteByte 这个和返回的不相符。
回复:关于STM32的SPI发送的问题
回复第 4 楼 于2012-11-13 09:48:36发表:现读取,后返回。
a= SPI1->DR;
return a;
u8 SPIx_ReadWriteByte 这个和返回的不相符。
Re:刚刚试了下你的方法还是不行。 还有我用的是IAR。不是用的MDK
RE:关于STM32的SPI发送的问题
u8 SPIx_ReadWriteByte(u8 data){
u8 retry=0;
/* Loop while DR register in not emplty */
//while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ:·¢ËÍ»º´æ¿Õ±ê־λ
while (SPI1->SR & SPI_I2S_FLAG_TXE == RESET)
{
retry++;
if(retry>200)return 0;
}
// SPI_I2S_SendData(SPI1,data);//дÈëÒª·¢Ë͵ÄÊý¾Ý
SPI1->DR = data;
/* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {//改用库函数。
//retry = 0;
//while( SPI1->SR & SPI_I2S_FLAG_RXNE == RESET ) { //原来的操作寄存器
retry++;
if(retry>200)return 0;
}
/* Return the byte read from the SPI bus */
//u8 a;
//a = SPI1->DR;
returnSPI1->DR; //SPI_I2S_ReceiveData(SPI1); //·µ»ØÍ¨¹ýSPIx×î½ü½ÓÊÕµÄÊý¾Ý
}
后来我又改了一点代码,发现就可以直接return SPI1->DR了。就是把之前判断接收缓冲器为空用库函数实现,然后就可以了。为什么:L
RE:关于STM32的SPI发送的问题
怎么避免乱码?我从IAR复制的代码就会出现乱码!RE:关于STM32的SPI发送的问题
你单步执行一下 看看你的代码 是不是没有执行到后面那个return呢?RE:关于STM32的SPI发送的问题 【悬赏问答】
把那个加个括号试试。:DRE:关于STM32的SPI发送的问题 【悬赏问答】
给个例子自己看看
页:
[1]