STM32SPI中断接受 每次只能接受前两个字节
[复制链接]
主机SPI发送一组数 比如A[]={"123456"};
从机SPI接受用中断接受,每次数据都能完全发送出去,可是中断接受只能接收到12,其他的数据接收不到,初学者求解答
主机SPI发送函数如下
/******
void SPI_Send_char(SPI_TypeDef* SPIx,uint16_t ch)
发送一个字符函数
******/
void SPI_Send_char(SPI_TypeDef* SPIx,uint32_t ch)
{
if(SPIx==SPI1)
{
SPI_I2S_SendData(SPI1,ch);
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)!=SET);
}
if(SPIx==SPI2)
{
SPI_I2S_SendData(SPI2,ch);
}
if(SPIx==SPI3)
{
SPI_I2S_SendData(SPI3,ch);
while(SPI_I2S_GetFlagStatus(SPI3,SPI_I2S_FLAG_TXE)!=SET);
}
}
/****
SPI_SendString(SPI_TypeDef* SPIx, uint32_t *String)
发送字符穿函数
******/
void SPI_SendString(SPI_TypeDef* SPIx, int8_t *String)
{
while(*String)
{
SPI_Send_char(SPIx,*String);
String++;
}
}
/*****
SPI_SendString_Lenth(SPI_TypeDef* SPIx, uint32_t *String,uint16_t len)
发送一定长度的字符串
*******/
void SPI_SendString_Lenth(SPI_TypeDef* SPIx, int8_t *String,uint16_t len)
{
uint16_t i=0;
for(i=0;i<len;i++)
{
SPI1_End_Reindex%=SPI1_Buf_Lenth;
SPI_Send_char(SPIx,*(String+SPI1_End_Reindex));
}
}
从机SPI中断接受函数
void SPI1_IRQHandler()
{
if(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE) !=RESET)
{
SPI1_Start_Reindex%=SPI1_Buf_Lenth;
SPI1_Buf[SPI1_Start_Reindex]=SPI_I2S_ReceiveData(SPI1);
SPI1_Start_Reindex++;
}
//if(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)!=RESET)
//{
// SPI_SendString_Lenth(SPI1,SPI1_Buf,SPI1_Recieve_Lenth);
// SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_TXE,DISABLE); //SPI发送中断不使能
//}
}
|