新手入门
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2016-9-8
- 在线时间
- 4 小时
|
发表于 2016-9-16 21:34:20
|
显示全部楼层
哥,我用spi进行双机通信,可以返回数据不对,我用主机发0xff,激发从机回信,从机从数组【1,2,3,4,5,6,7,8】中,但接收到的信息为
0808010102020303
0404050506060707,
8被提前了,而且每个数都重复了两遍,并且数据是分两次得到
/////////////主机程序/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
u16 datatemp=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
SPI2_Init ();
while (1)
{
delay_ms (1000);
for(datatemp =0;datatemp <8;datatemp ++)
SPI2_RECEIVE_Buffer [datatemp ] = SPI2_ReadWriteByte (0xff); //发送8次0xff,得到八次数据
for(datatemp =0;datatemp <8;datatemp ++)
printf ("%c",SPI2_RECEIVE_Buffer [datatemp ]);
printf("\r\n\r\n");
}
/////////////从机程序/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
u8 SPI2_TEXT_Buffer[]={1,2,3,4,5,6,7,8};
u8 SPI2_RESEIVE_Buffer[8]={0};
int main(void)
{
u16 datatemp=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //初始化与LED连接的硬件接口
SPI2_Init ();
while(1)
{
while(SPI_I2S_GetFlagStatus( SPI2 , SPI_I2S_IT_RXNE )== RESET ); //等待接受寄存器非空
SPI2_RESEIVE_Buffer [datatemp]=SPI2->DR ;
while(SPI_I2S_GetFlagStatus (SPI2 ,SPI_I2S_IT_TXE )==RESET );//等待发送寄存器空
SPI2->DR =SPI2_TEXT_Buffer [datatemp ];
datatemp ++;
if(datatemp ==8)
datatemp =0;
}
}
|
|