基于stm32的spi双机通信问题,请教大神
时间:10-02
整理:3721RD
点击:
我的spi通信总是不成功,在别的帖子上看到spi的初始化,但不知道main函数咋写,是什么样的流程这是我写的从机程序
//要写字符串数组
#define SIZE 32
u8 SPI2_TEXT_Buffer[]={"dahuai dan "};//发送数组
u8 SPI2_RESEIVE_Buffer[SIZE]={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(datatemp<SIZE )
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)//检查指定的SPI标志位设置与否:发送缓存空标志位
SPI_I2S_SendData (SPI2 ,SPI2_TEXT_Buffer[datatemp ]);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE ) == RESET)
SPI2_RESEIVE_Buffer[datatemp]=SPI_I2S_ReceiveData (SPI2 );
datatemp ++;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这是我的主机程序
#define SIZE 32
u8 SPI2_TEXT_Buffer[]={"congji fade xiaoxi"};
u8 SPI2_RESEIVE_Buffer[SIZE]={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(datatemp<SIZE )
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
SPI_I2S_SendData(SPI2, SPI2_TEXT_Buffer [datatemp ]); //通过外设SPIx发送一个数据
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位
SPI2_RESEIVE_Buffer[datatemp]=SPI_I2S_ReceiveData (SPI2 );
datatemp ++;
LED0 =!LED0 ;
}
datatemp=0;
printf("zhujijieshoudao de xinxi wei\r\n:%s",SPI2_RESEIVE_Buffer );
}
}
主要问题有几点:
1:相位设置应该没错,但依旧不理解在主函数里如何写收发数据的流程;
2:是不是主从机接四根线就行了。
//要写字符串数组
#define SIZE 32
u8 SPI2_TEXT_Buffer[]={"dahuai dan "};//发送数组
u8 SPI2_RESEIVE_Buffer[SIZE]={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(datatemp<SIZE )
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)//检查指定的SPI标志位设置与否:发送缓存空标志位
SPI_I2S_SendData (SPI2 ,SPI2_TEXT_Buffer[datatemp ]);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE ) == RESET)
SPI2_RESEIVE_Buffer[datatemp]=SPI_I2S_ReceiveData (SPI2 );
datatemp ++;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这是我的主机程序
#define SIZE 32
u8 SPI2_TEXT_Buffer[]={"congji fade xiaoxi"};
u8 SPI2_RESEIVE_Buffer[SIZE]={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(datatemp<SIZE )
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
SPI_I2S_SendData(SPI2, SPI2_TEXT_Buffer [datatemp ]); //通过外设SPIx发送一个数据
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位
SPI2_RESEIVE_Buffer[datatemp]=SPI_I2S_ReceiveData (SPI2 );
datatemp ++;
LED0 =!LED0 ;
}
datatemp=0;
printf("zhujijieshoudao de xinxi wei\r\n:%s",SPI2_RESEIVE_Buffer );
}
}
主要问题有几点:
1:相位设置应该没错,但依旧不理解在主函数里如何写收发数据的流程;
2:是不是主从机接四根线就行了。
没玩过
没看到你的全部程序和问题啊?