while(1)
{
SPI1_write(0x01);
delayms(5);
}
void SPI1_write(uint8 data)
{
while(!SPI_IsSPTEF(SPI1));
SPI_WriteDataReg(SPI1,data);
while(!SPI_IsSPRF(SPI1));
SPI_ReadDataReg(SPI1);
}
代码缩减后大致如上述。主要问题在于延时时间。延时是用FOR循环做的硬延时。
1、速率为1Mhz时,延时5毫秒,示波器观察SCK波形正常。(8个高低电平)
2、速率为1Mhz时,延时改为500毫秒,示波器观察SCK波形,发现已经紊乱,正玄波,没有完整的周期和频率,只有几个跳动。(3-4个跳动)
(事实上从100毫秒延时开始,SCK已经开始紊乱)
3、速率改为100Khz时,延时500毫秒,示波器观察SCK波形,发现波形有变好趋势。
4、速率改为20Khz时,延时500毫秒,示波器观察SCK波形,发现波形完全正常。(8个高低电平)
现在我想用1Mhz的频率,但是不知为何,延时时间长后,SCK不能正常发出脉冲电平,导致无法与从器件通讯。
请问有知道如何解决的吗?谢谢~
|