新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2019-6-5
- 在线时间
- 3 小时
|
1金钱
我使用F103的SPI2作为主,SPI1作为次,进行单机的spi通讯,SPI2发送到SPI1的数据,SPI1再发回来。遇到了数据偏移了一位的问题。
SPI12配置如下
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行同步时钟的空闲状态为高电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
从机中断配置
void SPI1_IRQHandler(void)
{
volatile u8 i;
if(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_RXNE) == SET)
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
i = SPI_I2S_ReceiveData(SPI1);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, i);
SPI_I2S_ClearITPendingBit(SPI1, SPI_I2S_IT_RXNE);
}
}
不知道怎么回事了。。
|
|