|
用作SPI 从机 只做接收
但是发现 CLK 识别不对
例如
第四根线是 我做的一根测试线,每次中断接收到一个字节就翻转一次
但是为什么总是在字节中间翻转....时钟识别不对?
用的是SPI波特率才50K。。。。每个字节中间间隔也挺长的....没有硬件NSS
以下是初始化
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; //双线-只接收
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; //设置为从SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //空闲状态时,SCK保持高电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据采样从第二个时钟边沿开始
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由软件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //波特率预分频值为16
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式
SPI_Init(SPI3, &SPI_InitStructure);
//中断服务程序
void SPI3_IRQHandler(void)
{
static unsigned char TestFlag = 0;
if(SPI_I2S_GetITStatus(SPI3,SPI_I2S_IT_RXNE) != RESET) //接收中断
{
if(TestFlag==0)
{
TestFlag = 1;
Test0_Pin_Ctrl(1);
}
else
{
TestFlag = 0;
Test0_Pin_Ctrl(0);
}
//接收数据
SPI3_RcData[SPI3_FrameIn].Buff[SPI3_Datalent] = SPI_I2S_ReceiveData(SPI3);
SPI3_Datalent++;
SPI3_RecvTime = SPI123_FRAME_TIME; //SPI3接收帧间隔时间
SPI_I2S_ClearITPendingBit(SPI3,SPI_I2S_IT_RXNE);
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|