u8 SPI2_ReadWriteByte(u8 TxData)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){}
SPI_I2S_SendData(SPI2, TxData);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){}
return SPI_I2S_ReceiveData(SPI2);
}
void spi2_write(u8 txdata)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, txdata); //í¨1yíaéèSPIx·¢Ëíò»¸öbyte êy¾Y
}
//spi read function
u8 spi2_read(void)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
return (u8)SPI_I2S_ReceiveData(SPI2);
}
分开写的时候总是卡在接收缓存区为空的循环里,读不了数据是怎么回事?一定要写一起?读数据之前总是要先发送数据吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
常规的SPI,发送与接收是同步完成的,
必须有发送,才会有收到。
你如果用这种方式,那必须先发送。
但芯片有个单线(好像是这名字)模式,不用发送就可以收,属于非常规了。
frame_lengh= 某一帧的长度;
frame_integer=frame_lengh/256; 取整,因为一次只能写256字节
frame_remainder=frame_lengh%256; 取余,看看有没有余数或者帧小于256字节的情况
frame_end=256*frame_integer;
for(j=0;j<frame_integer;j++) 如果帧长度大于256字节执行
{
SPI_START;
SPI2_ReadWriteByte(0x06); //spi WREN command
SPI_END;
SPI_START;
SPI2_ReadWriteByte(0x02); //0x02 is page Program command
SPI2_ReadWriteByte((unsigned char)(progaddr>>16));
SPI2_ReadWriteByte((unsigned char)(progaddr>>8));
SPI2_ReadWriteByte((unsigned char)progaddr);
for(i=0;i<256;i++)
{
SPI2_ReadWriteByte(zhenshuzu[8+i+256*j]);
}
SPI_END;
while((W25X80_ReadSR()&0x01)==0x01);
SPI_END;
progaddr+=256;
}
if(frame_remainder) 如果有余数或者帧长度小于256字节
{
SPI_START;
SPI2_ReadWriteByte(0x06); //spi WREN command
SPI_END;
SPI_START;
SPI2_ReadWriteByte(0x02); //0x02 is page Program command
SPI2_ReadWriteByte((unsigned char)(progaddr>>16));
SPI2_ReadWriteByte((unsigned char)(progaddr>>8));
SPI2_ReadWriteByte((unsigned char)progaddr);
for(i=0;i<frame_remainder;i++)
SPI2_ReadWriteByte(fcl_control_sys[8+frame_end+i]);
SPI_END;
while((W25X80_ReadSR()&0x01)==0x01); // μè′yBUSYλÇå¿Õ
SPI_END;
progaddr+=frame_remainder;
}
reply_ack(udppcb,addr,port);
}
大神,为什么帧长度大于256执行上面那个for循环的时候,总是卡死在SPI读写函数里面?我仿真进去,有一个i的值是67,有一次是157,但是两次的j的值都是0,SPI读写函数卡在接收标志那里。
但是帧长度小于256,我只发过52字节长度的帧,执行下面的函数不会出错,不会卡死。
这是什么情况呢?这函数都一样的啊。。。。
弱弱问一句,如果溢出的话i等于多少啊、
一周热门 更多>